Fix alias template creation

This commit is contained in:
Jonathan Müller 2017-01-30 17:02:55 +01:00
commit 535b088123
4 changed files with 18 additions and 8 deletions

View file

@ -28,12 +28,14 @@ namespace cppast
} }
private: private:
cpp_alias_template(std::string name, std::unique_ptr<cpp_type_alias> alias) cpp_alias_template(std::unique_ptr<cpp_type_alias> alias)
: cpp_template(std::move(name), std::unique_ptr<cpp_entity>(alias.release())) : cpp_template(std::unique_ptr<cpp_entity>(alias.release()))
{ {
} }
cpp_entity_kind do_get_entity_kind() const noexcept override; cpp_entity_kind do_get_entity_kind() const noexcept override;
friend basic_builder<cpp_alias_template, cpp_type_alias>;
}; };
} // namespace cppast } // namespace cppast

View file

@ -33,8 +33,7 @@ namespace cppast
{ {
public: public:
/// \effects Sets the name and the entity that is begin templated. /// \effects Sets the name and the entity that is begin templated.
basic_builder(std::string name, std::unique_ptr<EntityT> templ) basic_builder(std::unique_ptr<EntityT> templ) : template_entity(new T(std::move(templ)))
: template_entity(new T(name, std::move(templ)))
{ {
} }
@ -62,8 +61,7 @@ namespace cppast
/// \effects Sets the name of the template and the entity to be templated. /// \effects Sets the name of the template and the entity to be templated.
/// \notes It does not include the parameters. /// \notes It does not include the parameters.
cpp_template(std::string name, std::unique_ptr<cpp_entity> entity) cpp_template(std::unique_ptr<cpp_entity> entity) : cpp_entity(entity->name())
: cpp_entity(std::move(name))
{ {
add_child(std::move(entity)); add_child(std::move(entity));
} }

View file

@ -20,6 +20,11 @@ namespace cppast
std::string name, std::string name,
std::unique_ptr<cpp_type> type); std::unique_ptr<cpp_type> type);
/// \returns A newly created type alias that isn't registered.
/// \notes This function is intendend for templated type aliases.
static std::unique_ptr<cpp_type_alias> build(std::string name,
std::unique_ptr<cpp_type> type);
/// \returns A reference to the aliased [cppast::cpp_type](). /// \returns A reference to the aliased [cppast::cpp_type]().
const cpp_type& underlying_type() const noexcept const cpp_type& underlying_type() const noexcept
{ {

View file

@ -12,12 +12,17 @@ std::unique_ptr<cpp_type_alias> cpp_type_alias::build(const cpp_entity_index& id
std::string name, std::string name,
std::unique_ptr<cpp_type> type) std::unique_ptr<cpp_type> type)
{ {
auto result = auto result = build(std::move(name), std::move(type));
std::unique_ptr<cpp_type_alias>(new cpp_type_alias(std::move(name), std::move(type)));
idx.register_entity(std::move(id), type_safe::cref(*result)); idx.register_entity(std::move(id), type_safe::cref(*result));
return result; return result;
} }
std::unique_ptr<cpp_type_alias> cpp_type_alias::build(std::string name,
std::unique_ptr<cpp_type> type)
{
return std::unique_ptr<cpp_type_alias>(new cpp_type_alias(std::move(name), std::move(type)));
}
cpp_entity_kind cpp_type_alias::do_get_entity_kind() const noexcept cpp_entity_kind cpp_type_alias::do_get_entity_kind() const noexcept
{ {
return cpp_entity_kind::type_alias_t; return cpp_entity_kind::type_alias_t;