The style of pair programming that is done as a constant process as part of "extreme programming" is pretty silly and simply should not be necessary in the large majority of projects.
Note, temporarily paring up with someone in order to discuss strategy, give a demo, solve a difficult problem, or anything like that is something completely different and is not what is meant by "pair programming" in the "agile" world.
If you have good developers, a well-factored code base, and are using the right tools and processes, it simply should not be necessary to pair up in order achieve a quality result. I could possibly see it helping when dealing with huge "enterprise" spaghetti code bases where every expression produces a side effect and any change will cause a new defect, but those situations are pretty extreme.
Note, temporarily paring up with someone in order to discuss strategy, give a demo, solve a difficult problem, or anything like that is something completely different and is not what is meant by "pair programming" in the "agile" world.
If you have good developers, a well-factored code base, and are using the right tools and processes, it simply should not be necessary to pair up in order achieve a quality result. I could possibly see it helping when dealing with huge "enterprise" spaghetti code bases where every expression produces a side effect and any change will cause a new defect, but those situations are pretty extreme.