C ++条件给出错误

时间:2018-03-17 18:33:32

标签: c++ templates template-meta-programming

看一下这段代码:

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

这是什么问题?我该如何解决?

3 个答案:

答案 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会员

演示:https://ideone.com/tozaYr

答案 2 :(得分:0)

我不确定你想要实现的目标,但这个简单的构造是否足够?

template<int i>
struct CheckVal {
    static_assert(i != 1,"");
};