2017-02-02 2 views
0

Со ссылкой на cppreference's section on function templates:Почему явное инстанцирование шаблона функции не использовать встроенный или constexpr

Явное инстанцирование шаблона функции или от функции члена шаблона класса не может использовать встроенный или constexpr

Эти темы, inline и constexpr, кажутся раздельными и неродственными. Почему это ограничение существует?

+0

Потому что как 'inline', так и' constexpr' могут привести к тому, что не существует фактического * экземпляра * функции? Это, конечно, противоречит всей части «явного * экземпляра». –

ответ

1

Потому что они служат противоположным целям.

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

Точка inline предназначена для определения функций в заголовке - так что несколько определений функции через несколько единиц перевода могут быть свернуты в один.

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

Не имеет смысла явно создавать функцию inline или constexpr - эти шаблоны функций уже должны быть определены в заголовочных файлах, и поэтому они могут быть неявно инстанцированием по требованию.

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