类型检测器`hasNestedType`未编译
type detector `hasNestedType` not compiling?
我正在尝试制作一个元函数,该函数告诉我类型T
是否具有成员类型CCD_ 2。
到目前为止,我的运气受到了这个好答案的启发:
#include <utility>
#include <type_traits>
struct A {using X = double;};
struct B {};
template <typename T, typename = int>
struct hasX : std::false_type {};
template <typename T>
struct hasX<T, decltype(T::X{}, 0)> : std::true_type {};
int main()
{
static_assert(hasX<A>::value,"Should have has X");
static_assert(!hasX<B>::value,"Should NOT have X");
}
但是它没有编译,我想知道问题出在哪里?为什么decltype(...)
中的逗号运算符不能像我想要的那样工作[如果T::X
成功则返回0
(sfinae(->使其成为int
->true
]
结果
您忘记了typename
template <typename T>
struct hasX<T, decltype(typename T::X{}, 0)> : std::true_type {};
// .....................^^^^^^^^