Add basic concept support (#144)
This commit is contained in:
parent
f3e399573f
commit
a937efbcbc
21 changed files with 396 additions and 16 deletions
|
|
@ -6,6 +6,7 @@
|
|||
#include <cppast/cpp_alias_template.hpp>
|
||||
#include <cppast/cpp_class.hpp>
|
||||
#include <cppast/cpp_class_template.hpp>
|
||||
#include <cppast/cpp_concept.hpp>
|
||||
#include <cppast/cpp_entity_kind.hpp>
|
||||
#include <cppast/cpp_enum.hpp>
|
||||
#include <cppast/cpp_file.hpp>
|
||||
|
|
@ -879,7 +880,10 @@ bool generate_template_type_parameter(code_generator& generat
|
|||
code_generator::output output(type_safe::ref(generator), type_safe::ref(param), cur_access);
|
||||
if (output)
|
||||
{
|
||||
output << keyword(to_string(param.keyword()));
|
||||
if(param.keyword() == cpp_template_keyword::concept_contraint)
|
||||
detail::write_token_string(output, param.concept_constraint().value());
|
||||
else
|
||||
output << keyword(to_string(param.keyword()));
|
||||
if (param.is_variadic())
|
||||
output << operator_ws << punctuation("...");
|
||||
if (!param.name().empty())
|
||||
|
|
@ -1036,6 +1040,23 @@ bool generate_class_template_specialization(code_generator&
|
|||
return static_cast<bool>(output);
|
||||
}
|
||||
|
||||
bool generate_concept(code_generator& generator,
|
||||
const cpp_concept& con,
|
||||
cpp_access_specifier_kind cur_access)
|
||||
{
|
||||
code_generator::output output(type_safe::ref(generator), type_safe::ref(con), cur_access);
|
||||
if(output)
|
||||
{
|
||||
output << keyword("template") << operator_ws << punctuation("<") << bracket_ws;
|
||||
detail::write_token_string(output, con.parameters());
|
||||
output << bracket_ws << punctuation(">") << newl;
|
||||
output << keyword("concept") << operator_ws << identifier(con.name()) << operator_ws << punctuation("=") << operator_ws;
|
||||
detail::write_expression(output, con.constraint_expression());
|
||||
output << operator_ws << punctuation(";") << newl;
|
||||
}
|
||||
return static_cast<bool>(output);
|
||||
}
|
||||
|
||||
bool generate_static_assert(code_generator& generator, const cpp_static_assert& assert,
|
||||
cpp_access_specifier_kind cur_access)
|
||||
{
|
||||
|
|
@ -1115,6 +1136,7 @@ bool generate_code_impl(code_generator& generator, const cpp_entity& e,
|
|||
CPPAST_DETAIL_HANDLE(function_template_specialization)
|
||||
CPPAST_DETAIL_HANDLE(class_template)
|
||||
CPPAST_DETAIL_HANDLE(class_template_specialization)
|
||||
CPPAST_DETAIL_HANDLE(concept)
|
||||
|
||||
CPPAST_DETAIL_HANDLE(static_assert)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue