В С++ (и в С) есть замечательный оператор: ,
Он возвращает свой последний аргумент.
У меня в коде была такая конструкция:
namespace { const unsigned int BuffSize = 15; } int parse() { const unsigned char buff[BuffSize]; //... std::string name = std::string(reinterpret_cast<const char *>(buff, BuffSize)); } |
_Winnie C++ Colorizer |
При этом программа падала в различных местах, было пересмотрено куча подозрительных мест, найдено множество других ошибок, но эта ошибка так и не исчезала.
Этот проект собирается под win32 и sparc solaris, под виндой - msvc 2008, под соляркой - gcc 4.2.1. Также для тестов компиляции он собирается под mingw32-g++ 4.4.
В студии проект собирался с /W4, под gcc с -Wall.
Перепробовав все, я решил включить в gcc -Wextra и -pedantic.
Среди кучи варнингов я заметил вот этот: warning: left-hand operand of comma has no effect. Посмотрев в коде я увидел как раз указанную выше конструкцию.
Соответственно, оператор "запятая" возвращал последний операнд.
В гугле по запросу C++ comma operator выдал сразу пояснение:
a = b, c; // a is set to the value of b!
a = (b, c); // a is set to the value of c!