Наличие лямбды в индексе оператора, похоже, не работает для g ++ и clang.лямбда внутри индексатора итератора
Является ли это ошибкой реализации или «несчастливым» правилом в стандарте C++?
Пример:
class A
{
public:
template<typename T> void operator[](T) {}
template<typename T> void operator()(T) {}
};
int main()
{
A a;
a[ [](){} ]; // did not compiler: see error message
a([](){}); // works as expected
}
Ошибка:
main.cpp:13:6: error: two consecutive '[' shall only introduce an attribute before '[' token
a[ [](){} ];
^
main.cpp:13:15: error: expected primary-expression before ']' token
a[ [](){} ];
Я знаю, что атрибуты начинается с "[[", но мне интересно, что "[[" (с одним или более пробелов), также работает как:
void func(int x [ [gnu::unused] ]) {} // compiles fine! :-(
И есть ли «последовательное» значение с дополнительными пробелами или без них? – Klaus
@Klaus C++ не является чувствительным к пробелу. '>>' было исключением в том, что считалось маркером, но нет '[[' token. – Barry
Вчера я узнал, что 'template <> double B :: var = 1.123; 'недопустим, но' template <> double B :: var = 1.123; 'работает. Только пробел ... :-) –
Klaus