Почему <вместо << в потоке вывод по-прежнему компилируется?
Сегодня я сделал небольшую опечатку в своей программе и странствовал, почему я не получил никакого вывода, хотя программа компилировалась нормально. В основном это сводится к этому:
#include <iostream>
int main()
{
std::cout < "test"; // no << but <
}
Я абсолютно не представляю, какое неявное преобразование здесь выполняется, поэтому программа все еще компилируется (как g ++ 4.9.2, так и даже g ++ 5). Я только что понял, что Clang ++ отклоняет код. Есть ли преобразование вvoid*
выполняется (не может думать ни о чем другом)? Я помню, что видел что-то подобное, но я думал, что это было решено в g ++ 5, но, похоже, это не так.
РЕДАКТИРОВАТЬ: Я не собирался с-std=c++11
таким образом, код был действителен до C ++ 11 (из-за преобразования вvoid*
изostream
). При компиляции с-std=c++11
g ++ 5 отклоняет код, g ++ 4.9 по-прежнему принимает его.