Posiadanie lambda w operatorze podrzędnym wydaje się nie działać dla g ++ i clang.iterator indeksu lambda wewnątrz indeksu
Czy jest to błąd implementacyjny, czy "nieszczęśliwa" reguła w standardzie C++?
Przykład:
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
}
Błąd:
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[ [](){} ];
Wiem, że atrybuty zaczyna się od "[[", ale zastanawiam się, że "[[" (z jednym lub więcej spacji) również działa tak:
void func(int x [ [gnu::unused] ]) {} // compiles fine! :-(
A co oznacza "kolejne" z dodatkowymi białymi znakami lub bez nich? – Klaus
@Klaus C++ nie jest wrażliwy na białe znaki. ">>" był wyjątkiem w tym, że był uważany za token, ale nie ma "[tokena. – Barry
Wczoraj dowiedziałem się, że 'template <> double B :: var = 1.123; 'jest nieprawidłowe, ale' szablon <> double B :: var = 1.123; 'działa. Tylko biała spacja ... :-) –
Klaus