Czy możliwe jest przeciążenie konstruktora, który będzie akceptował tylko pusty ciąg znaków w przypadku użycia na liście inicjalizatora?Przeciążanie literowe ciągów znaków
struct null_ptr_type;
struct str
{
str(null_ptr_type*) {}
str(const char(&)[1]) {}
};
struct config
{
str s;
};
int main()
{
config c1 = {0}; // Works, implicit conversion to a null pointer
config c2 = {str("")}; // Works
config cx = {str("abc")}; // Fails (as desired)
config c3 = {""}; // Fails with no conversion possible
}
Czy istnieje sposób, aby składnię c3
pracy bez jednoczesnego przyjmowania niepuste ciągi? Nie rozumiem, dlaczego tak się nie dzieje, z uwagi na to, że działa c1
. Czy jest tu jakaś reguła, której tu brakuje, co zabrania tego?
FWIW, VS 2013 wywołuje niejawna konwersja tak jak oczekiwać. Nie najlepsze referencje, które znam, ale to coś. –
Dzięki, może powinienem określić: 'g ++ (Ubuntu/Linaro 4.7.3-2ubuntu1 ~ 12.04) 4.7.3', ale dobrze to słyszeć działa gdzieś. :) –
clang ++ 3.5 także akceptuje tę konwersję. – dyp