1

几周前,我为这样的二维实体编写了一个特征类:

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 中起作用。

4

0 回答 0