std::is_constructible
Özel kurucuları idare etme kuralları nelerdir ? Aşağıdaki kod verildiğinde:
#include <iostream>
class Class {
private:
Class() { }
};
template <typename T>
class Test {
public:
static void test() {
std::cout
//<< std::is_constructible<Class>::value
<< std::is_constructible<T>::value
<< std::endl;
}
};
int main() {
Test<Class>::test();
}
Bu baskı 0
( ideone ), yani T
varsayılan olarak yapılandırılamaz.
Yorumlanan satırın işareti kaldırıldığında , 11
( ideone ) yazdırılır , böylece T
aniden varsayılan olarak yapılandırılabilir hale gelir.
Her iki sonucu da desteklemek için mantık bulabilirim, ancak yorum yapılan satırı eklemenin ikincinin sonucunu nasıl değiştirdiğini anlamıyorum. Bu bir şekilde UB'yi mi çağırıyor? Bu bir derleyici hatası mı? Yoksa std::is_constructible
gerçekten tutarsız mı?
::value
sürümün kendisinden önce gelenlerin çıktısını da değiştirebileceği anlaşılıyor : godbolt.org/z/zCy5xU Yorumlanan satırı açın ve hepsi gcc cinsinden 1: s olur.
false
ancak işlev şablonu önerilmezse , aniden döndürür true
: godbolt.org/z/zqxdk2
00