trurle: (lem)
trurle ([personal profile] trurle) wrote2009-12-01 05:01 pm

Морские рассказы

C++ подобен морю.

В STL есть класс pair:
#include <utility>
#include <iostream>

using namespace std;

int main()
{
    pair<int, float> p;
    p.first = 3;
    p.second = 4.5;
    cout << p.first << "," << p.second << endl;
}
теперь попробуем у него унаследовать.
#include <utility>
#include <iostream>

using namespace std;

template<typename T> class range : public std::pair<T,T> {
public:
    range(T v) : std::pair<T,T>(v,v) {}
    bool in(T v) { return first <= v && v <= second; }
};
Компилируется? Нет, не компилируется в gcc 4.x, а как компилируется? Вот так:
#include <utility>
#include <iostream>

using namespace std;

template<typename T> class range : public std::pair<T,T> {
public:
    range(T v) : std::pair<T,T>(v,v) {}
    bool in(T v) { return std::pair<T,T>::first <= v && 
                          v <= std::pair<T,T>::second; }
};
Мне это кажется весьма примечательным

[identity profile] vodianoj.livejournal.com 2009-12-01 03:23 pm (UTC)(link)
Баг компилятора или я чего-то недопонял?

[identity profile] trurle.livejournal.com 2009-12-01 03:41 pm (UTC)(link)
И долго стояли в раздумье
Студиозиусы Вагнер и Кох.