I have a class that offers a interface to access it's array with a operator[]. Like this:
class MyArray {
public:
    MyArray( int iSize ) :
        m_iSize( iSize ),
        m_upArray( std::make_unique<string[]>( iSize ) ) {};
    const string& operator[]( int idx ) const {
        return std::max( 0, std::min( m_iSize - 1, idx ) );
    };
private:
    int m_iSize;
    std::unique_ptr<string[]> m_upArray;
};
I want not the interface of this class be abused with arguments of wrong type,
such as double/float, because that the implicit casting here would lead to wrong result.
The user of the class MUST finger out correct idx by themselves, instead of lying on a static_cast<int>().
If I accept a double/float as an idx, it is very hard to debug our programs in the future!
Is there a way I can reject them passing a non-int argument? It is best, to reject the diseased codes being compiled.
