Сообщение Не могу явно инстанцировать шаблон функции-члена от 09.10.2018 18:03
Изменено 09.10.2018 18:09 Евгений Музыченко
Не могу явно инстанцировать шаблон функции-члена
Хочу в классе иметь несколько вариантов одной и той же мелкой вычислительной (а потому инлайновой) функции. Создаю шаблон:
Затем прямо в определении класса пытаюсь его инстанцировать:
На что MS VC++ версий от 13.10 до 15.00 выдает "error C2252: cannot explicitly instantiate template in current scope". В 19.10 сообщение поменялось на "error C2252: an explicit instantiation of a template can only occur at namespace scope".
В описании ошибки предлагается добавить "<>" после template, и заодно там явно указывается имя класса.
Вот такой пример успешно компилируется всеми имеющимися у меня версиями MS VC++, которые дружно оформляют все вызовы func, как внешние. То есть, фактически не срабатывают ни инстанциаци, ни инлайнинг.
Что там нужно сделать, чтобы нужные версии функции явно инстанциировались и проинлайнились в режиме оптимизации?
template <typename ArgType, typename ResType>
ResType func (ArgType arg) { return ResType (Arg * i); }
Затем прямо в определении класса пытаюсь его инстанцировать:
template short func <short, short> (short);
На что MS VC++ версий от 13.10 до 15.00 выдает "error C2252: cannot explicitly instantiate template in current scope". В 19.10 сообщение поменялось на "error C2252: an explicit instantiation of a template can only occur at namespace scope".
В описании ошибки предлагается добавить "<>" после template, и заодно там явно указывается имя класса.
Вот такой пример успешно компилируется всеми имеющимися у меня версиями MS VC++, которые дружно оформляют все вызовы func, как внешние. То есть, фактически не срабатывают ни инстанциаци, ни инлайнинг.
Скрытый текст | |
| |
Что там нужно сделать, чтобы нужные версии функции явно инстанциировались и проинлайнились в режиме оптимизации?
Не могу явно инстанцировать шаблон функции-члена
Хочу в классе иметь несколько вариантов одной и той же мелкой вычислительной (а потому инлайновой) функции. Создаю шаблон:
Затем прямо в определении класса пытаюсь его инстанцировать:
На что MS VC++ версий от 13.10 до 15.00 выдает "error C2252: cannot explicitly instantiate template in current scope". В 19.10 сообщение поменялось на "error C2252: an explicit instantiation of a template can only occur at namespace scope".
В описании ошибки предлагается добавить "<>" после template, и заодно там явно указывается имя класса.
Вот такой пример успешно компилируется всеми имеющимися у меня версиями MS VC++, которые дружно оформляют все вызовы func, как внешние. То есть, фактически не срабатывают ни инстанциаци, ни инлайнинг.
Что там нужно сделать, чтобы нужные версии функции явно инстанциировались и проинлайнились в режиме оптимизации?
template <typename ArgType, typename ResType>
ResType func (ArgType Arg) { return ResType (Arg * i); }
Затем прямо в определении класса пытаюсь его инстанцировать:
template short func <short, short> (short);
На что MS VC++ версий от 13.10 до 15.00 выдает "error C2252: cannot explicitly instantiate template in current scope". В 19.10 сообщение поменялось на "error C2252: an explicit instantiation of a template can only occur at namespace scope".
В описании ошибки предлагается добавить "<>" после template, и заодно там явно указывается имя класса.
Вот такой пример успешно компилируется всеми имеющимися у меня версиями MS VC++, которые дружно оформляют все вызовы func, как внешние. То есть, фактически не срабатывают ни инстанциаци, ни инлайнинг.
Скрытый текст | |
| |
Что там нужно сделать, чтобы нужные версии функции явно инстанциировались и проинлайнились в режиме оптимизации?