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 inheriting template constructors
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;
};
关于c++ - 模板构造函数继承的标准符合语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940365/