加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:11:42 所属栏目:百科 来源:网络整理
导读:GCC 4.8.1接受 template typename Tclass Subclass : public BaseclassT{public: using typename BaseclassT::Baseclass;}; 但MSVC没有.另一方面,MSVC接受 template typename Tclass Subclass : public BaseclassT{public: using typename Baseclass::Basecl
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;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读