以下代码剪切产生错误消息和随后的clang 5.0.0和当前主分支的段错误.它适用于任何符合c ++ 11标准的g ++.
#include <initializer_list>
template <typename... T> struct B {};
template <typename T> struct gf {};
template <typename... A> B<A...> make_B(std::initializer_list<gf<A...>> const &V) { return {}; }
int main() {
auto x = gf<int>{};
auto b = make_B<int>({x, x, x}); // clang segfault
//auto b = make_B({x, x, x}); // ok
}
Run Code Online (Sandbox Code Playgroud)
错误消息显示
test.cpp:5:26: error: too many template arguments for class template 'gf'
template <typename... A> B<A...> make_B(std::initializer_list<gf<A...>> const &V) { return {}; }
^ …
Run Code Online (Sandbox Code Playgroud) 我想在生成器表达式中使用 cmake 选项来打开某个编译标志。从文档中我不清楚如何实现这一点。
我想写一些类似的东西
option(MYOPTION " ... " OFF)
...
add_compile_options($<$<MYOPTION>:-lblas>)
Run Code Online (Sandbox Code Playgroud)
这不起作用。
有没有办法实现这一目标?