Following this answer and this move-constructor specification, there should be no implicit move constructor or move assignment operator.
However, the following code still compiles in gcc 7.2.1:
#include <vector>
#include <iostream>
using namespace std;
struct NoCopyNoMove
{
    NoCopyNoMove(const NoCopyNoMove&) = delete;
    NoCopyNoMove& operator=(const NoCopyNoMove&) = delete;
    NoCopyNoMove(NoCopyNoMove&&) = delete;
    NoCopyNoMove& operator=(NoCopyNoMove&&) = delete;
    NoCopyNoMove(int){};
};
struct NoCopy
{
    NoCopy(const NoCopyNoMove&) = delete;
    NoCopy& operator=(const NoCopyNoMove&) = delete;
    // NoCopy(NoCopy&&) = delete;
    // NoCopy& operator=(NoCopy&&) = delete;
    ~NoCopy() {
        std::cout << "decontructor" << std::endl;
    }
    NoCopy(int){};
};
int main()
{
    // vector<NoCopyNoMove> y; // fails!
    vector<NoCopy> y;
    y.emplace_back(1);
    y.emplace_back(2);
}
 
     
    