From 649252d691b7ace8a44e22d5519e2029df16935b Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Wed, 9 Nov 2022 18:33:39 -1000 Subject: [PATCH] refactor: `system_reference` moved to a dedicated header file --- src/core/CMakeLists.txt | 3 +- src/core/include/units/reference.h | 15 -------- src/core/include/units/system_reference.h | 45 +++++++++++++++++++++++ test/unit_test/static/reference_test.cpp | 1 + 4 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 src/core/include/units/system_reference.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index f9a1e98b..045af906 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -56,7 +56,8 @@ add_library( # include/units/random.h include/units/ratio.h include/units/reference.h - # include/units/symbol_text.h + include/units/symbol_text.h + include/units/system_reference.h include/units/unit.h ) target_compile_features(mp-units-core INTERFACE cxx_std_20) diff --git a/src/core/include/units/reference.h b/src/core/include/units/reference.h index ed8d478d..d50c32e5 100644 --- a/src/core/include/units/reference.h +++ b/src/core/include/units/reference.h @@ -107,21 +107,6 @@ template return interconvertible(R1::dimension, R2::dimension) && interconvertible(R1::unit, R2::unit); } - -template - requires(!detail::associated_unit>) -struct system_reference { - static constexpr auto dimension = Dim; - static constexpr auto coherent_unit = CoU; - - template - requires(interconvertible(coherent_unit, U{})) - [[nodiscard]] constexpr reference operator[](U) const - { - return {}; - } -}; - } // namespace units namespace std { diff --git a/src/core/include/units/system_reference.h b/src/core/include/units/system_reference.h new file mode 100644 index 00000000..c82f924f --- /dev/null +++ b/src/core/include/units/system_reference.h @@ -0,0 +1,45 @@ +// The MIT License (MIT) +// +// Copyright (c) 2018 Mateusz Pusz +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include +#include +#include + +namespace units { + +template + requires(!detail::associated_unit>) +struct system_reference { + static constexpr auto dimension = Dim; + static constexpr auto coherent_unit = CoU; + + template + requires(interconvertible(coherent_unit, U{})) + [[nodiscard]] constexpr reference operator[](U) const + { + return {}; + } +}; + +} // namespace units diff --git a/test/unit_test/static/reference_test.cpp b/test/unit_test/static/reference_test.cpp index 63940a52..c869769b 100644 --- a/test/unit_test/static/reference_test.cpp +++ b/test/unit_test/static/reference_test.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include namespace {