Вот что стандартный говорит о независимых именах в определении шаблона:
Независимые имена, используемые в определении шаблона, обнаруживаются с помощью обычного поиска по именам и привязываются к месту их использования.
[Пример 1:
void g(double); void h(); template<class T> class Z { public: void f() { g(1); // calls g(double) h++; // ill-formed: cannot increment function; this could be diagnosed // either here or at the point of instantiation } }; void g(int); // not in scope at the point of the template definition, not considered for the call g(1)
- конец примера]
Меня смущает комментарий к h++;
, в котором говорится, что плохо сформировано: ... это может быть диагностировано либо здесь, либо в момент создания. Что, если реализация выберет последнее, но нет экземпляра шаблона? Где это будет диагностировано?
Означает ли это, что это на самом деле плохо сформировано, вместо этого не требуется диагностика?