GCC 4.8.1接受
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
但是MSVC没有。另一方面,MSVC接受
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass;
};
但GCC不会。然后我在这个问题中看到了另一种声明:c ++ 11继承模板构造函数
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass<T>;
};
MSVC为此警告了“过时的声明样式”,GCC表示
prog.cpp:8:24: error: ‘template<class T> class Baseclass’ used without template parameters
using typename Baseclass::Baseclass<T>;
我认为第一个示例将是标准的符合语法。凭直觉,它对我来说似乎正确。
什么是c ++ 11标准符合语法?
答案有点埋在标准中。using声明定义为(7.3.3):
using [typename] nested-name-specifier unqualified-id;
nested-name-specifier
经过一些步骤后的解析simple-template-id
,定义为
template-name < [template-argument-list] >
简而言之,符合标准的语法是
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句