Следующие компиляции на GCC 4.8.1 (с --std=c++11
):
struct non_default_constructible { non_default_constructible() = delete; };
template<class T>
struct dummy {
T new_t() { return T(); }
};
int main(int argc, char** argv) {
dummy<non_default_constructible> d;
return 0;
}
Сложная часть состоит в том, что dummy<non_default_constructible>::new_t()
явно плохо сформирован, но это не мешает компилятору создавать экземпляры dummy<non_default_constructible>
.
Это поведение, указанное стандартом? И какими будут соответствующие разделы/ключевые слова?