decltype для выражений типа

Есть ли способ избежать фиктивных функций в следующем примере?

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 являются типами, а не переменными. Является ли мое решение выше всего возможным?

2

Решение

Священный Стандарт обеспечивает std::declval именно для этой цели:

typedef decltype (declval<T1>()+declval<T2>()) sum_type;

Включить <utility> заголовок.

5

Другие решения

Вы можете сделать это:

typedef decltype(*(T1*)0 + *(T2*)0) sum_type;
4

По вопросам рекламы [email protected]