Сообщение Re: хочуфичу - функции-конструкторы от 27.12.2023 18:06
Изменено 27.12.2023 18:09 rg45
Re: хочуфичу - функции-конструкторы
Здравствуйте, Кодт, Вы писали:
К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.
К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"
К>
К>чтобы потом компилятор говорил это юзеру.
Так а концепты/констрейнты чем плохи?
http://coliru.stacked-crooked.com/a/1f2fe7230b20bfd8
К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.
К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"
К>
К>template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args) [[signature_like ( T::T(Args&&...) ) ]]
К>
К>чтобы потом компилятор говорил это юзеру.
Так а концепты/констрейнты чем плохи?
http://coliru.stacked-crooked.com/a/1f2fe7230b20bfd8
template <typename...A>
requires requires(A&&...args) { Foo{std::forward<A>(args)...}; }
Foo make_foo(A&&... args) { return Foo(std::forward<decltype(args)>(args)...); }
int main()
{
make_foo(Bar{});
make_foo(Buz{}, Xyz{});
// make_foo(42); // error: no matching function for call to 'make_foo(int)'
}
Re: хочуфичу - функции-конструкторы
Здравствуйте, Кодт, Вы писали:
К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.
К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"
К>
К>чтобы потом компилятор говорил это юзеру.
Так а концепты/констрейнты чем плохи?
http://coliru.stacked-crooked.com/a/86b8b5b085a246a8
К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.
К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"
К>
К>template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args) [[signature_like ( T::T(Args&&...) ) ]]
К>
К>чтобы потом компилятор говорил это юзеру.
Так а концепты/констрейнты чем плохи?
http://coliru.stacked-crooked.com/a/86b8b5b085a246a8
template <typename...A>
requires requires(A&&...args) { Foo{std::forward<A>(args)...}; }
Foo make_foo(A&&... args) { return Foo(std::forward<A>(args)...); }
int main()
{
make_foo(Bar{});
make_foo(Buz{}, Xyz{});
// make_foo(42); // error: no matching function for call to 'make_foo(int)'
}