The book is trying to illustrate copy elision using normal C++ code. It does not mean that the compiler is allowed to change copy-initialization to direct-initialization, even though in the case of the initialization you show, copy-initialization-with-copy-elision has the same effect as direct-initialization.
The only change in observable behavior allowed is eliding calls to the copy/move constructor and the destructor. The other constructor called is never changed. Thus:
struct Meow {
explicit Meow(int); // #1
Meow(double); // #2
Meow(const Meow&); // #3
};
Meow m = 1; // OK, always call #2, may or may not call #3
Meow n(1); // OK, call #1, never call #3
Meow p = {1}; // Error: copy-list-initialization selected explicit constructor
Meow q{1}; // OK, call #1, never call #3
Meow r = {1.0}; // OK, call #2, never call #3