첨자 연산자에서 람다를 사용하면 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++는 공백을 구분하지 않습니다. '>'는 토큰으로 간주되었지만'[['토큰이 없습니다. – Barry
어제 나는'template <> double B :: var = 1.123을 배웠다. '가 잘못되었지만'template <> double B :: var = 1.123;이 작동합니다. 공백 만 ... :-) –
Klaus