Учитывая следующий код (уменьшенное положение кода complexer):Получение возвращаемого типа функции члена параметрической в невычисленных контекстах
#include <type_traits>
template<unsigned i>
struct index_st
{
using type = void;
};
struct pack
{
template<unsigned index>
static typename index_st<index>::type get();
template<unsigned index>
using unpack_t = decltype(get<index>());
};
template<typename P, unsigned index>
struct unpack
{
using type = typename P::unpack_t<index>;
};
int main()
{
unpack<pack, 3> u;
}
следующей ошибка компиляции брошенных G (4.8.1):
sample.cpp:21:38: error: expected ';' before '<' token
using type = typename P::unpack_t<index>;
^
sample.cpp:21:38: error: expected unqualified-id before '<' token
sample.cpp: In instantiation of 'struct unpack<pack, 3u>':
sample.cpp:26:21: required from here
sample.cpp:21:38: error: 'typename pack::unpack_t' names 'template<unsigned int index> using unpack_t = decltype (get<index>())', which is not a type
Моя получает Цель СССР типа, возвращаемый pack::get<index>()
внутри unpack
структуры.
Я пытался сделать это с и без using
заявления, используя std::result_of
и другие комбинации, но и во всех случаях, я был не в состоянии получить тип возвращаемого get
(параметрическая функция-член).
Каков правильный способ?
Добавить 'template' ключевое слово:' используя тип = TYPENAME P :: шаблон unpack_t; '. –
Constructor
@ FilipRoséen-refp Еще 30 бонусов, чтобы иметь возможность инсталляции! – Yakk
@ Якк это на самом деле только 3 ответа в [тег: C++], что требуется, подсчет голосов медленен при обновлении; Я работаю над этим! –