From 67c7ce0878713ec40a512731572c5ffdd454bed2 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 15 Aug 2023 11:47:20 +0300 Subject: [PATCH] Use concepts in geom::point and vector constructors --- libs/geom/include/psemek/geom/detail/array.hpp | 1 - libs/geom/include/psemek/geom/point.hpp | 9 ++------- libs/geom/include/psemek/geom/vector.hpp | 9 ++------- 3 files changed, 4 insertions(+), 15 deletions(-) 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))... } {}