Oggi ho fatto un piccolo errore di battitura nel mio programma e stavo vagando perché non stavo ottenendo alcun risultato, sebbene il programma fosse compilato correttamente. Fondamentalmente riduce a questo:Perché <invece di << nell'output dello stream è ancora compilato?
#include <iostream>
int main()
{
std::cout < "test"; // no << but <
}
ho assolutamente idea di che tipo di conversione implicita viene eseguita qui così il programma viene compilato ancora (sia g ++ 4.9.2 e anche g ++ 5). Ho appena realizzato che clang ++ rifiuta il codice. Esiste una conversione in void*
eseguita (non riesco a pensare ad altro)? Ricordo di aver visto qualcosa di simile, ma pensavo che fosse stato risolto in g ++ 5, ma non sembra essere il caso.
EDIT: non ero compilazione con -std=c++11
, in modo che il codice era valida in pre-C++ 11 (a causa della conversione al void*
di ostream
). Quando si compila con -std=c++11
g ++ 5 rifiuta il codice, g ++ 4.9 lo accetta ancora.
Viene visualizzato un avviso da g ++ 4.9.2 su un valore calcolato inutilizzato anche se si utilizza '-Wall'. –
@Raphael in effetti, quando ho compilato non ho guardato tutti gli avvertimenti, ora vedo e ho realizzato cosa è successo, anche se devo dire che è un po 'insolito. Uso la maggior parte del tempo '-Wall', tuttavia questo era un piccolo pezzo di codice che ho compilato in un testo sublime e ho realizzato che funziona magicamente – vsoftco
Perché [questo] (http://coliru.stacked-crooked.com/a/ 667a9c3ad1ee9afe) fornisce 0 come output? – Destructor