使用clang

时间:2017-10-26 11:42:27

标签: c++

下面的代码在GCC上编译得很好,但在Clang上没有编译,为什么?如果我理解正确,静态constexpr表达式必须在线外定义,这就是我所做的,但它似乎不起作用。

struct Foo;

template <typename T>
struct Bar;

template <>
struct Bar<Foo> {
    static constexpr char const * foo[] = { "foo" };
};

constexpr char const * Bar<Foo>::foo[];

#include <iostream>

int main(void) {
    std::cout << Bar<Foo>::foo[0] << std::endl;
}

产生以下内容:

❯ [DESKTOP-NJURELH?] /tmp ❯ clang++-5.0 -std=c++17 z.cc

/tmp/z-e6820c.o: In function `main':
z.cc:(.text+0x16): undefined reference to `Bar<Foo>::foo'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在这里找到了一个可能相关的问题:Undefined reference to static constexpr,但答案建议使用一个通用的定义,这不是我能做的(Bar<Foo>必须是一个专门化,模板本身没有定义)。

0 个答案:

没有答案