для двух аргументов.
template<class X, class Y, class Op>
struct op_valid_impl
{
template<class U, class L, class R>
static auto test(int) -> decltype(std::declval<U>()(std::declval<L>(), std::declval<R>()),
void(), std::true_type());
template<class U, class L, class R>
static auto test(...) -> std::false_type;
using type = decltype(test<Op, X, Y>(0));
};
Подскажите, пожалуйста, зачем здесь void() ?
static auto test(int) -> decltype(std::declval<U>()(std::declval<L>(), std::declval<R>()),
void(), std::true_type());
Скорее всего защита от прегруженного operator ,, с void() он не подхватится
расстрелять бы тех кто его перегружает
Обсуждают сегодня