Сообщение Re[2]: Есть ли метод у класса - HasMethod - старая тема от 11.11.2019 7:54
Изменено 11.11.2019 8:07 rg45
Re[2]: Есть ли метод у класса - HasMethod - старая тема
Здравствуйте, prog123, Вы писали:
P>
Беда в том, что эти выражения и без static_assert приводят к ошибке. А хотелось бы чтоб они давали false, так, чтоб к ним можно было применить логическое отрицание и получить true, в компайл тайме.
P>
P> //static_assert(HasMember1<B>::value); // uncommment and get compilation error
P> //static_assert(HasMember1<int>::valuе); // the same as above
P>
Беда в том, что эти выражения и без static_assert приводят к ошибке. А хотелось бы чтоб они давали false, так, чтоб к ним можно было применить логическое отрицание и получить true, в компайл тайме.
templame <typename T>
std::enable_if_t<HasMemeber1<T>::value> foo(const T& t) { t.Member1(); }
templame <typename T>
std::enable_if_t<!HasMemeber1<T>::value> foo(const T& t) { process_common_case(t); }
Re[2]: Есть ли метод у класса - HasMethod - старая тема
Здравствуйте, prog123, Вы писали:
P>
Беда в том, что эти выражения и без static_assert приводят к ошибке. А хотелось бы чтоб они давали false, так, чтоб к ним можно было применить логическое отрицание и использовать в SFINAE, например.
P>
P> //static_assert(HasMember1<B>::value); // uncommment and get compilation error
P> //static_assert(HasMember1<int>::valuе); // the same as above
P>
Беда в том, что эти выражения и без static_assert приводят к ошибке. А хотелось бы чтоб они давали false, так, чтоб к ним можно было применить логическое отрицание и использовать в SFINAE, например.
templame <typename T>
std::enable_if_t<HasMemeber1<T>::value> foo(const T& t) { t.Member1(); }
templame <typename T>
std::enable_if_t<!HasMemeber1<T>::value> foo(const T& t) { process_common_case(t); }