Let's say I have the following struct MyPairType
.
template<typename F, typename S>
struct MyPairType {
F first;
S second;
VPairType() { }
VPairType(F f, S s) { first = f; second = s; }
operator F() const { return first; }
operator S() const { return second; }
};
When I try to use MyPairType<A, B>
(for any types A
and B
s.t. A != B
), it works fine. However, when I try to use MyPairType<T, T>
(for any type T
), it fails because the two conversion operators are same:
error: ‘MyPairType<F, S>::operator S() const [with F = int; S = int]’ cannot be overloaded
operator S() const { return second; }
^
error: with ‘MyPairType<F, S>::operator F() const [with F = int; S = int]’
operator F() const { return first; }
I found that this can be fixed using a combination of std::enable_if
and std::is_same
, but it would require templating the operator function which is not desirable.
How can I fix this issue?
Aucun commentaire:
Enregistrer un commentaire