Added test case for inner type aliases with parent class template args

This commit is contained in:
Bartek Kryza
2022-06-07 22:49:13 +02:00
parent 5231fb43b4
commit 1de4a40ae9
11 changed files with 160 additions and 37 deletions

View File

@@ -38,21 +38,24 @@ public:
virtual ~nested_trait() = default;
template <typename V = T> void add_element(std::unique_ptr<V> p)
template <typename V = T>
[[nodiscard]] bool add_element(std::unique_ptr<V> p)
{
auto it = std::find_if(elements_.begin(), elements_.end(),
[&p](const auto &e) { return *e == *p; });
if (it != elements_.end()) {
(*it)->append(*p);
}
else {
elements_.emplace_back(std::move(p));
// Element already in element tree
return false;
}
elements_.emplace_back(std::move(p));
return true;
}
template <typename V = T>
void add_element(const Path &path, std::unique_ptr<V> p)
bool add_element(const Path &path, std::unique_ptr<V> p)
{
assert(p);
@@ -60,14 +63,13 @@ public:
path.to_string());
if (path.is_empty()) {
add_element(std::move(p));
return;
return add_element(std::move(p));
}
auto parent = get_element(path);
if (parent && dynamic_cast<nested_trait<T, Path> *>(&parent.value()))
dynamic_cast<nested_trait<T, Path> &>(parent.value())
return dynamic_cast<nested_trait<T, Path> &>(parent.value())
.template add_element<V>(std::move(p));
else {
spdlog::error("No parent element found at: {}", path.to_string());