我有一个模板化的成员函数,它看起来有点像以下:
template <typename T>
int SendData( const T& tDataBuffer ) const
{
static_assert( std::is_trivially_copyable<T>::value, "The object type must be trivially copyable" );
// Send the data bitwise
...
}
然后我以如下方式调用此函数:
const int iArray[2] = {1, 2};
int iResult = pSocket->SendData( iArray );
当我使用 Visual Studio 2012 编译它时,我没有收到任何错误消息,并且程序的功能是我所期望的(即数据按位发送),但是,当使用最新版本的编译器 Visual Studio 2013 编译时,静态断言失败,编译器向我发出声明:
1>c:\...\sockets.h(298): error C2338: The object type must be trivially copyable
1> c:\...\test.cpp(974) : see reference to function template instantiation 'int CBaseSocket::SendData<const int[2]>(T (&)) const' being compiled
1> with
1> [
1> T=const int [2]
1> ]
那么哪个版本的编译器是符合标准的,是否应该const int[2]
可以轻松复制?
编辑:这是 Visual Studio 2013 的错误;这是Microsoft Connect 报告