Информация об изменениях

Сообщение Re: хочуфичу - функции-конструкторы от 27.12.2023 18:06

Изменено 27.12.2023 18:09 rg45

Re: хочуфичу - функции-конструкторы
Здравствуйте, Кодт, Вы писали:

К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.


К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"

К>
К>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: хочуфичу - функции-конструкторы
Здравствуйте, Кодт, Вы писали:

К>Которая плоха тем, что при несоответствии типов аргументов формирует громоздкие ошибки.


К>Вот было бы здорово как-то говорить компилятору "этот набор аргументов — такой же, как для вот такого семейства функций"

К>
К>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)'
}