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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...