2015-12-31 2 views
1

Я следующее сообщение об ошибке от Xcode: аргументC++ шаблоны специализаций и Xcode

Шаблон для параметра шаблона шаблон должен быть шаблоном класса или типа псевдонима шаблона

Однако точно такой же код работает отлично в Visual Studio.

template< typename T_NODE, template<typename> class T_ALLOCATOR > 
class qt_fixed_pool_general {}; 

template< template< typename, int > class T_ALLOCATOR, int T_COUNT > 
struct static_to_dynamic 
{ template< typename T_NODE > using t_allocator = T_ALLOCATOR< T_NODE,T_COUNT >; }; 

template< typename T_NODE, int T_COUNT > 
struct safe_array {}; 

template< class T_NODE, int T_COUNT > 
class qt_fixed_pool_static : public qt_fixed_pool_general< 
     T_NODE, 
     static_to_dynamic< safe_array, T_COUNT >::t_allocator > 
{}; 

Любые идеи, что может быть? Я использую Xcode 7.2

ответ

2

Проблема заключается в том, что при разборе (не создании экземпляра) шаблона компилятор не может знать, что t_allocator будет шаблоном, а не, скажем, статическим элементом данных. Вы должны сказать ему:

template< class T_NODE, int T_COUNT > 
class qt_fixed_pool_static : public qt_fixed_pool_general< 
     T_NODE, 
     static_to_dynamic< safe_array, T_COUNT >::template t_allocator > 
{};           //^^^^^^^^ 

[Live example]

Обратите внимание на ключевое слово template добавляется между :: и t_allocator.

Причина, по которой это работает в Visual Studio, заключается в том, что VS не соответствует стандарту в его разборе шаблонов (и никогда не был): он не выполняет двухфазный поиск должным образом, а вместо этого откладывает все разрешения имен до момента создания экземпляра время, поэтому оно не срабатывает при таких ошибках.

+0

Большое вам спасибо! – Nickreal03

+2

@ Nickreal03 SO способ выразить благодарность [accept] (http://stackoverflow.com/help/someone-answers) ответ, который решил вашу проблему (не более одного принятого ответа на вопрос). Это означает, что вопрос решен и дает вам и автору определенную репутацию. – Angew

+0

Принято! Еще раз спасибо, я этого не знал. – Nickreal03

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