Доброе утро!
Захотелось поиграться с шаблонами, наваял для начала такой код:
#include <iostream>
#ifndef X
#error usage: c++ --std=c++11 -DX=<argument> __FILE__ && ./a.out
#endif // X
using xy_type = unsigned long long;
template <xy_type x>
struct fact {
xy_type y = x * fact<x-1>().y;
};
template <>
struct fact<0> {
xy_type y = 1;
};
int main() {
std::cerr << fact<X>().y << std::endl;
return 0;;
}
Всё хорошо, но не достигнута одна цель: я хочу выводить
fact<X>().y
во время компиляции, желательно роняя её, чтобы не произвести бинарь. Типа как при #error. Не получается, пытался сделать что-то с макросами и ещё чем-то, толку нет. Ввод организовать легко, через -D, а с выводом придумать не могу. Есть идеи?
P.S. Туплю, но ещё маленький вопрос: почему __FILE__ не подставляется?
c, c++, макросы, хочется странного, шаблоны