Следующие компиляции с 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?