Почему не то же самое То же самое ? - PullRequest
2 голосов
/ 10 февраля 2020

В LWG 3182 говорится, что

Спецификация концепции Same в 18.4.2 [concept.same]:

template<class T, class U>
  concept Same = is_same_v<T, U>;

-1- Same<T, U> subsumes Same<U, T> and vice versa.

кажется противоречивым. Из одного только определения концепции это не тот случай, когда Same<T, U> включает Same<U, T> и наоборот.

Однако из cppreference ,

... Коммутативность удовлетворяется, т. Е. Для любых двух типов T и U, is_same<T, U>::value == true тогда и только тогда, когда is_same<U, T>::value == true.

Примечание Same<T, U> определяется как is_same_v<T, U>, как Same<T, U> не может Same<U, T>?

1 Ответ

3 голосов
/ 10 февраля 2020

Эта проблема относится к стандартной концепции Same, которая была переименована в same_as и решена путем указания ее как [concept.same] :

 template<class T, class U>
   concept same-as-impl = is_same_v<T, U>;       // exposition only

 template<class T, class U>
   concept same_as = same-as-impl<T, U> && same-as-impl<U, T>;

Причина, по которой прямое определение не было симметричным c (т. Е. Same<T, U> не включало в себя Same<U, T>), заключается в том, что только понятия могут быть отнесены к , и именно поэтому в концепции c необходим только same-as-impl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...