#include <limits>
#include <cstdlib>
void bitvec_func()
{
const std::size_t nbits = 1e7;
typedef unsigned char vec_t;
const std::size_t WLEN = std::numeric_limits<vec_t>::digits;
const std::size_t VSIZ = nbits/WLEN+1;
static vec_t bitVec[nbits/VSIZ]; // Compiles fine
}
template <typename T>
void bitvec_func()
{
const std::size_t nbits = 1e7;
typedef T vec_t;
const std::size_t WLEN = std::numeric_limits<vec_t>::digits;
const std::size_t VSIZ = nbits/WLEN+1;
static vec_t bitVec[nbits/VSIZ]; // "error: storage size of ‘bitVec’ isn’t constant"
}
void flarf()
{
bitvec_func();
bitvec_func<unsigned char>();
}
int main()
{
flarf();
}
I2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPGNzdGRsaWI+CiAKdm9pZCBiaXR2ZWNfZnVuYygpCnsKICAgIGNvbnN0IHN0ZDo6c2l6ZV90ICAgICAgIG5iaXRzID0gMWU3OwogICAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdmVjX3Q7CiAgICBjb25zdCBzdGQ6OnNpemVfdCAgICAgICBXTEVOICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dmVjX3Q+OjpkaWdpdHM7CiAgICBjb25zdCBzdGQ6OnNpemVfdCAgICAgICBWU0laICA9IG5iaXRzL1dMRU4rMTsKICAgIHN0YXRpYyB2ZWNfdCAgICAgICAgICAgIGJpdFZlY1tuYml0cy9WU0laXTsgICAgLy8gQ29tcGlsZXMgZmluZQp9CiAKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgYml0dmVjX2Z1bmMoKQp7CiAgICBjb25zdCBzdGQ6OnNpemVfdCAgICAgICBuYml0cyA9IDFlNzsKICAgIHR5cGVkZWYgVCAgICAgICAgICAgICAgIHZlY190OwogICAgY29uc3Qgc3RkOjpzaXplX3QgICAgICAgV0xFTiAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHZlY190Pjo6ZGlnaXRzOwogICAgY29uc3Qgc3RkOjpzaXplX3QgICAgICAgVlNJWiAgPSBuYml0cy9XTEVOKzE7CiAgICBzdGF0aWMgdmVjX3QgICAgICAgICAgICBiaXRWZWNbbmJpdHMvVlNJWl07ICAgIC8vICJlcnJvcjogc3RvcmFnZSBzaXplIG9mIOKAmGJpdFZlY+KAmSBpc27igJl0IGNvbnN0YW50Igp9Cgp2b2lkIGZsYXJmKCkKewoJYml0dmVjX2Z1bmMoKTsKICAgICAgICBiaXR2ZWNfZnVuYzx1bnNpZ25lZCBjaGFyPigpOwp9CiAKaW50IG1haW4oKQp7CiAgICAgICBmbGFyZigpOwp9