Нет, нет.
Однако это не имеет большого значения, потому что static_assert
оцениваются во время компиляции, и в случае ошибки компилятор не только распечатывает само сообщение,но он также напечатает стек экземпляров (в случае шаблонов).
Посмотрите на этот синтетический пример в ideone :
#include <iostream>
template <typename T>
struct IsInteger { static bool const value = false; };
template <>
struct IsInteger<int> { static bool const value = true; };
template <typename T>
void DoSomething(T t) {
static_assert(IsInteger<T>::value, // 11
"not an integer");
std::cout << t;
}
int main() {
DoSomething("Hello, World!"); // 18
}
Компилятор нетолько выдает диагностическое сообщение, но также выдает полный стек:
prog.cpp: In function 'void DoSomething(T) [with T = const char*]':
prog.cpp:18:30: instantiated from here
prog.cpp:11:3: error: static assertion failed: "not an integer"
Если вы знаете Python или Java и как они печатают стек в случае исключения, это должно быть знакомо.На самом деле, тем не менее, это даже лучше, потому что вы не только получаете стек вызовов, но вы также получаете значения аргументов (типы здесь)!
Следовательно, динамические сообщения не так необходимы:)