diff --git a/blitz/array-impl.h b/blitz/array-impl.h index 4bff205a..b30f3a48 100644 --- a/blitz/array-impl.h +++ b/blitz/array-impl.h @@ -62,6 +62,7 @@ #include #endif +#include BZ_NAMESPACE(blitz) @@ -110,6 +111,36 @@ class Array : public MemoryBlockReference { private: + + template + struct TypeIndex { + static const bool value = std::is_convertible::value && TypeIndex::value; + }; + template + struct TypeIndex { + static const bool value = std::is_convertible::value; + }; + + template + struct TypeRange { + static const bool value = std::is_same::value && TypeRange::value; + }; + template + struct TypeRange { + static const bool value = std::is_same::value; + }; + + template + struct TypePart { + static const bool value = TypePart::value || TypePart::value; + }; + template + struct TypePart { + static const bool value = + (!std::is_same::value && std::is_same::value) || + (!std::is_same::value && std::is_same::value); + }; + typedef MemoryBlockReference T_base; using T_base::data_; @@ -1981,7 +2012,8 @@ class Array : public MemoryBlockReference #ifdef BZ_HAVE_PARTIAL_ORDERING - template + template::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2) const { @@ -1991,7 +2023,8 @@ class Array : public MemoryBlockReference nilArraySection(), nilArraySection(), nilArraySection()); } - template + template::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3) const { @@ -2001,7 +2034,8 @@ class Array : public MemoryBlockReference nilArraySection(), nilArraySection()); } - template + template::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4) const { @@ -2011,7 +2045,8 @@ class Array : public MemoryBlockReference nilArraySection(), nilArraySection()); } - template + template::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5) const { @@ -2021,7 +2056,8 @@ class Array : public MemoryBlockReference nilArraySection(), nilArraySection()); } - template + template::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6) const { @@ -2031,7 +2067,8 @@ class Array : public MemoryBlockReference } template + typename T7, + typename = typename std::enable_if::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7) const { @@ -2041,7 +2078,8 @@ class Array : public MemoryBlockReference } template + typename T7, typename T8, + typename = typename std::enable_if::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8) const { @@ -2051,7 +2089,8 @@ class Array : public MemoryBlockReference } template + typename T7, typename T8, typename T9, + typename = typename std::enable_if::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9) const { @@ -2060,7 +2099,8 @@ class Array : public MemoryBlockReference } template + typename T7, typename T8, typename T9, typename T10, + typename = typename std::enable_if::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10) const { @@ -2069,7 +2109,8 @@ class Array : public MemoryBlockReference } template + typename T7, typename T8, typename T9, typename T10, typename T11, + typename = typename std::enable_if::value>::type> typename SliceInfo::T_slice operator()(T1 r1, T2 r2, T3 r3, T4 r4, T5 r5, T6 r6, T7 r7, T8 r8, T9 r9, T10 r10, T11 r11) const {