Size: a a a

2020 July 04

A

Alex in pro.cxx
Хм, с С++20 можно юзать такое https://en.cppreference.com/w/cpp/language/explicit
источник

АК

Александр Караев... in pro.cxx
Alex
Хм, с С++20 можно юзать такое https://en.cppreference.com/w/cpp/language/explicit
С C++20 можно requires навесить
источник

A

Alex in pro.cxx
Или так
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alex
Хм, с С++20 можно юзать такое https://en.cppreference.com/w/cpp/language/explicit
Это для другого
источник

A

Alex in pro.cxx
Это тоже SFINAE context
источник

A

Alex in pro.cxx
А для чего другого?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Это позволяет включать эксплисит по условию без свиной
источник

A

Alex in pro.cxx
Я понимаю, но туда можно подложить свинью, как раз мой случай
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
У конструктора пары миллиард перегрузок в том числе по этой причине, explicit(bool) позволит их уменьшить почти вдвое
источник

A

Alex in pro.cxx
А вот с аргументом конструктора не прокатило
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alex
Я понимаю, но туда можно подложить свинью, как раз мой случай
explicit(свинья, false) ? Костыльно
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Он появился в 20, так что используй requires
источник

A

Alex in pro.cxx
или true
всё, что с enable_if, и так костыльно, пусть бы хоть работало
источник

A

Alex in pro.cxx
да у меня нет 20 пока
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Alex
да у меня нет 20 пока
Тогда этого эксплисит у тебя тоже нет
источник

A

Alex in pro.cxx
вот именно
источник

A

Alex in pro.cxx
Вот бы добавить аналог #if, но на уровне компилятора, как if constexpr
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
В д это есть
источник

A

Alex in pro.cxx
ладно, я понял, нужно мой конструктор сделать шаблонным со значением по умолчанию
источник

m

magras in pro.cxx
Alex
Хм, с С++20 можно юзать такое https://en.cppreference.com/w/cpp/language/explicit
хм. Это чтобы можно было мимкрировать под другой класс? Что то вроде
template <class T>
class Foo {
 T m_inner;
public:
 template <class U>
 explicit(!std::is_convertible_v<U, T>) Foo(U&& u): m_inner(std::forward<U>(u)) {}
};
источник