【发布时间】:2011-02-20 08:08:17
【问题描述】:
以下内容使用 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 标准?
【问题讨论】:
-
无论何时涉及模板,很遗憾 VC++ 不符合标准。这很烦人,但你很快就会掌握它。
标签: c++ visual-studio-2010 templates gcc c++11