1

次の場合、С++17 コンパイラに一時的に作成するように指示するにはどうすればよいですか (つまり、C++17 コンパイラは、C++11 および C++14 コンパイラのように、コピー/移動操作を考慮する必要があります)。

class A{
    public:
        A(){}
        A(const A&)=delete;
        A(A&&)=delete;
};
A f(){
    return A();
}
int main(){
    auto a=f();
}

出力 (c++14 - これが私が欲しいものです):

gcc -std=c++14 ./a.cpp
./a.cpp: In function ‘A f()’:
./a.cpp:8:11: error: use of deleted function ‘A::A(A&&)’
  return A();
           ^
./a.cpp:5:3: note: declared here
   A(A&&)=delete;
   ^
./a.cpp: In function ‘int main()’:
./a.cpp:11:11: error: use of deleted function ‘A::A(A&&)’
  auto a=f();
           ^
./a.cpp:5:3: note: declared here
   A(A&&)=delete;
   ^

出力 (c++17):

gcc -std=c++17 ./a.cpp
./a.out

(successfully run)

私の顧客は大量の C++11 コードと C++17 コンパイラを持っています: gcc 8.3.0、および Microsoft C++ コンパイラ (Visual Studio 2017 および 2019 から)。そして、上記のコードを含む多くの場所があります。C++17コンパイラには、そのような場合に「一時的に生成しない」という機能を禁止するオプションはありますか?

4

1 に答える 1