diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-07-30 00:19:08 +0200 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2024-07-30 00:19:08 +0200 |
commit | 9289f825f4e2b30b6197e18896780782cd3a088e (patch) | |
tree | 5cddc0a5b86888afc0613cc30c8e9455799d594e /asl | |
parent | 4e3fd3eac50d3685a7771b570741f2922c4e3693 (diff) |
Add meta module
Diffstat (limited to 'asl')
-rw-r--r-- | asl/meta/BUILD.bazel | 18 | ||||
-rw-r--r-- | asl/meta/types.hpp | 14 | ||||
-rw-r--r-- | asl/meta/types_tests.cpp | 16 |
3 files changed, 48 insertions, 0 deletions
diff --git a/asl/meta/BUILD.bazel b/asl/meta/BUILD.bazel new file mode 100644 index 0000000..f914bf3 --- /dev/null +++ b/asl/meta/BUILD.bazel @@ -0,0 +1,18 @@ +cc_library(
+ name = "meta",
+ hdrs = [
+ "types.hpp",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+cc_test(
+ name = "types_tests",
+ srcs = [
+ "types_tests.cpp",
+ ],
+ deps = [
+ ":meta",
+ ],
+)
+
diff --git a/asl/meta/types.hpp b/asl/meta/types.hpp new file mode 100644 index 0000000..b5aa192 --- /dev/null +++ b/asl/meta/types.hpp @@ -0,0 +1,14 @@ +#pragma once
+
+namespace asl {
+
+template<typename T> using void_t = void;
+
+template<typename T, typename = void>
+inline constexpr bool referenceable = false;
+
+template<typename T>
+inline constexpr bool referenceable<T, void_t<T&>> = true;
+
+} // namespace asl
+ diff --git a/asl/meta/types_tests.cpp b/asl/meta/types_tests.cpp new file mode 100644 index 0000000..cab9118 --- /dev/null +++ b/asl/meta/types_tests.cpp @@ -0,0 +1,16 @@ +#include "asl/meta/types.hpp"
+
+using namespace asl;
+
+static_assert(referenceable<int>);
+static_assert(referenceable<int&>);
+static_assert(referenceable<int&&>);
+static_assert(!referenceable<void>);
+static_assert(referenceable<void*>);
+static_assert(referenceable<void()>);
+static_assert(referenceable<void(*)()>);
+static_assert(!referenceable<void() const>);
+static_assert(!referenceable<void() &>);
+static_assert(!referenceable<void() const &&>);
+
+int main() { return 0; }
|