а так? struct fake { char i1; char i2; }; template<typename T> char f(const T& value); template<typename T> fake f(T& value); int i = 0; if (sizeof( f(i) ) == 2) ...
а так не получится? template<typename T> void func(T* ptr) { std::cout « "i'm pointer\n"; } template<typename T> void func(T it) { std::cout « "i'm iterator\n"; }
т.е. последовательность освобождений нам гарантирует что цепочка release - ЧМЗ(relaxed) - acquire синхронизирует данные, а вот что будет с цепочкой release - ЧМЗ (acquire) - Ч...
https://books.google.ru/books/about/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC.html?id=1UXRAAAAQBAJ&re...
Хочешь сказать, что все изменения атомика во всех доступных потоках вне зависимости от упорядочивания будут видны без дополнительной синхронизации?
В справке gcc пишут, что nostdinc используется в основном в случаях наподобие сборки ядра или ст. библиотеки. А как IDE после этих опций нашла заголовки?