2017-07-03 3 views
2

Ich versuche eine statische Bestätigung zu erstellen, die prüft, ob Typ A zu Typ B hinzugefügt werden kann. Gibt es eine Möglichkeit zu überprüfen, ob Schablonentyp A zum Schablonentyp B hinzugefügt werden kann Zeit kompilieren? A und B könnten wirklich alles sein.Statische Bestätigung, ob eine Hinzufügeoperation verfügbar ist

+0

Es hängt davon ab, was genau meinen Sie mit _addable_. –

Antwort

4

Mit is_detected, können Sie so etwas wie:

template <typename LHS, typename RHS> 
using sum_t = decltype(std::declval<LHS>() + std::declval<RHS>()); 

template <typename LHS, typename RHS> 
using has_sum = is_detected<sum_t, LHS, RHS>; 
+0

Interessant, dass es kein 'is_detected_v' gibt. Dennoch könnte man 'Vorlage consExpr Auto hat_sum_v = std :: experimental :: is_detected :: Wert;'. . . 'static_assert (has_sum_v );' –

Verwandte Themen