23

I would like to create a compile-time error in my C++ code with a custom error message. I want to do this for a couple of reasons:

  • to force compilation to fail while I'm working on new features which haven't been implemented yet. (compile time ! TODO reminder)
  • to create a more readable error when attempting to implement an unsupported template specialization.

I'm sure there is a trick to doing this but I cant find a resource explaining the method. I would wrap the code in a #define of the form COMPILE_FAIL("error message");

Thanks D

Dominic Birmingham
  • 325
  • 1
  • 3
  • 11

3 Answers3

43

Use #error:

#error "YOUR MESSAGE"

This produces an error from the preprocessor. If you want to detect an error at a later stage (e.g. during template processing), use static_assert (a C++11 feature).

nneonneo
  • 171,345
  • 36
  • 312
  • 383
26

Look into static_assert.

Example:

#include <iostream>
#include <type_traits>

template<typename T>
class matrix {
    static_assert(std::is_integral<T>::value, "Can only be integral type");
};

int main() {
    matrix<int*> v; //error: static assertion failed: Can only be integral type
}
Rapptz
  • 20,807
  • 5
  • 72
  • 86
5

To force a compiler error (GCC, Clang style):

#error "You ain't finished this yet!"