看一下这段代码:
1
如果将CheckVal
传递给CheckVal
,则应该终止编译,但无论传递给error: use of class template 'A' requires template arguments
constexpr static ld value = conditional<i == 1,A,B><3>::value;
的是什么,我在编译时都会收到以下错误:< / p>
vendor
-assets
--custom
---impression
----css
-----file1.css
-----file2.css
-----file3.css
这是什么问题?我该如何解决?
答案 0 :(得分:0)
您使用A
的唯一地方位于conditional<>
。
A
需要模板参数,即template<int i>
。
因此,A
必须说A<i>
或A<3>
或... B
,而不是<3>
。
最后,您必须删除template<int i>
struct CheckVal {
constexpr static int value = conditional<i == 1, A<i>, B<i> >::value;
};
,因为您的编译器会告诉您:
{{1}}
但是,编译器(至少g ++)将失败
错误:静态断言失败:
static_assert(假的,&#34;&#34);
^
答案 1 :(得分:0)
首先,您的static_assert
将始终触发,因此不确定它的目的是什么。如果您对其进行评论,则需要在CheckVal
中进行更改以使其正常工作:
template<int i>
struct CheckVal
{
constexpr static int value = std::conditional<i == 1, A<3>, B<3>>::type::value;
};
std::conditional
会根据条件选择A<3>
或B<3>
,然后您首先需要返回::type
类型,然后才能获得::value
会员
答案 2 :(得分:0)
我不确定你想要实现的目标,但这个简单的构造是否足够?
template<int i>
struct CheckVal {
static_assert(i != 1,"");
};