std :: common_type Merkmal für benutzerdefinierte Typen

Seit C ++ 11 das Typmerkmalstd::common_type wurde vorgestellt.std::common_type bestimmt den gemeinsamen Typ aller Vorlagenargumente. In C ++ 14 ist sein Hilfstypstd::common_type_t wurde auch eingeführt, um Code zu erstellen, der @ verwendstd::common_type Typ Merkmal kürzer.

std::common_type ist besonders nützlich bei überladenen arithmetischen Operatoren,

template<typename T1, typename T2>
std::common_type_t<T1, T2> operator+(T1 const &t1, T2 const &t2) {
  return t1 + t2;
}

Es funktioniert einwandfrei, wenn die Vorlagenargumente in Typen erstellt wurden (z. B.int, double). Es scheint jedoch nicht zu funktionieren, wenn ich benutzerdefinierte Typen als Vorlagenargumente bereitstelle, z. B.

struct A {};
struct B {};

std::common_type_t<A, B> // doesn't work

Q: Wie kann ich @ machstd::common_type Trait Arbeit mit benutzerdefinierten Typen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage