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;
};
但海湾合作委员会没有。然后我在这个问题中看到了另一种声明: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;
The 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;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)