繁体   English   中英

gcc 4.5.1 vs VC2010模板部分特化:哪个符合C ++ 0x?

[英]gcc 4.5.1 vs VC2010 template partial specialization: which is C++0x conformant?

以下使用VC2010进行编译,但使用gcc 4.5.1并使用-std = c ++ 0x进行编译

template <class T, class TBase>
class TestBase : public TBase
{
public:
// Helper functor
    template <unsigned int t_u, class TRet = int>
    struct Helper
    {
        TRet operator() (int x = 0, int y = 0)
        {
                return (TRet)t_u;
        }
    };
}; // class TestBase

template<class TBase>
class Test0 : public TestBase<Test0<TBase>, TBase>
{
public:
    Helper<100> Get100; // gcc 4.5.1 error: 'Helper' does not name a type
};

gcc接受更详细的:

template<class TBase>
class Test1 : public TestBase<Test1<TBase>, TBase>
{
    typedef TestBase<Test1<TBase>, TBase> thisBase;
public:
    typename thisBase::template Helper<100> Get100;
};

哪个(如果有的话)符合c ++ 0x?

在第一个代码段中,Helper不是依赖名称。 因为它不依赖,所以必须在解析模板时解析它,而不是在实例化时解析模板。 这在C ++ 03和C ++ 0x中都是必需的。

使用typedef使其成为依赖名称,以便在实例化时解析它。 您还可以使用typename Test1 :: template Helper <100>。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM