Есть ли способ избежать фиктивных функций в следующем примере?
template<class T1, class T2>
struct A {
static T1 T1_ ();
static T2 T2_ ();
typedef decltype (T1_ () + T2_ ()) sum_type;
};
Я хотел бы написать
typedef decltype (T1+T2) sum_type;
но это невозможно, так как T1
а также T2
являются типами, а не переменными. Является ли мое решение выше всего возможным?
Священный Стандарт обеспечивает std::declval
именно для этой цели:
typedef decltype (declval<T1>()+declval<T2>()) sum_type;
Включить <utility>
заголовок.
Вы можете сделать это:
typedef decltype(*(T1*)0 + *(T2*)0) sum_type;