Различия в интерпретации независимой конструкции между контекстом определения и точкой создания в c ++

N4527 14,6 [temp.res] / p8

Если гипотетическое создание шаблона сразу после его определения будет неправильно сформировано из-за конструкции, которая не зависит от параметра шаблона, программа неправильно сформирована; Диагностика не требуется. Если интерпретация такой конструкции в гипотетической реализации отличается от интерпретации соответствующей конструкции в любой реальной реализации шаблона, программа является некорректной; Диагностика не требуется. [Примечание: это может произойти в следующих ситуациях:

(8.1) - тип, используемый в независимом имени, является неполным в момент, когда шаблон определен, но завершен в момент, когда выполняется создание экземпляра, или

(8.2) -экземпляр использует аргумент по умолчанию или аргумент шаблона по умолчанию, который не был определен в точке, в которой был определен шаблон, или же

(8.3) - оценка константного выражения (5.20) в рамках использования шаблона

(8.3.1) -значение константного объекта целочисленного или незаданного типа перечисления или же

(8.3.2) - значение объекта constexpr или

(8.3.3) - значение ссылки или

(8.3.4) - определение функции constexpr,

и этот объект не был определен при определении шаблона, или

Итак, эти коды плохо сформированы?

код 1:

extern double b;

template<class T>
void f(T=b){}

void g(){
    f<double>();//ill-formed or not?
}

double b = 0;

void h(){
    f<double>();//ill-formed or not?
}

код 2:

//translation 1
extern double b;

template<class T>
void f(T=b){}

void g(){
    f<double>();//ill-formed or not?
}

//translation 2
double b = 0;

А такжеIssue1850 Различия между контекстом определения и точкой создания

Различные характеристики сущностей, на которые ссылается независимая ссылка в шаблоне, могут изменяться между контекстом определения и точкой конкретизации специализации этого шаблона., К ним относятся инициализация (которая влияет на возможность использования объекта в константном выражении), аргументы функций и шаблонов по умолчанию и полнота типов. Существует расхождение в реализации того, проверяются ли они в контексте определения или в момент создания экземпляра. Предположительно, для того, чтобы сделать его плохо сформированным, необходимо правило, не требующее диагностики, если достоверность такой ссылки меняется между двумя контекстами.

Можете ли вы показать мне больше примеров того, как характеристики независимых имен различаются между двумя контекстами? Обычно о 8.2 и 8.3.1

Ответы на вопрос(1)

Ваш ответ на вопрос