#include <type_traits>
using namespace std;
struct A
{
using key_type = int;
};
template<typename T, typename = void>
struct has_key_type : false_type
{};
template<typename T>
struct has_key_type<T, decltype(typeid(typename T::key_type), void())>: true_type
{};
int main()
{
cout << has_key_type<A>::value << endl;
cout << has_key_type<int>::value << endl;
}
The output is:
1
0
Which is as expected. However, if I change from
decltype(typeid(typename T::key_type), void())
to
decltype(typeid(typename T::key_type), int())
as follows:
template<typename T>
struct has_key_type<T, decltype(typeid(typename T::key_type), int())>: true_type
{};
The output is:
0
0
Why does the second version not work?