#c #lambda #lan&ua&e-lawyer #c 20 #c -concepts
#c #лямбда #язык-юрист #c 20 #c -концепции
Вопрос:
Рассмотрим следующие две простые концепции:
template <typename T&&t;
concept C1 = requires(T t) {
[t = t]{ t; };
};
template <typename T&&t;
concept C2 = requires(T t) {
[t]{ t; };
};
На мой взгляд, два объявления должны быть эквивалентны, но GCC отклоняет concept C2
и говорит:
<source&&t;:10:9: error: use of parameter outside function body before ';' token
Почему GCC принимает только concept C1
, или это просто ошибка? Если нет, то в чем разница между этими двумя объявлениями?
Ответ №1:
Простой захват (как [t]
во втором примере) может фиксировать только локальные переменные и / или this
. Однако параметры requirements-expression не являются локальными переменными. Это не проблема для init-captures (как в вашем первом примере).