I presume this technically means that the definition of size_t in the global namespace has been deprecated?
Yes... but.
The Standard only mandates that std::size_t must be defined1 by <cstddef>, it does not disallow an implementation to define ::size_t2, but if the implementation does, the two definitions must match3.
As a conclusion, you should use std::size_t and should neither rely on ::size_t to be defined nor define it.
The following are UB:
// DON'T
using size_t = std::size_t; // UB
using size_t = decltype(sizeof 1); // UB
1) [cstddef.syn]
namespace std {
using ptrdiff_t = see below;
using size_t = see below;
using max_align_t = see below;
using nullptr_t = decltype(nullptr);
[...]
The contents and meaning of the header <cstddef> are the same as the C standard library header <stddef.h>, except that it does not declare the type wchar_t, that it also declares the type byte and its associated operations ([support.types.byteops]), and as noted in [support.types.nullptr] and [support.types.layout].
2)[extern.types]/1
For each type T from the C standard library (These types are [...] size_t,[...].), the types ::T and std::T are reserved to the implementation[.]
3)[extern.types]/1
[...] when defined, ::T shall be identical to std::T.