依赖于模板的继承的typedef和MSVC

时间:2013-11-12 21:23:39

标签: c++ templates visual-studio-2012

几个星期前,我为这样的2D实体写了一个特质类:

template<typename T>
struct traits_2d
{
    typedef T coordinates_type;
    typedef vector_2d<T> position_type;
    typedef vector_2d<T> direction_type;
    typedef vector_2d<T> size_type;
};

特征类使用如下:

template<typename T>
struct aabb_2d : public traits_2d<T>
{
    position_type origin;
    size_type size;
};

标准规定模板相关名称必须是完全限定的,因此不应编译。当然GCC编译失败了,并说出如下内容:

  

预期的嵌套名称说明符。可以是'typename traits_2d<T>::position_type'。

但是,另一方面,我在MSVC11(Visual Studio 2012)中使用这种模式已经两周了,它的工作和编译都很好。

为什么MSVC11似乎不遵循此语言规则?

注意:此问题不是Propagating 'typedef' from based to derived class for 'template'或其副本的重复,它会询问为什么应该是错误的内容在MSVC中有效。

0 个答案:

没有答案