Viewing file: anew6.C (988 B) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/97523 // { dg-do compile { target c++11 } }
// [expr.new]/24: If the new-expression creates an object or an array of // objects of class type, access and ambiguity control are done for the // [...] constructor selected for the initialization (if any). // NB: We only check for a default constructor if the array has a non-constant // bound, or there are insufficient initializers. Since an array is an // aggregate, we perform aggregate-initialization, which performs // copy-initialization, so we only accept converting constructors.
struct T { explicit T(); T(int); };
struct S { S(int); };
void fn (int n) { new T[1]{}; // { dg-error "explicit constructor" } new T[2]{1, 2}; new T[3]{1, 2}; // { dg-error "explicit constructor" } new T[n]{}; // { dg-error "explicit constructor" }
new S[1]{}; // { dg-error "could not convert" } new S[2]{1, 2}; new S[3]{1, 2}; // { dg-error "could not convert" } new S[n]{}; // { dg-error "could not convert" } }
|