Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to output c++ type information during compilation

Tags:

c++

types

everyone. I am debugging some problem of type mismatch of a heavily templated class. I would like to know c++ type information during compilation, so I write this:

#pragma message typeinfo(var)

It just do not work.

So I am here asking for some help. I am not sure if it is possible. But I think the compiler must know the type information during compilation.

like image 269
CatDog Avatar asked Jun 28 '17 10:06

CatDog


1 Answers

The preprocessor is not going to help you much itself at compile time. It's job is preprocessing, which happens before compile time.

If the idea is to output type information at compile time then try the following

template <typename...> struct WhichType;
class Something {};

int main() {
    WhichType<Something>{};
}

Live example here. When you compile this you should get an error that gives you the type of whatever is inside the templates when trying to instantiate WhichType. This was a neat trick I picked up from Scott Meyers' Effective Modern C++ book. It seems to work perfectly on most mainstream compilers that I have encountered so far.

If you want to get the type information at runtime

#include <iostream>
#include <typeinfo>

using std::cout;
using std::endl;

int main() {
    auto integer = int{};
    cout << typeid(integer).name() << endl;
}

Note Don't get too comfortable with RTTI (RunTime Type Information) via typeid, C++ also offers several compile time type introspection utilities http://en.cppreference.com/w/cpp/header/type_traits.

like image 169
Curious Avatar answered Sep 23 '22 13:09

Curious