【发布时间】:2021-07-30 01:17:01
【问题描述】:
template<typename T>
concept Octet = 1 == sizeof(T);
// ok
Octet decltype(auto) c = 'a';
// ok
void f1(const auto&) {}
// ok
void f2(Octet auto) {}
// ok
void f3(Octet auto&&) {}
// error: expected ‘auto’ or ‘decltype(auto)’ after ‘Octet’
void f4(Octet const auto&) {}
// error: cannot declare a parameter with ‘decltype(auto)’
void f5(Octet decltype(auto)) {}
使用gcc-11 -std=c++20 编译。见:https://godbolt.org/z/xK769Pfjn
为什么 f4 和 f5 不起作用?
【问题讨论】:
-
嗯,语言终于强制执行正确的 const 了吗? ??????
-
Octet auto表示类型。你可以有右常量或左常量,但不能有“中间常量”。 -
为什么
f5不起作用? @DrewDormann -
包括所有必要的消息。 @largest_prime_is_463035818
-
@xmllmx
f5不是有效的 C++ 语法。它没有任何意义。您或许可以查看this question 以了解decltype(auto)在C++ 中的含义。或者你可以edit这个问题来描述你认为该参数的含义。
标签: c++ templates c++20 c++-concepts type-deduction