Nik*_*s R 10 c++ constructor using-statement c++11
GCC 4.8.1接受
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
Run Code Online (Sandbox Code Playgroud)
但MSVC没有.另一方面,MSVC接受
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass;
};
Run Code Online (Sandbox Code Playgroud)
但海湾合作委员会没有.然后我在这个问题中看到了另一种声明:c ++ 11继承模板构造函数
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass::Baseclass<T>;
};
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会表示,MSVC警告称"过时的申报风格"
prog.cpp:8:24: error: ‘template<class T> class Baseclass’ used without template parameters
using typename Baseclass::Baseclass<T>;
Run Code Online (Sandbox Code Playgroud)
我认为第一个例子是标准的符合语法.直观地说,它对我来说是正确的.
什么是c ++ 11标准符合语法?
答案有点隐藏在标准中。using 声明定义为 (7.3.3):
using [typename] nested-name-specifier unqualified-id;
Run Code Online (Sandbox Code Playgroud)
nested-name-specifier经过一些步骤后的解析被simple-template-id定义为
template-name < [template-argument-list] >
Run Code Online (Sandbox Code Playgroud)
简而言之,标准一致的语法是
template <typename T>
class Subclass : public Baseclass<T>
{
public:
using typename Baseclass<T>::Baseclass;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |