дополнительный › после #include и все еще действителен

Я заметил, что написал по ошибке

#include <vector>> //Notice the additional > after <vector>

Мой код скомпилирован без каких-либо проблем. Как это возможно?

P.S. Я на MSVS 2015

Изменить:

Компилятор фактически выдает предупреждение об этом. Однако не должно ли это быть ошибкой, а не предупреждением по стандарту?


person Humam Helfawi    schedule 26.11.2016    source источник
comment
GCC и Clang также принимают этот код с предупреждением.   -  person Oktalist    schedule 26.11.2016
comment
1>c:\users\starl1ght\documents\visual studio 2015\projects\stack\stack\main.cpp(5): предупреждение C4067: неожиданные токены после директивы препроцессора - ожидается новая строка   -  person Starl1ght    schedule 26.11.2016
comment
Извините, я заметил предупреждение... но разве это не должно быть ошибкой? позволяет ли стандарт писать что-либо после оператора include?   -  person Humam Helfawi    schedule 26.11.2016
comment
Он плохо сформирован в соответствии со стандартом (насколько я могу судить), но это не ваш вопрос.   -  person krzaq    schedule 26.11.2016
comment
Стандарт не делает различий между ошибкой и предупреждением, он просто говорит, что компилятор должен выдать диагностику.   -  person Bo Persson    schedule 26.11.2016
comment
@BoPersson понял.. спасибо   -  person Humam Helfawi    schedule 27.11.2016
comment
Очевидно, вы можете написать что угодно после директивы препроцессора, и компилятор выдаст только предупреждение.   -  person Barmak Shemirani    schedule 27.11.2016
comment
Вы все еще помните старые времена Visual C++ 6.0, где мы могли писать: ??=include<> вместо #include<>?   -  person Raindrop7    schedule 27.11.2016
comment
@ Raindrop7: ??= - это триграф для #. Вы также можете использовать %: в качестве орграфа для #. Насколько я знаю, даже С++ 14 не устранил триграфы, но С++ 17 устранит. GCC не распознает их, если вы не настаиваете (--trigraphs).   -  person Jonathan Leffler    schedule 27.11.2016