To my surprise, I got an error when trying to use std::vector::get_allocator() with an non-copyable allocator. Why does std::vector::get_allocator() return by-value and not by-reference?

template<typename T>
class nc_allocator {
public:
    using value_type = T;

    nc_allocator(nc_allocator const&) = delete;
    nc_allocator& operator=(nc_allocator const&) = delete;

    // Other required members.
};

std::vector<int, nc_allocator<int>> v;
// boom: use of deleted function
//           'nc_allocator<T>::nc_allocator(const nc_allocator<T>&) [with T = int]'
v.get_allocator();
Edit
Report