c – 模板构造函数继承的标准符合语法是什么?

前端之家收集整理的这篇文章主要介绍了c – 模板构造函数继承的标准符合语法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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标准符合语法?

解决方法

答案有点埋在标准中.使用声明定义为(7.3.3):
using [typename] nested-name-specifier unqualified-id;

嵌套名称说明符在一些步骤之后解析为simple-template-id,定义为

template-name < [template-argument-list] >

简而言之,符合标准的语法是

template <typename T>
class Subclass : public Baseclass<T>
{
public:
    using typename Baseclass<T>::Baseclass;
};

猜你在找的C&C++相关文章