From 1979bd24a546fe6427e1b885e517fa390a0965a3 Mon Sep 17 00:00:00 2001 From: Barrett Adair Date: Sun, 27 Mar 2016 03:44:23 -0500 Subject: [PATCH] qtcreator project, pmf tests --- .gitignore | 4 +- .../{bind_expr/example_1.cpp => bind_1.cpp} | 0 .../{bind_expr/example_2.cpp => bind_2.cpp} | 0 include/callable_traits/callable_traits.hpp | 30 ++- qtcreator/callable_traits.pro | 2 + qtcreator/include/include.pro | 4 + qtcreator/main/main.cpp | 22 ++ qtcreator/main/main.pro | 11 + .../tests_and_examples/tests_and_examples.pro | 5 + test/pmf_qualifiers.cpp | 212 ++++++++++++++++++ 10 files changed, 279 insertions(+), 11 deletions(-) rename example/{bind_expr/example_1.cpp => bind_1.cpp} (100%) rename example/{bind_expr/example_2.cpp => bind_2.cpp} (100%) create mode 100644 qtcreator/callable_traits.pro create mode 100644 qtcreator/include/include.pro create mode 100644 qtcreator/main/main.cpp create mode 100644 qtcreator/main/main.pro create mode 100644 qtcreator/tests_and_examples/tests_and_examples.pro create mode 100644 test/pmf_qualifiers.cpp diff --git a/.gitignore b/.gitignore index c31cda1..36eef30 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ build*/ doc/html/ -*.user \ No newline at end of file +*.user +/test/Makefile +/example/Makefile diff --git a/example/bind_expr/example_1.cpp b/example/bind_1.cpp similarity index 100% rename from example/bind_expr/example_1.cpp rename to example/bind_1.cpp diff --git a/example/bind_expr/example_2.cpp b/example/bind_2.cpp similarity index 100% rename from example/bind_expr/example_2.cpp rename to example/bind_2.cpp diff --git a/include/callable_traits/callable_traits.hpp b/include/callable_traits/callable_traits.hpp index 2d977ca..f795af7 100644 --- a/include/callable_traits/callable_traits.hpp +++ b/include/callable_traits/callable_traits.hpp @@ -142,6 +142,24 @@ namespace callable_traits { return{}; } + template + inline constexpr auto + is_unqualified() { + return typename ctdetail::traits::is_const_qualified{}; + } + + template + inline constexpr auto + is_unqualified(Callable&&) { + return typename ctdetail::traits::is_const_qualified{}; + } + + template + inline constexpr auto + is_const_qualified() { + return typename ctdetail::traits::is_const_qualified{}; + } + template inline constexpr auto is_const_qualified(Callable&&) { @@ -221,15 +239,7 @@ namespace callable_traits { typename ctdetail::traits::remove_cv; template - using remove_lvalue_qualifier = - typename ctdetail::traits::remove_lvalue_reference; - - template - using remove_rvalue_qualifier = - typename ctdetail::traits::remove_rvalue_reference; - - template - using remove_reference_qualifiers = + using remove_reference_qualifier = typename ctdetail::traits::remove_reference; template @@ -265,4 +275,4 @@ namespace callable_traits { #pragma warning(pop) #endif //ifdef _MSVC_VER -#endif \ No newline at end of file +#endif diff --git a/qtcreator/callable_traits.pro b/qtcreator/callable_traits.pro new file mode 100644 index 0000000..b7ecff8 --- /dev/null +++ b/qtcreator/callable_traits.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += main tests_and_examples include diff --git a/qtcreator/include/include.pro b/qtcreator/include/include.pro new file mode 100644 index 0000000..1876375 --- /dev/null +++ b/qtcreator/include/include.pro @@ -0,0 +1,4 @@ +TEMPLATE = aux +CONFIG -= qt +HEADERS += ../../include/callable_traits/*.hpp +HEADERS += ../../include/callable_traits/fwd/*.hpp diff --git a/qtcreator/main/main.cpp b/qtcreator/main/main.cpp new file mode 100644 index 0000000..4b3e211 --- /dev/null +++ b/qtcreator/main/main.cpp @@ -0,0 +1,22 @@ +/* +Copyright Barrett Adair 2016 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) +*/ + +#include +#include + +struct foo{}; + +namespace ct = callable_traits; + +using pmf = void(foo::*)(); +using test = ct::add_const_qualifier; +using expect = void(foo::*)() const; + +static_assert(std::is_same{}, ""); + +int main() { + return 0; +} diff --git a/qtcreator/main/main.pro b/qtcreator/main/main.pro new file mode 100644 index 0000000..d4dc2b4 --- /dev/null +++ b/qtcreator/main/main.pro @@ -0,0 +1,11 @@ +TEMPLATE = app +CONFIG += console -std=c++14 +CONFIG -= qt app_bundle + +QMAKE_CXXFLAGS += -std=c++14 -stdlib=libc++ -Wall -Wextra -pedantic + +LIBS += -lc++ -lc++abi + +INCLUDEPATH += ../../include + +SOURCES += ./main.cpp diff --git a/qtcreator/tests_and_examples/tests_and_examples.pro b/qtcreator/tests_and_examples/tests_and_examples.pro new file mode 100644 index 0000000..93759df --- /dev/null +++ b/qtcreator/tests_and_examples/tests_and_examples.pro @@ -0,0 +1,5 @@ +TEMPLATE = aux +CONFIG -= qt + +OTHER_FILES += ../../test/*.cpp \ + ../../example/*.cpp diff --git a/test/pmf_qualifiers.cpp b/test/pmf_qualifiers.cpp new file mode 100644 index 0000000..7841a0d --- /dev/null +++ b/test/pmf_qualifiers.cpp @@ -0,0 +1,212 @@ +/* +Copyright Barrett Adair 2016 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) +*/ + +#include +#include +#include +#include + +#ifndef CT_ASSERT +#define CT_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) +#endif //CT_ASSERT + +struct foo{}; + +namespace ct = callable_traits; + +using pmf = void(foo::*)(); +using pmf_l = void(foo::*)() &; +using pmf_r = void(foo::*)() &&; +using pmf_c = void(foo::*)() const; +using pmf_cl = void(foo::*)() const &; +using pmf_cr = void(foo::*)() const &&; +using pmf_v = void(foo::*)() volatile; +using pmf_vl = void(foo::*)() volatile &; +using pmf_vr = void(foo::*)() volatile &&; +using pmf_cv = void(foo::*)() const volatile; +using pmf_cvl = void(foo::*)() const volatile &; +using pmf_cvr = void(foo::*)() const volatile &&; + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(std::is_same>{}); +CT_ASSERT(std::is_same>{}); + +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf{})); +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf_l{})); +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf_r{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_c{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_cl{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_cr{})); +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf_v{})); +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf_vl{})); +CT_ASSERT(!ct::is_const_qualified()); +CT_ASSERT(!ct::is_const_qualified(pmf_vr{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_cv{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_cvl{})); +CT_ASSERT(ct::is_const_qualified()); +CT_ASSERT(ct::is_const_qualified(pmf_cvr{})); + + +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf{})); +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf_l{})); +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf_r{})); +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf_c{})); +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf_cl{})); +CT_ASSERT(!ct::is_volatile_qualified()); +CT_ASSERT(!ct::is_volatile_qualified(pmf_cr{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_v{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_vl{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_vr{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_cv{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_cvl{})); +CT_ASSERT(ct::is_volatile_qualified()); +CT_ASSERT(ct::is_volatile_qualified(pmf_cvr{})); + +CT_ASSERT(!ct::is_reference_qualified()); +CT_ASSERT(!ct::is_reference_qualified(pmf{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_l{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_r{})); +CT_ASSERT(!ct::is_reference_qualified()); +CT_ASSERT(!ct::is_reference_qualified(pmf_c{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_cl{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_cr{})); +CT_ASSERT(!ct::is_reference_qualified()); +CT_ASSERT(!ct::is_reference_qualified(pmf_v{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_vl{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_vr{})); +CT_ASSERT(!ct::is_reference_qualified()); +CT_ASSERT(!ct::is_reference_qualified(pmf_cv{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_cvl{})); +CT_ASSERT(ct::is_reference_qualified()); +CT_ASSERT(ct::is_reference_qualified(pmf_cvr{})); + +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf{})); +CT_ASSERT(ct::is_lvalue_reference_qualified()); +CT_ASSERT(ct::is_lvalue_reference_qualified(pmf_l{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_r{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_c{})); +CT_ASSERT(ct::is_lvalue_reference_qualified()); +CT_ASSERT(ct::is_lvalue_reference_qualified(pmf_cl{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_cr{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_v{})); +CT_ASSERT(ct::is_lvalue_reference_qualified()); +CT_ASSERT(ct::is_lvalue_reference_qualified(pmf_vl{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_vr{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_cv{})); +CT_ASSERT(ct::is_lvalue_reference_qualified()); +CT_ASSERT(ct::is_lvalue_reference_qualified(pmf_cvl{})); +CT_ASSERT(!ct::is_lvalue_reference_qualified()); +CT_ASSERT(!ct::is_lvalue_reference_qualified(pmf_cvr{})); + +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_l{})); +CT_ASSERT(ct::is_rvalue_reference_qualified()); +CT_ASSERT(ct::is_rvalue_reference_qualified(pmf_r{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_c{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_cl{})); +CT_ASSERT(ct::is_rvalue_reference_qualified()); +CT_ASSERT(ct::is_rvalue_reference_qualified(pmf_cr{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_v{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_vl{})); +CT_ASSERT(ct::is_rvalue_reference_qualified()); +CT_ASSERT(ct::is_rvalue_reference_qualified(pmf_vr{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_cv{})); +CT_ASSERT(!ct::is_rvalue_reference_qualified()); +CT_ASSERT(!ct::is_rvalue_reference_qualified(pmf_cvl{})); +CT_ASSERT(ct::is_rvalue_reference_qualified()); +CT_ASSERT(ct::is_rvalue_reference_qualified(pmf_cvr{})); + +int main() { return 0; }