| 564 | |
| 565 | template <typename _Source> |
| 566 | class cni_decayed_conversion_cpp { |
| 567 | template <typename T, typename = void> |
| 568 | struct is_specialized |
| 569 | { |
| 570 | constexpr static bool value = true; |
| 571 | }; |
| 572 | |
| 573 | template <typename T> |
| 574 | struct is_specialized<T, void_t<typename type_conversion_cpp<T>::_not_specialized>> |
| 575 | { |
| 576 | constexpr static bool value = false; |
| 577 | }; |
| 578 | |
| 579 | public: |
| 580 | using target_type = typename type_conversion_cpp< |
| 581 | typename std::conditional<is_specialized<_Source>::value, _Source, |
| 582 | typename std::conditional<is_specialized<decay_t<_Source>>::value, decay_t<_Source>, _Source>::type>::type>::target_type; |
| 583 | }; |
| 584 | |
| 585 | // CNI Implementation |
| 586 | template <typename T> |
nothing calls this directly
no outgoing calls
no test coverage detected