3 votes

Différentes déclarations de la lambda qui capture le paramètre à l'intérieur des expressions requises C++20

Considérez les deux concepts simples suivants :

template <typename T>
concept C1 = requires(T t) {
  [t = t]{ t; };
};

template <typename T>
concept C2 = requires(T t) {
  [t]{ t; };
};

À mon avis, les deux déclarations devraient être équivalentes, mais le GCC rejette l'option concept C2 et dit :

<source>:10:9: error: use of parameter outside function body before ';' token

Pourquoi le GCC n'accepte que le concept C1 ou c'est juste un bug ? Sinon, quelle est la différence entre ces deux déclarations ?

3voto

Daveed V. Points 76

A capture simple (comme [t] dans votre deuxième exemple) ne peut capturer que des variables locales et/ou des this . Cependant, les paramètres d'un Expression requise ne sont pas des variables locales. Ce n'est pas un problème pour init-captures (comme dans votre premier exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X