33 class _nout
ntype:
public type {
35 typedef std::map<const ntype*, const ntype*> promoter;
36 typedef std::map<const ntype*, promoter> promoters;
54 virtual nbool isImpli(
const type&
to)
const;
56 nbool isImpli(
const typeProvidable&
to)
const;
61 template <
typename T> tstr<T> asImpli(
const node* it)
const BY_SIDE_FUNC(asImpli<T>);
63 virtual str asImpli(
const node& from,
const type& to)
const;
64 str asImpli(
const node& from,
const type* to)
const BY_SIDE_FUNC(to, asImpli(from, *to), str());
65 str asImpli(
const node* from,
const type& to)
const BY_SIDE_FUNC(from, asImpli(*from, to), str());
66 str asImpli(
const node* from,
const type* to)
const BY_SIDE_FUNC(from&& to, asImpli(*from, *to), str());
75 nbool is(
const type& to)
const;
76 nbool is(
const type* it)
const BY_SIDE_FUNC(is);
78 template <
typename T> tstr<T> as(
const node& it)
const {
return this->as(it, ttype<T>::get()); }
80 template <
typename T> tstr<T> as(
const node* it)
const BY_SIDE_FUNC(as<T>);
82 str as(
const node& from,
const type& to)
const;
83 str as(
const node& from,
const type* to)
const BY_SIDE_FUNC(to, as(from, *to), str());
84 str as(
const node* from,
const type& to)
const BY_SIDE_FUNC(from, as(*from, to), str());
85 virtual str as(
const node* from,
const type* to)
const BY_SIDE_FUNC(from&& to, as(*from, *to), str());
108 const ntype* promote(
const typeProvidable&
r)
const;
111 template <
typename T>
const ntype* promote()
const {
return promote(
ttype<T>::get()); }
132 std::
string createNameWithParams()
const;
141 static promoters* _makeDeducers();