<分区>
我相信添加using
关键字是为了允许模板类型定义。但是我遇到了一个编译错误,这里是简化的代码:
template <bool EnableFirst, class T1, class T2>
struct OneOfTwo {};
template <class T1, class T2>
struct OneOfTwo<true, T1, T2>
{
using type = T1;
};
template <class T1, class T2>
struct OneOfTwo<false, T1, T2>
{
using type = T2;
};
struct A
{
static constexpr int X = 1;
};
struct B
{
static constexpr int X = 12;
};
struct C {};
struct D {};
template <class T1, class T2>
using ClassX = OneOfTwo<T1::X == T2::X, C, D>::type; //C4346: 'T2::X': dependent name is not a type; C2061: syntax error: identifier 'type'
template <class T1, class T2>
struct ClassY : public OneOfTwo<T1::X == T2::X, C, D>::type {}; //OK
我像这样使用这些类:
ClassY<A, B> y;
ClassX<A, B> x;
我相信 ClassX
和 ClassY
应该是完全一样的东西,但是 ClassX
会导致编译错误。所以我的问题是:我违反了 C++ 标准的哪一部分?
顺便说一句,我使用的是支持 XP (v140_xp) 的 MSVC 2015 工具集。