c++ - 在没有模板参数的派生类中使用模板类名是否合法?

标签 c++ templates inheritance language-lawyer c++17

以下代码在 clang++ 8.0.0 下都可以正常编译和 g++ 9.1.0 (编译标志是 -Wall -Wextra -Werror -pedantic-errors):

template <typename>
struct Base
{
};

struct Derived : Base<int>
{
    Base base()
    {
        return Base();
    }
};

int main()
{
}

这是这些编译器中的错误还是 C++ 标准的特性?

最佳答案

injected-class-name

内部Base<T> , Base指(在某些情况下)Base<T> .

Derived然后也会使用那个注入(inject)的类名。

关于c++ - 在没有模板参数的派生类中使用模板类名是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703935/

相关文章:

c++ - 一个符号替换多个符号时,是否存在从UTF-8到CP1251的音译?

c++ - 根据表达式的有效性选择要应用的函数

c++ - sclite (SCTK),C++ 模板参数 Filter::Filter* 无效。 Cygwin

java - 合并两个相似的数字类实现

delphi - Delphi 7继承

c++ - 在循环中附加范围

c++ - 在std::qsort的compare函数中处理错误情况

c++ - std::string 比较,是否按字典顺序

c++ - 将 std::type_index 作为模板参数传递给函数模板

C++继承,重写时仍会调用基函数