【发布时间】:2018-03-23 07:11:55
【问题描述】:
#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;
}
输出是:
1
0
正如预期的那样。但是,如果我从
decltype(typeid(typename T::key_type), void())
到
decltype(typeid(typename T::key_type), int())
如下:
template<typename T>
struct has_key_type<T, decltype(typeid(typename T::key_type), int())>: true_type
{};
输出是:
0
0
为什么第二个版本不起作用?
【问题讨论】:
-
不相关,为什么要使用 typeid ?这仅用于运行时检查。
-
使用
int main,其中is standard。 -
@liliscent 如果我没记错 typeid 只是对多态类型的运行时检查
标签: c++ templates sfinae typetraits compile-time-constant