Cześć, zapoznaję się z biblioteką konceptów w C++ i widzę pewne różnice w informacjach na ten temat, a mianowicie - dwa sposoby tworzenia konceptów.
Pierwszy z nich zakłada, że koncept tworzony jest według schematu
template <typename T>
concept nazwa_konceptu = ....
Tutaj po znaku równości zazwyczaj występuje zdefiniowana funkcja requires()
Drugi ze sposobów wygląda nieco inaczej:
auto concept nazwa_konceptu<typename T>{ ... }
Przy czym słowo kluczowe auto
nie musi występować. Potem oczywiście inaczej wygląda też zastosowanie danego konceptu w funkcji / klasie.
Moje pytanie jest jednak takie - czy te dwie metody są równoważne, czy może występują między nimi jakieś różnice? Można stosować je wymiennie?
To, co rzuca się w oczy na początku to to, że w pierwszym przypadku używamy template<typename T>
, w drugim nie oraz że w pierwszym używamy znaku równości i potem zazwyczaj funkcji requires()
, natomaist w drugim nie ma znaku równości, wszystko jest zapisane w klamerkach { }
.
Czy ktoś byłby w stanie przybliżyć mi ten temat?