Я не уверен, какой компилятор прямо здесь, так как я еще не полностью опытен с концепциями C ++ 20. Следующий код отклоняется GCC (15.1), говоря, что не существует соответствующей объявления для foo :: do_foo , clang (20.1.0) принимает код. Вот на Годболте. Замена Decktype (x) с помощью u в типе возврата или с использованием неограниченного U для параметра функции делает оба компилятора счастливо скомпилировать код. Идея заключалась в том, чтобы тип возврата был диапазоном констального T всякий раз, когда пройденное параметр является const .
Какой компилятор «в праве» здесь? Или, альтернативно, является ли следующее правильное C ++? < /P>
Спасибо! < /P>
#include
#include
#include
#include
template
concept RangeReturnTypeIsConvertibleTo = requires(RangeType r) {
{ *r.begin() } -> std::convertible_to;
};
template
concept RangeOf = std::ranges::range &&
RangeReturnTypeIsConvertibleTo;
template
concept IsQualificationOf = std::same_as;
class Foo {
public:
using T = int;
template
auto do_foo(U&& x) -> RangeOf auto;
};
template
auto Foo::do_foo(U&& x) -> RangeOf auto
{
static std::vector bar{4, 5, 8};
return bar;
}
int main() {
auto foo = Foo();
for(auto a : foo.do_foo(4)) std::cout
:31:6: error: no declaration matches 'auto [requires ::RangeOf] Foo::do_foo(U&&)'
31 | auto Foo::do_foo(U&& x) -> RangeOf auto
| ^~~
:26:10: note: candidate is: 'template requires IsQualificationOf auto [requires ::RangeOf] Foo::do_foo(U&&)'
26 | auto do_foo(U&& x) -> RangeOf auto;
| ^~~~~~
:20:7: note: 'class Foo' defined here
20 | class Foo {
| ^~~
: In function 'int main()':
:42:28: error: use of 'auto [requires ::RangeOf] Foo::do_foo(U&&) [with U = int]' before deduction of 'auto'
42 | for(auto a : foo.do_foo(4)) std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-by-clang
Код с использованием ограниченного авто, отклоненного GCC, но не Clang ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
MacOS Clang Compiler выпуск (Apple Clang версия 17.0.0 (Clang-1700.0.13.5))))
Anonymous » » в форуме C++ - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
TypeScript: определение типа ошибки из отклоненного ожидаемого обещания?
Anonymous » » в форуме Javascript - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-