A selection pattern for C++11
This seems unnecessary complicated. Why not just have one simple class template:

template &lt;int DIM&gt;
class ClassName {
public:
    using array = std::array&lt;double, DIM&gt;;

    void somethingDimensionless(const array&amp; dblArray) const;

    template &lt;int D = DIM,
              typename = std::enable_if_t&lt;(D == 1)&gt;&gt;
    void somethingIn1D() const {
        ...
    }
};


And use it directly:

ClassName&lt;1&gt; oneD;
ClassName&lt;2&gt; twoD;


We use SFINAE instead of a static_assert in case you want to write a type trait to check for the existence of somethingIn1D. With a static_assert, ClassName&lt;2&gt;{}.somethingIn1D() wouldn't compile but overload resultion would still find it.