Build with C++20
Asio needs a definition to build with C++20, link to bug in comment.
The compiler also complained that it now needs full definition of enum_
inside in leaf_data_helpers.hpp:createEnum. One would think that that
would be the case even before, because the lambda uses it in a context
that requires full definition (i.e. creating an instance). However, the
lambda is a generic lambda, which means it's a template. The C++
standard says (put very simply) "compilation of templates can be
deferred until the end of a translation unit". And, because
leaf_data_helpers is a header, it is possible that the definition enum_
comes in another included file after leaf_data_helpers.hpp, which means,
by the time the compiler is compiling the generic lambda, it already has
a definition for enum_.
Now, in C++20, std::transform is constexpr. The standard says, that
compilers can NOT use this deferring mechanic when dealing with
constexpr function, so it needs the definition immediately, which means
that ast_values.hpp has to be included inside leaf_data_helpers.
This probably wouldn't have happened if I defined the function inside a
cpp file (even clang-tidy warns for this).
tl;dr: the generic lambda in createEnum didn't need the enum_ definition
immediately, but now, std::transform is constexpr and that means the
definition IS needed immediately
https://timsong-cpp.github.io/cppwp/n4659/temp.point#8 is where it says
about the templates. Thanks to PJBoy on freenode.#c++ for explaining
this to me.
Change-Id: I4675643572db37233a88f7a7ee3570fabb897dad
diff --git a/tests/leaf_data_helpers.hpp b/tests/leaf_data_helpers.hpp
index 0a28ae3..91eb3f2 100644
--- a/tests/leaf_data_helpers.hpp
+++ b/tests/leaf_data_helpers.hpp
@@ -1,4 +1,5 @@
#include <algorithm>
+#include "ast_values.hpp"
#include "leaf_data_type.hpp"
yang::Enum createEnum(const std::initializer_list<const char*>& list)
{