gpt4 book ai didi

c++ - 在 MSVC 2010 上 boost STATIC_ASSERT

转载 作者:行者123 更新时间:2023-11-30 04:31:58 29 4
gpt4 key购买 nike

我正在使用 boost 1.45.0 并且有一些代码执行以下操作:

template <typename T = some_type, std::size_t N = 3> class my_class {
public:
typedef T value_type;
...
...
my_class(value_type i0) {BOOST_STATIC_ASSERT(N==1); m_data[0]=i0;}
protected:
T m_data[N];
//!< The internal data array used to store indices
}

这会在 MS VC++ 2010 上生成以下错误(据我所知,它已将 static_assert 实现为他们的主要变化之一)并且在 MS VC++ 2008 上没有错误:

 error C2338: N==1

同样,同一代码中的其他一些 BOOST_STATIC_ASSERT 也存在其他错误(为简洁起见,省略)。

我也尝试用 VC++ 中的 static_assert 替换,但得到了类似的构建错误(打印出消息字符串)。

有什么解决方法?

最佳答案

我认为您可能误解了静态断言的目的。静态断言旨在声明必须为真才能让代码编译的属性。如果你想要编写一个函数,除非某些条件为真但不会编译失败,否则不会生成,你需要使用 SFINAE .

// don't forget to #include <type_traits> for std::enable_if

template <std::size_t N1 = N>
my_class(value_type i0, typename std::enable_if<N1==1>::type* = 0)
{m_data[0]=i0;}

关于c++ - 在 MSVC 2010 上 boost STATIC_ASSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973579/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com