Lines Matching refs:T1
23 // A class that stores a choice "A or B", where A has type T1 * and B has
24 // type T2 *. Both T1 and T2 must have an alignment greater than 1, since
25 // the low bit is used to identify B over A. T1 and T2 can be the same.
32 // union { T1 *A; T2 *B; };
48 template<typename T1, typename T2 = T1>
53 static pointer_mux first (T1 *);
64 // if T1 and T2 are distinct and if T can be resolved to exactly one
68 std::enable_if<std::is_convertible<T *, T1 *>::value
76 void set_first (T1 *ptr) { *this = first (ptr); }
87 T1 *known_first () const { return reinterpret_cast<T1 *> (m_ptr); }
104 // if (T1 *a = ptr.first_or_null ())
106 T1 *first_or_null () const;
111 // if (T1 *b = ptr.second_or_null ())
122 // This is only valid if T1 and T2 are distinct and if T can be
149 template<typename T1, typename T2>
150 inline pointer_mux<T1, T2>
151 pointer_mux<T1, T2>::first (T1 *ptr)
157 template<typename T1, typename T2>
158 inline pointer_mux<T1, T2>
159 pointer_mux<T1, T2>::second (T2 *ptr)
165 template<typename T1, typename T2>
167 inline pointer_mux<T1, T2>::pointer_mux (T *ptr)
177 template<typename T1, typename T2>
178 inline T1 *
179 pointer_mux<T1, T2>::first_or_null () const
184 template<typename T1, typename T2>
186 pointer_mux<T1, T2>::second_or_null () const
196 template<typename T1, typename T2>
199 pointer_mux<T1, T2>::is_a () const
201 static_assert (std::is_convertible<T1 *, T>::value
210 template<typename T1, typename T2>
213 pointer_mux<T1, T2>::as_a () const
215 static_assert (std::is_convertible<T1 *, T>::value
230 template<typename T1, typename T2>
233 pointer_mux<T1, T2>::dyn_cast () const
235 static_assert (std::is_convertible<T1 *, T>::value