Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <boost/core/demangle.hpp>
- template <typename T>
- auto mangled (T t) {
- return typeid(t).name();
- }
- template <typename T>
- auto demangled (T t) {
- return boost::core::demangle(mangled(t));
- }
- #define SYM struct { using symbolic = void; }
- #define TSYM(Name) struct Name { using symbolic = void; }
- template <typename... Us> TSYM(ListType);
- template <typename... Ts>
- auto list (Ts...) {
- return ListType<Ts...>{};
- }
- template <typename T, typename U>
- auto operator+ (T t, U u) {
- SYM plus;
- return list(plus, t, u);
- }
- int main () {
- SYM a;
- SYM b;
- auto sum1 = a + b;
- auto sum2 = a + b + a;
- std::cout << mangled(a) << std::endl
- << demangled(a) << std::endl
- << mangled(b) << std::endl
- << demangled(b) << std::endl
- << mangled(sum1) << std::endl
- << demangled(sum1) << std::endl
- << mangled(sum2) << std::endl
- << demangled(sum2) << std::endl;
- return 0;
- }
- /* OUTPUT
- Z4mainEUt_
- main::{unnamed type#1}
- Z4mainEUt0_
- main::{unnamed type#2}
- 8ListTypeIJZplIZ4mainEUt_Z4mainEUt0_EDaT_T0_EUt_S1_S2_EE
- ListType<auto operator+<main::{unnamed type#1}, main::{unnamed type#2}>(main::{unnamed type#1}, main::{unnamed type#2})::{unnamed type#1}, {unnamed type#1}, main::{unnamed type#1}>
- 8ListTypeIJZplIS_IJZS0_IZ4mainEUt_Z4mainEUt0_EDaT_T0_EUt_S1_S2_EES1_EDaS3_S4_EUt_S6_S1_EE
- 8ListTypeIJZplIS_IJZS0_IZ4mainEUt_Z4mainEUt0_EDaT_T0_EUt_S1_S2_EES1_EDaS3_S4_EUt_S6_S1_EE
- */
- /* OUTPUT PIPED TO 'c++filt -t'
- main::{unnamed type#1}
- main::{unnamed type#1}
- main::{unnamed type#2}
- main::{unnamed type#2}
- ListType<auto operator+<main::{unnamed type#1}, main::{unnamed type#2}>(main::{unnamed type#1}, main::{unnamed type#2})::{unnamed type#1}, {unnamed type#1}, main::{unnamed type#1}>
- ListType<auto operator+<main::{unnamed type#1}, main::{unnamed type#2}>(main::{unnamed type#1}, main::{unnamed type#2})::{unnamed type#1}, {unnamed type#1}, main::{unnamed type#1}>
- 8ListTypeIJZplIS_IJZS0_IZ4mainEUt_Z4mainEUt0_EDaT_T0_EUt_S1_S2_EES1_EDaS3_S4_EUt_S6_S1_EE
- 8ListTypeIJZplIS_IJZS0_IZ4mainEUt_Z4mainEUt0_EDaT_T0_EUt_S1_S2_EES1_EDaS3_S4_EUt_S6_S1_EE
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement