2015-07-15 6 views
0

У меня ошибка компиляции grom gcc (версии менее 6). clang и vc2013/2015 и gcc6 не жалуются на этот код. Поэтому я считаю, что это ошибка gcc 4.x-5.x. Есть ли способ обхода этого кода для компиляции кода gcc 4.x-5.x?ошибка компиляции под gcc

#include <tuple> 
#include <typeinfo> 
#include <typeindex> 
using namespace std; 

template <typename... ParamTypes> 
void CreateObject(ParamTypes... args) 
{ 
// error: conversion from 'std::tuple<std::type_index, std::type_index, std::type_index>' to non-scalar type 'std::tuple<std::type_index>' requested 
    auto types = make_tuple(type_index(typeid(args))...); 
} 

int main() 
{ 
    CreateObject(1, "2", 1.1f); 
    return 0; 
} 
+0

Вы установили '-std = C++ 11'? –

+1

Неплохая практика начинать имена ваших функций с заглавной буквы – Mackiavelli

+0

да. C++ 11i находится на – Alexander

ответ

2

Похоже, ошибка в НКУ, но вы можете просто написать функцию, которая возвращает type_index в качестве обходного пути.

template<typename T> 
type_index get_index(const T& v) 
{ 
    return type_index(typeid(v)); 
} 

template <typename... ParamTypes> 
void CreateObject(ParamTypes... args) 
{ 
    auto types = make_tuple(get_index(args)...); 
} 

или вы просто не можете использовать auto

template <typename... ParamTypes> 
void CreateObject(ParamTypes... args) 
{ 
    tuple<type_index, type_index, type_index> types = 
    make_tuple(typeindex(typeid(args))...); 
} 
+0

спасибо - я не думал о дополнительной функции. Мне нужен авто, потому что CreateObject используется для различного количества аргументов – Alexander

Смежные вопросы