On Mon, Feb 24, 2025 at 9:26 PM Sidney Marshall <sidn...@frontiernet.net> wrote:
>
> In the code:
> -----------------------------------------------------------------------
> #include <iostream>
> #include <vector>
> #include <utility>
>
> // commenting out this forward declaration causes the code to fail
> // under g++-14.2.0
> //
> // the forward declaration is not needed for g++-9.4.0
> template<class T1, class T2>
> std::ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& p);
>
> template<class N>
> std::ostream& operator<<(std::ostream& os, const std::vector<N>& v) {
>    os << "[";
>    for(typename std::vector<N>::const_iterator i = v.begin();
>        i != v.end();
>        ++i) {
>      if(i != v.begin() ) os << ", ";
>      os << *i;
>    }
>    os << "]";
>    return os;
> }
>
> template<class T1, class T2>
> std::ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& p) {
>    os << "(" << p.first << "," << p.second << ")";
>    return os;
> }
>
> using namespace std;
>
> int main() {
>    cout << pair<int,int>(3, 4) << endl;
>    cout << vector<int>(3, 7) << endl;
>    cout << vector<pair<int,int> >(3, pair<int,int>(3, 4)) << endl;
> }
>
> // output:
> // (3,4)
> // [7, 7, 7]
> // [(3,4), (3,4), (3,4)]
> -----------------------------------------------------------------------
>
> the code compiles and runs under  g++-9.4.0 with or without the
> forward declaration but g++-14.2.0 requires the forward declaration.
>
> Did the standard change or is g++ now being more strict in following
> the standard.

GCC changed to be correct: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51577

Thanks,
Andrew

>
> Note that the actual code is more compicated but this is enough the
> show the difference.
>
> --Sidney Marshall
>

Reply via email to