Substitution failure is not an error: Difference between revisions

Content deleted Content added
mNo edit summary
No edit summary
 
Line 37:
 
template <typename T>
struct has_typedef_foobarHasTypedefFoobar {
// Types "yes" and "no" are guaranteed to have different sizes,
// specifically sizeof(yes) == 1 and sizeof(no) == 2.
Line 55:
};
 
struct fooFoo {
typedef float foobar;
};
Line 61:
int main() {
std::cout << std::boolalpha;
std::cout << has_typedef_foobarHasTypedefFoobar<int>::value << std::endl; // Prints false
std::cout << has_typedef_foobarHasTypedefFoobar<fooFoo>::value << std::endl; // Prints true
return 0;
}
Line 75:
#include <iostream>
#include <type_traits>
 
template <typename... Ts>
using void_t = void;
 
template <typename T, typename = void>
struct has_typedef_foobarHasTypedefFoobar : std::false_type {};
 
template <typename T>
struct has_typedef_foobarHasTypedefFoobar<T, std::void_t<typename T::foobar>> : std::true_type {};
 
struct fooFoo {
using foobar = float;
};
Line 91 ⟶ 88:
int main() {
std::cout << std::boolalpha;
std::cout << has_typedef_foobarHasTypedefFoobar<int>::value << std::endl;
std::cout << has_typedef_foobarHasTypedefFoobar<fooFoo>::value << std::endl;
return 0;
}
Line 103 ⟶ 100:
 
template <typename T>
using has_typedef_foobar_tHasTypedefFoobarUnderlying = typename T::foobar;
 
struct fooFoo {
using foobar = float;
};
Line 111 ⟶ 108:
int main() {
std::cout << std::boolalpha;
std::cout << std::is_detected<has_typedef_foobar_tHasTypedefFoobarUnderlying, int>::value << std::endl;
std::cout << std::is_detected<has_typedef_foobar_tHasTypedefFoobarUnderlying, fooFoo>::value << std::endl;
return 0;
}