Я ищу способ моделирования некоторых перегруженных встроенных модулей GCC на С++. Встроенные модули схожи с ними:
__builtin_foo(char *a, signed int b);
__builtin_foo(short *a, signed int b);
__builtin_foo(long *a, signed int b);
С особым ограничением, жестко закодированным в GCC: b
должно быть буквальным значением, то есть вы можете вызвать:
__builtin_foo((char *)0, 1);
но не:
extern int val;
__builtin_foo((char *)0, val);
который генерирует ошибку компилятора. Я искал с помощью std::enable_if
, чтобы имитировать это, но не могу найти способ обеспечить, чтобы принимались только литералы. Есть ли способ сделать это?