ожидаемый безусловный идентификатор перед числовой константой - PullRequest
5 голосов
/ 26 мая 2011
template <int K>
class Wrap
{
   // stuffs
};

Что не так, если я создаю экземпляр шаблона как Wrap < 5>4 > p;? Я получаю ожидаемый неквалифицированный идентификатор перед числовой константой ошибка. Как это исправить?

Ответы [ 3 ]

13 голосов
/ 26 мая 2011

Изменить Wrap < 5>4 > p; на Wrap < (5>4) > p;

Первый > принимается за конец списка аргументов шаблона, а не за оператор >

ISO C ++ [14,2 / 3]

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

8 голосов
/ 26 мая 2011

Что плохого, если я создаю шаблон как Wrap < 5>4 > p;?

Это должно быть интуитивно очевидно, просто взглянув на утверждение: это сбивает с толку даже человека!Компилятор не может справиться с двойным значением > здесь: означает ли оно «больше чем»?Означает ли это «закрыть список аргументов шаблона»?Оказывается, это означает и , и компилятор не имеет ни малейшего намека на то, какое значение применять где.Оба являются технически действительными анализами.

2 голосов
/ 26 мая 2011

неоднозначность.Вместо этого используйте Wrap <(5> 4)>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...