SFINAE auf Operator prüfen + =
Ich versuche, eine Überlastung aus einem Überlastsatz zu entfernen, wennoperator+=
wird vermisst
Ich kann überprüfen, obT+T
ist legal:
template<typename T,
typename CheckTplusT = decltype(std::declval<T>() + std::declval<T>())>
void foo(T a, T b, ...)
{
a = a + b;
}
Aber das funktioniert nicht für+=
template<typename T,
typename CheckTplusT = decltype(std::declval<T>() += std::declval<T>())>
void foo(T a, T b, ...)
{
a += b;
}
Ist dies durch Verwendung eines anderen Ausdrucks in @ behebbadecltype
Oder brauche ich ein anderes SFINAE-Konstrukt?
Der Grund, warum ich dies aus dem Überlastsatz entfernen muss, ist, dass es mit einer anderen Überlast zusammenstößt, die einen Funktor als Alternative zu @ akzeptier+=
. Compiler sind VS2013, gcc4.8