C ++ Самый неприятный синтаксический анализ, когда аргумент - числовой литерал? [Дубликат]

На этот вопрос уже есть ответ:

Почему в классе инициализаторы могут использовать только = или {}? 1 ответ

Я делал урок, который выглядел так:

struct InputHandler
{
    std::vector<std::pair<int, int>> keyBindings( 256 );
};

Это привело к ошибке, и я знаю, что это потому, что компилятор интерпретирует это как функцию, а не аргумент конструктора. Но мне было интересно, есть ли что-то двусмысленное, когда я передал числовой литерал в скобках, как в этом случае? Я знаю, что могу исправить это, используя только фигурные скобки, но я бы подумал, что самая неприятная проблема с синтаксическим анализом не возникнет, так как использование числового литерала 256 не может быть интерпретировано как функция.

Редактировать: Я рад закрыть или удалить этот вопрос. Я понял, что, хотя эта конкретная строка не является неоднозначной, общие правила C ++ 11 запрещают инициализаторам в классе использовать что-либо, кроме = или {}, это как общее правило, чтобы не иметь дополнительное исключение из правила. С другой стороны, создание вектора в функции main () в виде:

std::vector<std::pair<int, int> foo(5);

Работает отлично. Видимо, это не двусмысленное выражение.

Ответы на вопрос(2)

Ваш ответ на вопрос