【发布时间】:2020-08-30 05:49:23
【问题描述】:
似乎 GCC 不需要在模板中指定类型名,而 Clang 则需要。
考虑以下代码sn-p:
template<
typename T,
typename value_type = T::value_type
>
void func(T t) {}
当 Clang 报告以下错误消息时,上面的代码在 GCC 10.0.1 上编译成功:
❯ clang++ -std=c++20 asdf.cpp
asdf.cpp:3:27: error: missing 'typename' prior to dependent type name 'T::value_type'
typename value_type = T::value_type
^~~~~~~~~~~~~
typename
1 error generated.
为什么会这样?
更新 1:
正如@Language Lawyer 所指出的,对typename 的第一个怀疑是Clang 目前不支持P0634R3 的一个功能。
更新 2:
我将把这个问题分开,因为它包含两个不同的主题。
有关详细信息,请参阅编辑历史记录。
【问题讨论】:
-
clang.llvm.org/cxx_status.html#cxx20 表示 Clang 尚不支持 P0634R3
-
@LanguageLawyer 立即清除。所以
typename不是一个错误,而是一个尚未在 Clang 中发布的功能。 -
@LanguageLawyer 我可以接受您的回答,因为问题标题仅显示
typename。也许我可以为第二个问题发布另一个问题。
标签: c++ templates language-lawyer c++20