【发布时间】:2016-04-26 12:33:37
【问题描述】:
代码如下:
template<typename, typename, typename = void>
struct has_member_type : false_type {};
template<typename T, typename Member>
struct has_member_type<T, Member, void_t<typename T::Member>> : true_type {};
struct foo { using bar = int; };
int main()
{
std::cout << has_member_type<foo, typename foo::bar>::value;
}
我正在尝试检查 foo 是否有 bar 类型成员。如果实现没有指定类型成员的名称,它可以正常工作,但是这样名称被硬编码到实现中,这对我不起作用。
说是重复的问题并不能回答我的问题。正如我在上面的段落中所解释的,当类型被硬编码到实现中时很好,但是当我从外部指定类型时我无法让它工作(这是具体问题)。代码编译正常,但产生错误的结果。
【问题讨论】:
标签: c++ templates c++11 c++14 sfinae