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 Tvarsayılan olarak yapılandırılamaz.
Yorumlanan satırın işareti kaldırıldığında , 11( ideone ) yazdırılır , böylece Taniden 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_constructiblegerçekten tutarsız mı?
::valuesü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.
falseancak işlev şablonu önerilmezse , aniden döndürür true: godbolt.org/z/zqxdk2
00