2番目のパラメーターとして列挙型を指定した場合にVisualC++(2008)が混乱するのはなぜですか?bool型を定義した場合はそうではありませんか?
2番目のコンストラクターは'basic_string'型であるため、型の一致によって2番目のコンストラクターが除外されるべきではありませんか?
#include <string>
using namespace std;
enum EMyEnum { mbOne, mbTwo };
class test {
public:
#if 1 // 0 = COMPILE_OK, 1 = COMPILE_FAIL
test(basic_string<char> myString, EMyEnum myBool2) { }
test(bool myBool, bool myBool2) { }
#else
test(basic_string<char> myString, bool myBool2) { }
test(bool myBool, bool myBool2) { }
#endif
};
void testme() {
test("test", mbOne);
}
参照を指定することでこれを回避できます。basic_string&myString'ですが、' const basic_string&myString'の場合はそうではありません。
また、「test((basic_string) "test"、mbOne);」を介して明示的に呼び出します。また動作します。
これは、すべての式/タイプが固有の「!=0」を介してブール値に解決されることに関係していると思われます。
すべて同じコメントに興味があります:)