Símbolos indefinidos para a função constexpr
Quando eu tento compilar o código a seguir, recebo um erro de vinculador:Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o
usando LLVM 4.2.
Esse comportamento ocorre apenas quando a função está marcadaconstexpr
. O programa compila e liga corretamente quando a função é marcadaconst
. Por que declarar a funçãoconstexpr
causar um erro de linker?
(Eu percebo que escrever a função desta maneira não oferece o benefício da computação em tempo de compilação; neste momento, estou curioso para saber por que a função falha em vincular.)
main.cpp
#include <iostream>
#include "test.hpp"
int main()
{
int bar = Foo();
std::cout << bar << std::endl;
return 0;
}
test.hpp
constexpr int Foo();
test.cpp
#include "test.hpp"
constexpr int Foo()
{
return 42;
}