struct S {
template< typename T >
operator T () {
std::cout
Из моего чтения стандарта i get t = const int < /code>.
Но GCC и Clang говорят, что T будет иметь тип int < /code>. < /p>
from [temp.deduct.conv]: < /p>
Если A-CV-квалифицированный тип, то верхний уровень CV-квалификаторов типа A игнорируется для вычета типа.
, если a-тип ссылки, тип, упоминаемый A A, используется для вычета типа. не CV-квалифицирован. Затем, во -вторых, является ссылочным типом, и поэтому I Remove & из и получить выведен a = const int .
Теперь я сравнивал выведен A = const int с t и получить t = const int .
obster
Подробнее здесь: [url]https://stackoverflow.com/questions/79753825/template-argument-deduction-for-templated-conversion-operator[/url]
Рассмотрим следующий пример: < /p> [code]struct S { template< typename T > operator T () { std::cout Из моего чтения стандарта i get t = const int < /code>. Но GCC и Clang говорят, что T будет иметь тип int < /code>. < /p> from [temp.deduct.conv]: < /p>
Если A-CV-квалифицированный тип, то верхний уровень CV-квалификаторов типа A игнорируется для вычета типа. , если a-тип ссылки, тип, упоминаемый A A, используется для вычета типа. не CV-квалифицирован. Затем, во -вторых, является ссылочным типом, и поэтому I Remove & из и получить выведен a = const int . Теперь я сравнивал выведен A = const int с t и получить t = const int . obster