Недавно появилась перегрузка метода, с которого приложение начало работать. Наконец, отслеживая его, новый метод вызывается там, где я этого не ожидал.
Мы имели
setValue( const std::wstring& name, const std::wstring& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
std::wstring bvalue( func2() ? L"true", L"false" );
setValue( L"bool", bvalue );
setValue( L"empty", L"" );
Он был изменен так, что при сохранении значения bool мы используем те же строки (внутреннее хранение данных строк)
setValue( const std::wstring& name, const std::wstring& value );
setValue( const std::wstring& name, const bool& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
setValue( L"bool", func2() );
setValue( L"empty", L"" ); << --- this FAILS!?!
Проблема с L "" заключается в том, что она неявно выполняет кастинг и раньше была счастлива как std:: wstring, но не предпочитает быть bool. Компилятор MSVC не жалуется и не предупреждает об этом, поэтому я беспокоюсь, что даже если я "исправлю" setValue (L "empty", L ""); быть
setValue( L"empty", std::wstring() );
кто-то другой может прийти позже и просто использовать setValue (L "empty", L ""); и вам придется отследить эту проблему еще раз.
Мы решили использовать явный метод, но для этого использования оно не является допустимым. Есть ли способ заставить компилятор жаловаться на это или иным образом предотвратить проблему? В противном случае я собираюсь изменить имя метода, который принимает bool, чтобы гарантировать, что он не может сделать неправильное предположение.