In this declaration and initialization
std::array<Point, 3> m_points { { 1.0f, 1.0f }, { 2.0f, 2.0f }, { 3.0f, 3.0f } };
the compiler considers the first initializer in curly braces, such as the initializer of the entire array (internal aggregate). std::array is a collection containing another collection.
Write instead
std::array<Point, 3> m_points { { { 1.0f, 1.0f }, { 2.0f, 2.0f }, { 3.0f, 3.0f } } };
In the second case
std::array<Point, 3> m_points { Point{ 1.0f, 1.0f }, Point{ 2.0f, 2.0f }, Point{ 3.0f, 3.0f } };
each initializer is considered sequentially as the initializer of the next element of the internal aggregate.
Consider this simple demo program.
The compiler generates an error, for example
prog.cpp:14:33: error: too many initializers for 'array' array a = { { 0, 0 }, { 1, 1 } }; ^
This means that { 0, 0 } is the initializer of the internal array (internal aggregate). Thus, the next initializer in curly brackets does not have the corresponding data element in the external population (structure).