我有一个可以工作的 Spirit-X3 解析器,它可以解析两个密切相关的语法来设置草稿和检查器的位置。我定义了两个变量模板特化作为语法的两种方言的解析器:
// general variable template
template<class Format>
auto const position = []{};
// template specialization for algebraic notation (squares of the form "a1"-"h8")
template<>
auto const position<ast::ALG> = attribute_cast<ast::position<ast::ALG>>
(
/* code depending on ast::ALG, omitted for brevity */
);
// template specialization for numeric notation (squares numbered 1 through N)
template<>
auto const position<ast::NUM> = attribute_cast<ast::position<ast::NUM>>
(
/* code depending on ast::NUM, omitted for brevity */
);
由于两个变量模板特化依赖于完全相同形式的模板参数,我想将它们合并到一个通用变量模板中:
template<class Format>
auto const position = attribute_cast<ast::position<Format>>
(
/* code depending on Format, omitted for brevity */
);
这也为g++正确编译和解析。它也为 Clang 编译,但它只能正确解析我在Wandbox上的输入,而不是在Coliru上。在我自己的开发盒上,使用来自apt.llvm.org的 clang-3.8.0 ,我得到了与 Coliru 相同的错误行为。
问题:Clang 中是否存在变量模板专业化的错误?如何以与 Wandbox 相同的方式配置 Clang 以解决该错误?或者它是某种与 Spirit-X3 相关的错误?