Почему не работает boost. Tuple .get в функциях шаблонов в gcc? - PullRequest
8 голосов
/ 10 июня 2011

При попытке портировать некоторый код для компиляции в Linux я получаю специфические ошибки компиляции.При поиске в кодовой базе мне, наконец, удалось получить следующий код:

 5: // include and using statements
 6: template<typename RT, typename T1>
 7: RT func(tuple<T1> const& t) {
 8:     return t.get<0>();
 9: }
10: // test code

При попытке использовать его я получаю сообщение об ошибке:

test.cpp: In function <functionName>:
test.cpp:8: error: expected primary-expression before ‘)’ token

Код отлично работает в Visual Studioно по какой-то причине я не могу понять, почему он не работает с g ++.Кто-нибудь здесь понял, как обойти это?

1 Ответ

17 голосов
/ 11 июня 2011

Вам нужно немного template love:

return t.template get<0>();

Visual C ++ неправильно анализирует шаблоны, поэтому он неправильно принимает код без ключевого слова template.Для получения дополнительной информации о том, почему template требуется здесь, см. Часто задаваемые вопросы о переполнении стека C ++ «Где и почему я должен указывать« template »и« typename »на зависимых именах?»

...