diff --git a/octa/utility.h b/octa/utility.h index 1d8adfc..f68ddcc 100644 --- a/octa/utility.h +++ b/octa/utility.h @@ -201,8 +201,9 @@ namespace detail { T p_first; U p_second; - CompressedPairBase(T a, U b): p_first(octa::forward(a)), - p_second(octa::forward(b)) {} + template + CompressedPairBase(TT &&a, UU &&b): p_first(octa::forward(a)), + p_second(octa::forward(b)) {} T &first() { return p_first; } const T &first() const { return p_first; } @@ -220,8 +221,9 @@ namespace detail { struct CompressedPairBase: T { U p_second; - CompressedPairBase(T a, U b): T(octa::forward(a)), - p_second(octa::forward(b)) {} + template + CompressedPairBase(TT &&a, UU &&b): T(octa::forward(a)), + p_second(octa::forward(b)) {} T &first() { return *this; } const T &first() const { return *this; } @@ -238,8 +240,9 @@ namespace detail { struct CompressedPairBase: U { T p_first; - CompressedPairBase(T a, U b): U(octa::forward(b)), - p_first(octa::forward(a)) {} + template + CompressedPairBase(TT &&a, UU &&b): U(octa::forward(b)), + p_first(octa::forward(a)) {} T &first() { return p_first; } const T &first() const { return p_first; } @@ -254,8 +257,9 @@ namespace detail { template struct CompressedPairBase: T, U { - CompressedPairBase(T a, U b): T(octa::forward(a)), - U(octa::forward(b)) {} + template + CompressedPairBase(TT &&a, UU &&b): T(octa::forward(a)), + U(octa::forward(b)) {} T &first() { return *this; } const T &first() const { return *this; } @@ -270,8 +274,9 @@ namespace detail { struct CompressedPair: CompressedPairBase { typedef CompressedPairBase Base; - CompressedPair(T a, U b): Base(octa::forward(a), - octa::forward(b)) {} + template + CompressedPair(TT &&a, UU &&b): Base(octa::forward(a), + octa::forward(b)) {} T &first() { return Base::first(); } const T &first() const { return Base::first(); }