From 8e34cfdda169de149279920cfefc68c2ecde98bb Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Fri, 3 Mar 2023 01:03:19 +0700 Subject: [PATCH] add ambiguous conversions issue --- .../untests/meta_issues/random_issue_1.cpp | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 develop/untests/meta_issues/random_issue_1.cpp diff --git a/develop/untests/meta_issues/random_issue_1.cpp b/develop/untests/meta_issues/random_issue_1.cpp new file mode 100644 index 0000000..67c2879 --- /dev/null +++ b/develop/untests/meta_issues/random_issue_1.cpp @@ -0,0 +1,38 @@ +/******************************************************************************* + * This file is part of the "https://github.com/blackmatov/meta.hpp" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2021-2023, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#include +#include + +namespace +{ + struct A {}; + struct B : A {}; + struct C : A {}; + struct D : B, C {}; + + // A * <- B <- * + // D + // A * <- C <- * +} + +TEST_CASE("meta/meta_issues/random/1") { + namespace meta = meta_hpp; + + meta::class_().base_(); + meta::class_().base_(); + meta::class_().base_(); + + CHECK(meta::is_invocable_with(+[](const D&){ return true; }, D{})); + CHECK(meta::is_invocable_with(+[](const C&){ return true; }, D{})); + CHECK(meta::is_invocable_with(+[](const B&){ return true; }, D{})); + CHECK_FALSE(meta::is_invocable_with(+[](const A&){ return true; }, D{})); + + CHECK(meta::invoke(+[](const D&){ return true; }, D{})); + CHECK(meta::invoke(+[](const C&){ return true; }, D{})); + CHECK(meta::invoke(+[](const B&){ return true; }, D{})); + CHECK_THROWS(meta::invoke(+[](const A&){ return true; }, D{})); +}