список инициализаторов как аргумент оператора [] - PullRequest
6 голосов
/ 09 января 2012

Этот вопрос относится к обсуждаемому здесь .

Я пытаюсь использовать список инициализаторов для создания аргумента, который будет передан operator[].

#include <string>
#include <vector>

struct A {

std::string& operator[](std::vector<std::string> vec)
{
  return vec.front();
}

};

int main()
{
    // ok
    std::vector<std::string> vec {"hello", "world", "test"};

    A a;
    // error: could not convert '{"hello", "world", "test"}' to 'std::vector...'
    a[ {"hello", "world", "test"} ];
}

Мой компилятор (GCC 4.6.1) жалуется:

g++ -std=c++0x test.cpp
test.cpp: In function ‘int main()’:
test.cpp:20:8: error: expected primary-expression before ‘{’ token
test.cpp:20:8: error: expected ‘]’ before ‘{’ token
test.cpp:20:8: error: expected ‘;’ before ‘{’ token
test.cpp:20:35: error: expected primary-expression before ‘]’ token
test.cpp:20:35: error: expected ‘;’ before ‘]’ token

Должно ли это быть допустимым C ++ 11?

Интересно, что при использовании operator() вместо operator[] это работает.

1 Ответ

4 голосов
/ 09 января 2012

Да, это допустимый C ++ 11 и должен работать в любом совместимом компиляторе.

Обратите внимание, что поддержка C ++ 11 в gcc довольно незрелая, и этот пример кода не будет компилироваться ни в одной версии 4.6, но только в версиях svn 4.7 svn.

...