Рассмотрим следующую программу:
#include <array>
int main() {
struct A {
bool valid = true;
~A() { valid = false; }
};
const std::array<A, 1> a;
const A& aa = a.at(0);
return aa.valid;
}
Это то, что я получаю при компиляции с g ++ и nv cc соответственно:
$ g++ -Wall -std=c++14 -o a -x c++ a.cu
$ nvcc --std=c++14 -o a a.cu
a.cu(9): warning: const variable "a" requires an initializer -- class "std::array<A, 1UL>" has no user-provided default constructor
a.cu(9): warning: const variable "a" requires an initializer -- class "std::array<A, 1UL>" has no user-provided default constructor
Почему это предупреждение? Нет ли конструктора по умолчанию для массива? G CC, кажется, думает, что есть.
Примечания:
- Использование NV CC 10.1 на Devuan GNU / Linux 3.
- То же результаты, если я использую
--std=c++11
.