30auto has_name_impl(
int) ->
decltype(std::declval<U>().name(), std::true_type{});
34template <
typename U>
struct has_name : decltype(has_name_impl<U>(0)) { };
37auto has_type_impl(
int) ->
decltype(std::declval<U>().type(), std::true_type{});
41template <
typename U>
struct has_type : decltype(has_type_impl<U>(0)) { };
45 int) ->
decltype(std::declval<U>().full_name(std::declval<bool>()),
54 int) ->
decltype(std::declval<U>().name_no_ns(), std::true_type{});
62 int) ->
decltype(std::declval<U>().full_name_no_ns(), std::true_type{});
83 template <
typename U = T>
84 std::enable_if_t<detail::has_name<U>::value, std::string>
name()
const
89 template <
typename U = T>
90 std::enable_if_t<detail::has_type<U>::value, std::string>
type()
const
95 template <
typename U = T>
96 std::enable_if_t<detail::has_full_name<U>::value, std::string>
full_name(
102 template <
typename U = T>
103 std::enable_if_t<detail::has_name_no_ns<U>::value, std::string>
109 template <
typename U = T>
110 std::enable_if_t<detail::has_full_name_no_ns<U>::value, std::string>
117 std::string
adapt(std::string n)
const
121 if constexpr (std::is_base_of<common::model::element, T>::value) {
124 return fmt::format(
"::{}", n);
127 if (
element_.get_namespace().is_empty() &&
129 return fmt::format(
"::{}", n);