#include <array>
using namespace std;
template < class T, size_t N1, size_t N2> array< T, N1+ N2> concat(
const array< T, N1> & a, const array< T, N2> & b)
{
array< T, N1+ N2> ret;
/* copy data into ret */
return ret;
}
int main( )
{
typedef int T;
array< T, 10 > a;
array< T, 5 > b;
array< T, 14 > ab1 = concat( a, b) ; // error
array< T, 15 > ab2 = concat( a, b) ; // works
auto ab3 = concat( a, b) ; // type of ab3 is auto-deduced to array<T, 15>
}
I2luY2x1ZGUgPGFycmF5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IE4xLCBzaXplX3QgTjI+IGFycmF5PFQsIE4xK04yPiBjb25jYXQoCiAgICBjb25zdCBhcnJheTxULCBOMT4gJmEsIGNvbnN0IGFycmF5PFQsIE4yPiAmYikKewogICAgYXJyYXk8VCwgTjErTjI+IHJldDsKICAgIC8qIGNvcHkgZGF0YSBpbnRvIHJldCAqLwogICAgcmV0dXJuIHJldDsKfQoKaW50IG1haW4oKQp7Cgl0eXBlZGVmIGludCBUOwoJYXJyYXk8VCwgMTA+IGE7CglhcnJheTxULCA1PiBiOwoJYXJyYXk8VCwgMTQ+IGFiMSA9IGNvbmNhdChhLCBiKTsgLy8gZXJyb3IKCWFycmF5PFQsIDE1PiBhYjIgPSBjb25jYXQoYSwgYik7IC8vIHdvcmtzCglhdXRvIGFiMyA9IGNvbmNhdChhLCBiKTsgLy8gdHlwZSBvZiBhYjMgaXMgYXV0by1kZWR1Y2VkIHRvIGFycmF5PFQsIDE1Pgp9
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:17:27: error: conversion from ‘array<[...],15>’ to non-scalar type ‘array<[...],14>’ requested
array<T, 14> ab1 = concat(a, b); // error
~~~~~~^~~~~~
stdout