Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 778249
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T19:44:05+00:00 2026-05-14T19:44:05+00:00

template< class T1, class T2 > class Pair { T1 first; T2 second; };

  • 0
template< class T1, class T2 >
class Pair {
    T1 first;
    T2 second;
};

I’m being asked to write a swap() method so that the first element becomes the second and the second the first. I have:

Pair<T2,T1> swap() {
    return Pair<T2,T1>(second, first);
}

But this returns a new object rather than swapping, where I think it needs to be a void method that changes its own data members. Is this possible to do since T1 and T2 are potentially different class types? In other words I can’t simply set temp=first, first=second, second=temp because it would try to convert them to different types. I’m not sure why you would potentially want to have a template object that changes order of its types as it seems that would cause confusion but that appears to be what I’m being asked to do.

Edit: Thank you all for answering! Pretty much as I thought, swapping in place obviously does not make any sense, the request for the swap() function was quite ambiguous.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-14T19:44:05+00:00Added an answer on May 14, 2026 at 7:44 pm

    You cannot swap in-place, since T1 and T2 need not be of the same type. Pair<T1,T2> is a different type than Pair<T2,T1>. You have to return an object of a different type than the original one, so that has to be a new object.

    What I’d do is this:

    template< class T1, class T2 >
    Pair<T2,T1> swap(const Pair<T1,T2>& pair) {
        return Pair<T2,T1>(pair.second, pair.first);
    }
    

    (There’s no reason to make this a member of your Pair template.)

    You could, however, add an overload for when T1 and T2 are of the same type:

    template< class T >
    Pair<T,T>& swap(Pair<T,T>& pair) {
        using std::swap;
        swap(pair.first, pair.second);
        return pair;
    }
    

    But this, as Dennis mentioned in his comment, might be indeed very confusing.

    Another idea is to define a converting constructor for your Pair template, so that implicitly convertible types can be swapped:

    template< class T1, class T2 >
    class Pair {
        T1 first;
        T2 second;
        template< class A1, class A2 >
        Pair(const A1& a1, const A2& a2) : first(a1), second (a2) {}
    };
    

    Then you can swap like this:

    Pair<int,double> p1(42,47.11);
    Pair<double,int> p2(p1.second,p1.first);
    

    But note that this also supports other, probably unwanted implicit conversions:

    Pair<char,float> p3(p1.second, p1.first); // narrowing! 
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 422k
  • Answers 422k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer What kind of error are you seeing? Also, you don't… May 15, 2026 at 11:26 am
  • Editorial Team
    Editorial Team added an answer This is the version for 1.1 for Dot.net http://owenbrady.net/browsercaps/CodeProject.xml You… May 15, 2026 at 11:26 am
  • Editorial Team
    Editorial Team added an answer You mainly need to set CLIENT_LOCALE and DB_LOCALE - to… May 15, 2026 at 11:26 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.