2015-09-14 2 views
0

Этот код не компилируется на VS2010:Передача литерал массива в качестве аргумента функции

struct Point { 
    float x; 
    float y; 
}; 

void do_something(Point p) { 
    // something happens here 
} 

int main(int argc, char **argv) { 
    do_something({10, 11}); 
} 

Существуют ли какие-либо версии C++, где это законно синтаксис?

+1

Вот полезная схема того, что есть и не поддерживается в последних версиях MSVC: https://msdn.microsoft.com/en-us/library/hh567368.aspx – user4581301

+1

Компилятор, совместимый с C++ 11 должен поддержать это. VS2010 не поддерживает C++ 11. –

+0

, например. gcc 5.1 с опциями -std = C++ 1y -Wall -Wextra -pedantic –

ответ

4

Это похоже на агрегатную инициализацию для меня. Он должен работать в VS2013.

EDIT: Подтверждено, это должно работать на компиляторе C++ 11. Кроме того, это не литерал массива, это агрегатная инициализация. Вы можете найти правила по нему here и here. Возможно, вы сможете загрузить новый компилятор и запустить его на старой среде IDE, но я не думаю, что VS2010 может его запустить.

+0

Можно ли заставить его работать в VS2010? – peco

+2

Нет, вам здесь очень не повезло, @peco. Быстрый ответ: C++ 11 был стандартом C++, утвержденным в 2011 году, поэтому поддержка в MSVC 2010 обречена быть пятнистой. Они получили общие и уникальные указатели, поэтому они пытались. Это больше, чем я могу сказать за их поддержку С. – user4581301

Смежные вопросы