Почему порядок подстановки аргументов шаблона имеет значение?

C ++ 11

14.8.2 -Шаблон Аргумент Дедукция - [temp.deduct]

7 Подстановка происходит во всех типах и выражениях, которые используются в типе функции и в объявлениях параметров шаблона. Выражения включают в себя не только константные выражения, такие как те, которые появляются в границах массива или в качестве нетиповых аргументов шаблона, но также и общие выражения (т.е. неконстантные выражения) внутриsizeof, decltypeи другие контексты, которые допускают непостоянные выражения.

C ++ 14

14.8.2 -Шаблон Аргумент Дедукция - [temp.deduct]

7 Подстановка происходит во всех типах и выражениях, которые используются в типе функции и в объявлениях параметров шаблона. Выражения включают в себя не только константные выражения, такие как те, которые появляются в границах массива или в качестве нетиповых аргументов шаблона, но также и общие выражения (т.е. неконстантные выражения) внутриsizeof, decltypeи другие контексты, которые допускают непостоянные выражения.Замена происходит в лексическом порядке и останавливается, когда встречается условие, которое приводит к неудаче удержания.

В добавленном предложении явно указывается порядок подстановки при работе с параметрами шаблона в C ++ 14.

Порядок замены - это то, что чаще всего не уделяется много внимания. Я еще не нашел ни одной статьи о том, почему это важно. Может быть, это потому, что C ++ 1y еще не полностью стандартизирован, но я предполагаю, что такое изменение должно было быть внесено по причине.

Вопрос:

Почему и когда имеет значение порядок замены аргументов шаблона?

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

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