From cd8581574be22f33944446f54c86ad66cba6697d Mon Sep 17 00:00:00 2001 From: Jonathan Sieber Date: Thu, 30 Jan 2020 14:19:52 +0100 Subject: [PATCH 1/6] forEachIndex as "constexpr for": Iterate over a sequence with compile-time available indices --- src/meta17.lib/meta17/IndexPack.iterate.h | 13 +++++++++++++ src/meta17.lib/meta17/meta17.qbs | 1 + 2 files changed, 14 insertions(+) create mode 100644 src/meta17.lib/meta17/IndexPack.iterate.h diff --git a/src/meta17.lib/meta17/IndexPack.iterate.h b/src/meta17.lib/meta17/IndexPack.iterate.h new file mode 100644 index 0000000..32816a0 --- /dev/null +++ b/src/meta17.lib/meta17/IndexPack.iterate.h @@ -0,0 +1,13 @@ +#pragma once +#include "Index.h" +#include "IndexPack.h" + +namespace meta17 { + +/// "constexpr for": Iterate over a sequence with compile-time available indices +template +constexpr auto forEachIndex(IndexPack, Callable &&callable) { + return (..., callable(Index{})); +} + +} // namespace meta17 diff --git a/src/meta17.lib/meta17/meta17.qbs b/src/meta17.lib/meta17/meta17.qbs index 68193d9..f27bcc2 100644 --- a/src/meta17.lib/meta17/meta17.qbs +++ b/src/meta17.lib/meta17/meta17.qbs @@ -50,6 +50,7 @@ Product { "IndexPack.extract.h", "IndexPack.for.h", "IndexPack.h", + "IndexPack.iterate.h", "IndexPack.make.h", "IndexPack.ops.h", "IndexPack.trait.h", From 710934946a44e053264743c018b61a9489bf59c6 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Thu, 30 Jan 2020 18:09:56 +0100 Subject: [PATCH 2/6] added opaque test in different namespace --- src/strong17.lib/strong17/Strong.opaque.h | 2 -- .../strong17/Strong.opaque.test.cpp | 19 +++++++++++++++++++ src/strong17.lib/strong17/strong17.tests.qbs | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/strong17.lib/strong17/Strong.opaque.test.cpp diff --git a/src/strong17.lib/strong17/Strong.opaque.h b/src/strong17.lib/strong17/Strong.opaque.h index 5156e44..e80f7de 100644 --- a/src/strong17.lib/strong17/Strong.opaque.h +++ b/src/strong17.lib/strong17/Strong.opaque.h @@ -4,8 +4,6 @@ #include "Strong.make.h" #include "meta17/Type.h" -#include "meta17/TypePack.h" -#include "meta17/TypePack.recurse.h" #define STRONG_OPAQUE(NAME, TYPE, ...) \ struct NAME; \ diff --git a/src/strong17.lib/strong17/Strong.opaque.test.cpp b/src/strong17.lib/strong17/Strong.opaque.test.cpp new file mode 100644 index 0000000..a45549e --- /dev/null +++ b/src/strong17.lib/strong17/Strong.opaque.test.cpp @@ -0,0 +1,19 @@ +#include "Strong.opaque.h" + +#include + +namespace testing { + +STRONG_OPAQUE(HelloTest, int, struct HelloTag); + +} // namespace testing + +STRONG_OPAQUE(HelloGlobal, int, struct HelloTag); + +TEST(Strong, opaque) { + constexpr auto ht = testing::HelloTest{15}; + static_assert(ht.v == 15); + + constexpr auto hg = HelloGlobal{23}; + static_assert(hg.v == 23); +} diff --git a/src/strong17.lib/strong17/strong17.tests.qbs b/src/strong17.lib/strong17/strong17.tests.qbs index 181c003..688cd11 100644 --- a/src/strong17.lib/strong17/strong17.tests.qbs +++ b/src/strong17.lib/strong17/strong17.tests.qbs @@ -16,6 +16,7 @@ Application { "Strong.inspect.test.cpp", "Strong.make.test.cpp", "Strong.manip.test.cpp", + "Strong.opaque.test.cpp", "Strong.ops.test.cpp", "Strong.ostream.cpp", "Strong.test.cpp", From c830b1e4fcf4263a69748fa30815cf28c8b4437e Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sat, 1 Feb 2020 13:44:03 +0100 Subject: [PATCH 3/6] added test for forEachIndex, fixed formatting --- src/meta17.lib/meta17/IndexPack.iterate.h | 6 +++--- src/meta17.lib/meta17/IndexPack.iterate.test.cpp | 11 +++++++++++ src/meta17.lib/meta17/meta17.tests.qbs | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 src/meta17.lib/meta17/IndexPack.iterate.test.cpp diff --git a/src/meta17.lib/meta17/IndexPack.iterate.h b/src/meta17.lib/meta17/IndexPack.iterate.h index 32816a0..b1a14ff 100644 --- a/src/meta17.lib/meta17/IndexPack.iterate.h +++ b/src/meta17.lib/meta17/IndexPack.iterate.h @@ -5,9 +5,9 @@ namespace meta17 { /// "constexpr for": Iterate over a sequence with compile-time available indices -template -constexpr auto forEachIndex(IndexPack, Callable &&callable) { - return (..., callable(Index{})); +template +constexpr auto forEachIndex(IndexPack, Callable&& callable) { + return (..., callable(_index)); } } // namespace meta17 diff --git a/src/meta17.lib/meta17/IndexPack.iterate.test.cpp b/src/meta17.lib/meta17/IndexPack.iterate.test.cpp new file mode 100644 index 0000000..7f18a63 --- /dev/null +++ b/src/meta17.lib/meta17/IndexPack.iterate.test.cpp @@ -0,0 +1,11 @@ +#include "IndexPack.iterate.h" + +#include "Index.wrap.h" // UnwrapType +#include + +using namespace meta17; + +static_assert(forEachIndex(index_pack<12, 23>, [s = 0](auto i) mutable { + s += to_value; + return s; + }) == 35); diff --git a/src/meta17.lib/meta17/meta17.tests.qbs b/src/meta17.lib/meta17/meta17.tests.qbs index 3b198f8..26cb8bf 100644 --- a/src/meta17.lib/meta17/meta17.tests.qbs +++ b/src/meta17.lib/meta17/meta17.tests.qbs @@ -53,6 +53,7 @@ Application { files: [ "IndexPack.extract.test.cpp", "IndexPack.for.test.cpp", + "IndexPack.iterate.test.cpp", "IndexPack.make.test.cpp", "IndexPack.ops.test.cpp", "IndexPack.test.cpp", From 24c122c88464ff8faf0d34293e0229c1ddaa4293 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Wed, 4 Mar 2020 13:40:11 +0100 Subject: [PATCH 4/6] simplified is_strong implementation --- src/strong17.lib/strong17/Strong.trait.h | 9 +++------ src/strong17.lib/strong17/Strong.weaken.h | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/strong17.lib/strong17/Strong.trait.h b/src/strong17.lib/strong17/Strong.trait.h index 26bfe1a..e297591 100644 --- a/src/strong17.lib/strong17/Strong.trait.h +++ b/src/strong17.lib/strong17/Strong.trait.h @@ -12,14 +12,11 @@ using meta17::False; using meta17::is_type_template; using meta17::same; -template -struct IsStrong : False {}; - -template -struct IsStrong>> : Bool, Strong>> {}; +template +constexpr auto is_strong = false; template -constexpr auto is_strong = IsStrong>{}; +constexpr auto is_strong>> = is_type_template, Strong>; template struct IsOpaque : False {}; diff --git a/src/strong17.lib/strong17/Strong.weaken.h b/src/strong17.lib/strong17/Strong.weaken.h index 2e64f45..64f44c7 100644 --- a/src/strong17.lib/strong17/Strong.weaken.h +++ b/src/strong17.lib/strong17/Strong.weaken.h @@ -18,11 +18,11 @@ using meta17::UnwrapType; /// like extractValue, but does nothing for non-strong types template -constexpr auto weakenType(Type = {}) -> std::enable_if_t.v, Type>>> { +constexpr auto weakenType(Type = {}) -> std::enable_if_t, Type>>> { return {}; } template -constexpr auto weakenType(Type = {}) -> std::enable_if_t.v, Type> { +constexpr auto weakenType(Type = {}) -> std::enable_if_t, Type> { return {}; } template From f558e542924eb7bfa0445829ad073f0cd5dbab28 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Tue, 17 Mar 2020 14:24:52 +0100 Subject: [PATCH 5/6] added nullptr_to template --- src/meta17.lib/meta17/meta17.qbs | 1 + src/meta17.lib/meta17/meta17.tests.qbs | 1 + src/meta17.lib/meta17/ptr.h | 8 ++++++++ src/meta17.lib/meta17/ptr.test.cpp | 7 +++++++ 4 files changed, 17 insertions(+) create mode 100644 src/meta17.lib/meta17/ptr.h create mode 100644 src/meta17.lib/meta17/ptr.test.cpp diff --git a/src/meta17.lib/meta17/meta17.qbs b/src/meta17.lib/meta17/meta17.qbs index f27bcc2..c9d8221 100644 --- a/src/meta17.lib/meta17/meta17.qbs +++ b/src/meta17.lib/meta17/meta17.qbs @@ -153,6 +153,7 @@ Product { "Unreachable.h", "align.h", "same.h", + "ptr.h", ] Export { diff --git a/src/meta17.lib/meta17/meta17.tests.qbs b/src/meta17.lib/meta17/meta17.tests.qbs index 26cb8bf..c0da832 100644 --- a/src/meta17.lib/meta17/meta17.tests.qbs +++ b/src/meta17.lib/meta17/meta17.tests.qbs @@ -151,5 +151,6 @@ Application { "StaticErrorExpr.test.cpp", "align.test.cpp", "main.cpp", + "ptr.test.cpp", ] } diff --git a/src/meta17.lib/meta17/ptr.h b/src/meta17.lib/meta17/ptr.h new file mode 100644 index 0000000..fd42184 --- /dev/null +++ b/src/meta17.lib/meta17/ptr.h @@ -0,0 +1,8 @@ +#pragma once + +namespace meta17 { + +template +constexpr T* nullptr_to = nullptr; + +} diff --git a/src/meta17.lib/meta17/ptr.test.cpp b/src/meta17.lib/meta17/ptr.test.cpp new file mode 100644 index 0000000..0a6dfb8 --- /dev/null +++ b/src/meta17.lib/meta17/ptr.test.cpp @@ -0,0 +1,7 @@ +#include "ptr.h" +#include "same.h" + +using namespace meta17; + +static_assert(same), int* const>); +static_assert(nullptr_to == nullptr); From 2f4a93774c6bf77b57544f4e0ed6909988c34537 Mon Sep 17 00:00:00 2001 From: Andreas Reischuck Date: Sun, 31 May 2020 17:23:13 +0200 Subject: [PATCH 6/6] attempt to actually run on azure-pipelines --- azure-pipelines.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 91346af..a3d5aa9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,11 +5,13 @@ jobs: steps: - checkout: self submodules: true - - script: - docker run -v${PWD}:/build - arbmind/qbs-clang7:1 - build --file /build/BasiC++17.qbs --build-directory /tmp/build - -p autotest-runner + - task: ShellScript@2 + inputs: + scriptPath: thirdparty/git_clone_googletest.sh + - script: docker run -v${PWD}:/build + arbmind/qbs-clang7:1 + build --file /build/BasiC++17.qbs --build-directory /tmp/build + -p autotest-runner - job: Windows pool: @@ -21,6 +23,9 @@ jobs: - script: qbs config --list profiles - checkout: self submodules: true + - task: ShellScript@2 + inputs: + scriptPath: thirdparty/git_clone_googletest.sh - script: qbs - build profile:MSVC2019-x64 --file BasiC++17.qbs --build-directory %TMP%\build - -p autotest-runner + build profile:MSVC2019-x64 --file BasiC++17.qbs --build-directory %TMP%\build + -p autotest-runner