Barry - , , , . , , , , , .
, static_assert
- SFINAE , -. , :
template <class T>
using void_t = void;
template <class T>
struct foo;
template <>
struct foo <double> {};
template <class T, class = void>
struct has_foo_trait : std::false_type {};
template <class T>
struct has_foo_trait<T, void_t<decltype(foo<T>{})>> : std::true_type {};
int main(int, char**) {
std::cerr << has_foo_trait<int>::value;
std::cerr << has_foo_trait<double>::value;
return 0;
}
01
. , , static_assert
ing , , static_assert
, .
, , , , , . "" void_t
. SFINAE true
has_foo_trait
, . , , . . , .