diff --git a/libs/geom/include/psemek/geom/detail/array.hpp b/libs/geom/include/psemek/geom/detail/array.hpp index b7594549..2532d6b1 100644 --- a/libs/geom/include/psemek/geom/detail/array.hpp +++ b/libs/geom/include/psemek/geom/detail/array.hpp @@ -34,7 +34,6 @@ namespace psemek::geom::detail template struct all_convertible_to; - template struct all_convertible_to : std::true_type diff --git a/libs/geom/include/psemek/geom/point.hpp b/libs/geom/include/psemek/geom/point.hpp index 258ed807..b0aef7b3 100644 --- a/libs/geom/include/psemek/geom/point.hpp +++ b/libs/geom/include/psemek/geom/point.hpp @@ -19,14 +19,9 @@ namespace psemek::geom typename detail::array::type coords; point() = default; - point(point const &) = default; - point(point &) = default; - point(point &&) = default; - point & operator = (point const &) = default; - point & operator = (point &) = default; - point & operator = (point &&) = default; - template ::value>> + template + requires((sizeof...(Args) == N) && detail::all_convertible_to::value) point(Args && ... args) : coords{ static_cast(std::forward(args))... } {} diff --git a/libs/geom/include/psemek/geom/vector.hpp b/libs/geom/include/psemek/geom/vector.hpp index d4357a29..b96c4a6f 100644 --- a/libs/geom/include/psemek/geom/vector.hpp +++ b/libs/geom/include/psemek/geom/vector.hpp @@ -23,14 +23,9 @@ namespace psemek::geom typename detail::array::type coords; vector() = default; - vector(vector const &) = default; - vector(vector &) = default; - vector(vector &&) = default; - vector & operator = (vector const &) = default; - vector & operator = (vector &) = default; - vector & operator = (vector &&) = default; - template ::value>> + template + requires((sizeof...(Args) == N) && detail::all_convertible_to::value) vector(Args && ... args) : coords{ static_cast(std::forward(args))... } {}