4

I have a template class like so:

template<typename T, unsigned int size>
class Array 
{
public:
  static const unsigned int SIZE = size;
  // ...
private:
  T data[SIZE];
};

Is there a way to add compile-time checks such that the size of an Array<T,XXXX> never exceeds a certain value?

Like if that value was 512, this shouldn't compile:

Array<int, 1000> arr;


This idea of C++ifiying my code is new to me, so I'm open to any guides or further learning online to help with this since I didn't even know what to google for this. Everything I tried seemed way off.

JeJo
  • 30,635
  • 6
  • 49
  • 88
JoeVictor
  • 1,806
  • 1
  • 17
  • 38

1 Answers1

7

Is there a way to add compile-time checks such that the size of an Array<T,XXXX> never exceeds a certain value?

You can use requires in C++20 for this

template<typename T, unsigned int size> requires (size < 512)
class Array 
{
       // .....
};

Alternatively, you can static_assert the condition inside the class definition with a meaningful message to the user.

template<typename T, unsigned int size>
class Array 
{
     static_assert(size < 512, "Array size exceeded");
     // ....
};
JeJo
  • 30,635
  • 6
  • 49
  • 88