C++ : probleme cu sync()

Lucrăm cu Microsoft Visual Studio Enterprise 2015 (VS2015), respectiv cu Microsoft Visual Studio Ultimate 2013 (VS2013), în Windows 10 Professional (thanks, MSDNAA).

Chiar dacă Bjarne Stroustrup vorbeşte despre std::cin.sync() în cărţile sale, standardul C++ lasă la îndemâna implementatorilor construcţia acesteia.
Motiv pentru care funcţia face ceva în VS2013, respectiv nu face nimic în VS2015, GCC.

Descărcaţi codulPentru vizualizare, folosiţi scrollbar-ul din josul blocului de cod.
//VS2013:
#include <iostream>
#include <string>

#undef CURATENIE
#define CURATENIE \
    std::cin.sync(); \
    std::cin.clear(); 
int main()
{
	std::cout << "Inserati un cuvant"
                  << std::endl;
	std::string cuvinte;
	std::cin >> cuvinte;
	//testati: 1) Ion Ionel 2) Ion Ionel Ionica
	std::cout << "Ati scris "
		  << cuvinte
	          << std::endl;
	CURATENIE
	std::cout << "Inserati alt cuvant"
		  << std::endl;
	std::string alte_cuvinte;
	std::cin >> alte_cuvinte;
	std::cout << "Ati scris "
		  << alte_cuvinte
		  << std::endl;

	//incheiere bazata pe sync:
	std::cout << "Tastati o litera, urmata de ENTER,"
		     " pt. a incheia programul"
	          << std::endl;
	CURATENIE
	char a = '1';
	std::cin >> a;
	return 0;
}
Descărcaţi codulPentru vizualizare, folosiţi scrollbar-ul din josul blocului de cod.
//VS2015,GCC:
#include <iostream>
#include <string>
#include <limits>

#undef CURATENIE2
#define CURATENIE2 \
   std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); \
   std::cin.clear(); 
int main()
{
	std::cout << "Inserati un cuvant"
		  << std::endl;
	std::string cuvinte;
	std::cin >> cuvinte;
	//testati: 1) Ion Ionel 2) Ion Ionel Ionica
	std::cout << "Ati scris "
		  << cuvinte
		  << std::endl;
	CURATENIE2
	std::cout << "Inserati alt cuvant"
		  << std::endl;
	std::string alte_cuvinte;
	std::cin >> alte_cuvinte;
	std::cout << "Ati scris "
		  << alte_cuvinte
		  << std::endl;

	//incheiere care nu se bazeaza pe sync:
	std::cout << "Tastati o litera, urmata de ENTER,"
		     " pt. a incheia programul"
		  << std::endl;
	CURATENIE2
        char a = '1';
	std::cin >> a;
	return 0;
}