Podczas próby skompilowania następującego kodu pojawia się błąd łącznika: Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o
przy użyciu LLVM 4.2.Niezdefiniowane symbole funkcji constexpr
To zachowanie występuje tylko wtedy, gdy funkcja jest oznaczona jako constexpr
. Program kompiluje i łączy poprawnie, gdy funkcja jest oznaczona jako const
. Dlaczego deklarowanie funkcji powoduje błąd linkera?
(zdaję sobie sprawę, że pisanie funkcji w ten sposób nie daje korzyści z obliczeń kompilacji;. W tym momencie jestem ciekaw dlaczego funkcja nie odwołuje)
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;
}
Zobacz http://stackoverflow.com/questions/14391272/does-constexpr-imply-inline –