5
bir başlatıcı listesinde kullanıldığında yalnızca boş bir dize kabul edecek bir yapıcı bir aşırı yapmak mümkün mü?Dize Değişmez Aşırı
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
}
da boş olmayan dizeler kabul etmeden c3
iş için sözdizimi yapmak için bir yolu var mı? c1
'un çalışması nedeniyle neden yapılmadığını anlamıyorum. Bunu yasaklayan bir kural var mı? C++ 11 ve "tek tip başlatma sözdizimi" Kullanımı
FWIW, VS 2013 örtük dönüştürme çağırır bekliyoruz. Bildiğim en iyi referans değil ama bir şey. –
Sağol belki de belirtmelidir: 'g ++ (~ 12.04 Ubuntu/Linaro 4.7.3-2ubuntu1) 4.7.3', ama iyi bir yerde çalışır duymak. :) –
clang ++ 3.5 da bu dönüşümü kabul ediyor. – dyp