статический указатель на функцию constexpr, разница между компиляторами
При ответеэтот вопросЯ попробовал следующий код с gcc (код скомпилирован) и лязг (код отклонен):
typedef long (*func)(int);
long function(int) { return 42; }
struct Test
{
static constexpr func f = &function;
};
template
struct Call
{
static void f()
{
c(0);
}
};
int main()
{
Call::f();
}
Я не уверен, какой компилятор прав, хотя я думаю, что инициализация constexprTest::f
в порядке Вывод ошибки clang:
error: non-type template argument for template parameter of pointer type 'func'
(aka 'long (*)(int)') must have its address taken
Какой компилятор прав?Если clang прав, почему и что на самом деле означает эта ошибка?РЕДАКТИРОВАТЬ: для "Зачем", увидетьDYP»С вопросом.