Re: Локальные классы и шаблонные функции
От: MuTPu4  
Дата: 10.09.06 01:30
Оценка: 1 (1)
Здравствуйте, Roman Odaisky, Вы писали:

RO>Можно ли посмотреть на место в стандарте, регламентирующее поведение в такой ситуации? Так можно вообще?

Я думаю, что код является вполне корректным. Основные ограничения, накладываемые на типовые аргументы шаблона, перечислены в (14.3.1/2):

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argumentfor a template type-parameter.

причем данные правила относится к diagnosable rules (1.4/1), т.е. при их нарушении реализация обязаны выдать диагностику (1.4/2).
В приведенном же примере, в результате вывода аргументов шаблона, параметр UnaryOperation получит значение int (*)(int), которое является составным (compound) типом, включающим только фундаментальрные типы. К сожалению, я не смог найти в стандарте прямого указания на то, что фундаментальные типя обладают внешним связыванием, однако на это намекает определение из (3.5/2).
Существенно здесь то, что адрес функции без связывания передается только на стадии исполнения, на стадии же компиляции и компановки реализация имеет дело только с типами, обладающими внешним связыванием.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.