Можно ли вывести, является ли тип неполным, без сбоя компиляции?

Я хочу добиться такого поведения, как sizeof(complete_type) будет возвращать real sizeof, а sizeof(incomplete_type) - будет просто 0

Мне это нужно для обеспечения расширенной информации о типах времени выполнения для IPC(межпроцессного) взаимодействия со структурой описания на тип:

struct my_type_info
{
    bool   is_pointer;
    size_t size;         //for double* will be 4 on i386. that is sizeof(double*)
    size_t base_size;    //for double* will be 8. that is sizeof(double)
};

Проблема возникает, когда в мою систему попадает что-то типа class MyOnlyDeclaredClass; я получаю ошибку компиляции, очевидно по причине того, что я не могу взять его размер.

boost type_traits http://www.boost.org/doc/libs/1_48_0/libs/type_traits/doc/html/index.html предлагает много компилируемых классов, но нет 'is_incomplete'

Интересные компиляторы: VS2008, VS2010, clang 3, gcc-4. 6, gcc-4.7

5
задан Deduplicator 21 October 2018 в 23:02
поделиться