Я пытаюсь исключить перегрузку из набора перегрузки, если operator+=
отсутствует.
Я знаю, как проверить, является ли T+T
законным:
template<typename T,
typename CheckTplusT = decltype(std::declval<T>() + std::declval<T>())>
void foo(T a, T b, ...)
{
a = a + b;
}
но это не работает для +=
template<typename T,
typename CheckTplusT = decltype(std::declval<T>() += std::declval<T>())>
void foo(T a, T b, ...)
{
a += b;
}
Является ли это фиксируемым, используя другое выражение внутри decltype
или мне нужна другая конструкция SFINAE?
Причина, по которой мне нужно это исключить из набора перегрузки, заключается в том, что он сталкивается с другой перегрузкой, которая принимает функтор, который будет использоваться в качестве альтернативы +=
. Компиляторы - VS2013, gcc4.8