Quando non si conosce il tipo di una variabile, uno dei modi più semplici è questo trucco:
template<class T> struct tag_type{using type=T;};
template<class T> constexpr tag_type<T> tag{};
quindi fare questo:
tag_type<void> t = tag<some_type>;
quasi ogni compilatore sputare fuori un ragionevolmente leggibile "non è possibile assegnare tag_type<full_unpacked_type>
a tag_type<void>
" o somesuch (presumendo che il tipo non sia void
).
Si può anche verificare di avere una buona congettura con
tag_type<your_guess> t = tag<some_type>;
volte si desidera generare some_type
via decltype(some_expression)
.
oppure si può 'cout << idid (what_am_i) .name()' -dopo piping attraverso C++ filt, riporta 'bool [4] [2]'. – Kundor