Answered in comments by @cpplearner:
Guaranteed copy/move ellision which allows the code to work even if the copy/move is explicitly or implicitly deleted was added in C++17[1]
Issue is not about compilers, but by the their default C++ versions. MSVC -std=c++14
and GCC/clang -std=c++14
all fail to compile, while for c++17
they all work, as expected.