|
Boost-Commit : |
From: dgregor_at_[hidden]
Date: 2008-03-03 11:27:24
Author: dgregor
Date: 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
New Revision: 43474
URL: http://svn.boost.org/trac/boost/changeset/43474
Log:
Skeletal concepts issues list
Added:
sandbox/committee/concepts/
sandbox/committee/concepts/issues/
sandbox/committee/concepts/issues/Makefile (contents, props changed)
sandbox/committee/concepts/issues/date.cpp (contents, props changed)
sandbox/committee/concepts/issues/date.h (contents, props changed)
sandbox/committee/concepts/issues/issues/
sandbox/committee/concepts/issues/issues/concepts-issues.xml (contents, props changed)
sandbox/committee/concepts/issues/issues/concepts-template.xml (contents, props changed)
sandbox/committee/concepts/issues/issues/issue1.xml (contents, props changed)
sandbox/committee/concepts/issues/main.cpp (contents, props changed)
sandbox/committee/concepts/issues/section.data (contents, props changed)
Added: sandbox/committee/concepts/issues/Makefile
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/Makefile 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,11 @@
+CXX=g++
+
+html:
+ make concepts_issues
+ ./concepts_issues
+
+concepts_issues: main.cpp date.cpp date.h
+ $(CXX) -o concepts_issues main.cpp date.cpp date.h
+
+clean:
+ rm -f *.html concepts_issues
Added: sandbox/committee/concepts/issues/date.cpp
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/date.cpp 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,348 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+#include "date.h"
+#include <time.h>
+
+namespace gregorian
+{
+
+namespace detail
+{
+
+unsigned spec::id_next = 0;
+
+} // detail
+
+const unsigned char date::lastDay_s[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+const detail::spec last;
+const detail::spec first;
+
+const week_day sun(0);
+const week_day mon(1);
+const week_day tue(2);
+const week_day wed(3);
+const week_day thu(4);
+const week_day fri(5);
+const week_day sat(6);
+
+const month jan(1);
+const month feb(2);
+const month mar(3);
+const month apr(4);
+const month may(5);
+const month jun(6);
+const month jul(7);
+const month aug(8);
+const month sep(9);
+const month oct(10);
+const month nov(11);
+const month dec(12);
+
+day::day(int d)
+ : d_((unsigned char)d)
+{
+ if (d < 1 || d > 31)
+ throw bad_date();
+}
+
+week_day::week_day(int d)
+ : d_(d)
+{
+ if (d < 0 || d > 6)
+ throw bad_date();
+}
+
+date::date()
+{
+ time_t systime;
+ time(&systime);
+ struct tm* now = std::localtime(&systime);
+ year_ = (unsigned short)(now->tm_year+1900);
+ month_ = (unsigned char)(now->tm_mon+1);
+ day_ = (unsigned char)(now->tm_mday);
+ fix_from_ymd();
+}
+
+date::date(detail::day_month_spec dm, gregorian::year y)
+ : year_((unsigned short)y.value),
+ month_((unsigned char)dm.m_.value),
+ day_(dm.d_.d_)
+{
+ init();
+}
+
+date::date(gregorian::day d, detail::month_year_spec my)
+ : year_((unsigned short)my.y_.value),
+ month_((unsigned char)my.m_.value),
+ day_(d.d_)
+{
+ init();
+}
+
+void
+date::decode(int& dow, int& n) const
+{
+ if (day_ & 0xE0)
+ dow = ((day_ & 0xE0) >> 5) - 1;
+ else
+ dow = -1;
+ n = month_ >> 4;
+}
+
+void
+date::encode(int dow, int n)
+{
+ day_ &= 0x1F;
+ month_ &= 0x0F;
+ if (dow >= 0)
+ day_ |= (unsigned char)((dow + 1) << 5);
+ month_ |= (unsigned char)(n << 4);
+}
+
+void
+date::init()
+{
+ if (day_ & 0xE0)
+ {
+ int dow = ((day_ & 0xE0) >> 5) - 1;
+ int n = day_ & 0x1F;
+ if (n == 0)
+ n = 6;
+ day_ = 0;
+ encode(dow, n);
+ }
+ else if (day_ == 0)
+ encode(-1, 6);
+ fix_from_ymd();
+}
+
+bool
+date::is_leap() const
+{
+ if (year_ > 1582)
+ {
+ if (year_ % 400 == 0)
+ return true;
+ if (year_ % 100 == 0)
+ return false;
+ }
+ return year_ % 4 == 0;
+}
+
+void
+date::fix_from_ymd()
+{
+ int dow, n, d, m, y;
+ decode(dow, n);
+ d = day();
+ m = month();
+ y = year();
+ if (0 <= dow && dow <= 6)
+ {
+ if (n == 0 || n > 6)
+ throw bad_date();
+ date tmp1 = gregorian::day(1) / m / y;
+ date tmp2 = last / m / y;
+ int wd = tmp1.day_of_week();
+ int delta = 0;
+ if (dow != wd)
+ {
+ if (dow < wd)
+ delta += 7 - (wd - dow);
+ else
+ delta += dow - wd;
+ }
+ delta += (n-1)*7;
+ if (n == 6 && delta >= tmp2.day())
+ delta -= 7 * ((delta - tmp2.day()) / 7 + 1);
+ tmp1 += delta;
+ if (tmp1.month() != m)
+ throw bad_date();
+ *this = tmp1;
+ encode(dow, n);
+ return;
+ }
+ if (dow != -1)
+ throw bad_date();
+ if (n != 0 && n != 6)
+ throw bad_date();
+ if ((d == 0 && n == 0) || m == 0 || m > 12)
+ throw bad_date();
+ if (n == 6)
+ d = 0;
+ unsigned long jdate = 0;
+ bool leap = is_leap();
+ if (leap && m == 2)
+ {
+ if (d > 29)
+ throw bad_date();
+ if (n == 6)
+ d = 29;
+ }
+ else
+ {
+ if (d > lastDay_s[m-1])
+ throw bad_date();
+ if (n == 6)
+ d = lastDay_s[m-1];
+ }
+ if (y == 1582 && m == 10 && d >= 5 && d <= 14)
+ throw bad_date();
+ if (y > 0)
+ {
+ jdate = 365U * y + 1; // Jan 1, 0 == 1 && y 0 is leap y
+ --y;
+ jdate += y / 4;
+ if (y >= 1700)
+ jdate += -(y-1600) / 100 + (y-1600) / 400;
+ ++y;
+ }
+ for (int i = 0; i < m-1; i++)
+ jdate += lastDay_s[i];
+ if (leap && m > 2)
+ jdate++;
+ jdate += d;
+ // If date >= 10/15/1582 then subtract 10
+ if (jdate >= 578114)
+ jdate -= 10;
+
+// if (y >= 1582) {
+// if (y == 1582) {
+// if (m >= 10) {
+// if (m == 10) {
+// if (d >= 15) {
+// jdate -= 10;
+// }
+// }
+// else { // m > 10
+// jdate -= 10;
+// }
+// }
+// }
+// else { // y > 1582
+// jdate -= 10;
+// }
+// }
+
+ if (jdate <= 0)
+ throw bad_date();
+ jdate_ = jdate;
+ year_ = (unsigned short)y;
+ month_ = (unsigned char)m;
+ day_ = (unsigned char)d;
+ encode(dow, n);
+}
+
+void
+date::fix_from_jdate()
+{
+ if (jdate_ <= 0)
+ throw bad_date();
+ int dow, n;
+ decode(dow, n);
+ year_ = static_cast<unsigned short>(jdate_ / 365.2475);
+ date lower = gregorian::day(1) / 1 / year_;
+ date upper = gregorian::day(31) / 12 / year_;
+ while (true)
+ {
+ if (lower.jdate_ > jdate_)
+ --year_;
+ else if (upper.jdate_ < jdate_)
+ ++year_;
+ else
+ break;
+ lower = gregorian::day(1) / 1 / year_;
+ upper = gregorian::day(31) / 12 / year_;
+ }
+ month_ = static_cast<unsigned char>((jdate_ - lower.jdate_) / 30 + 1);
+ if (month_ > 12)
+ month_ = 12;
+ while (true)
+ {
+ lower = gregorian::day(1) / month_ / year_;
+ upper = gregorian::last / month_ / year_;
+ if (lower.jdate_ > jdate_)
+ --month_;
+ else if (upper.jdate_ < jdate_)
+ ++month_;
+ else
+ break;
+ }
+ day_ = static_cast<unsigned char>(jdate_ - lower.jdate_ + 1);
+ if (year_ == 1582 && month_ == 10 && day_ >= 5)
+ day_ += 10;
+}
+
+day
+operator*(detail::spec s, week_day wd)
+{
+ day d(1);
+ d.d_ = (unsigned char)(wd.d_+1 << 5);
+ if (s == first)
+ d.d_ |= 1;
+ return d;
+}
+
+day
+operator*(int n, week_day wd)
+{
+ day d(1);
+ if (n < 1 || n > 5)
+ throw bad_date();
+ d.d_ = (unsigned char)((wd.d_+1 << 5) | n);
+ return d;
+}
+
+date&
+date::operator+=(int d)
+{
+ jdate_ += d;
+ fix_from_jdate();
+ return *this;
+}
+
+date
+operator+(const date& dt, month mnth)
+{
+ int dow, n, m, d, y;
+ dt.decode(dow, n);
+ y = dt.year();
+ m = dt.month();
+ d = dt.day();
+ int new_month = m - 1 + mnth.value;
+ if (new_month < 0)
+ {
+ int delta = ((-new_month - 1) / 12 + 1) * 12;
+ y -= delta / 12;
+ new_month += delta;
+ }
+ else if (new_month > 11)
+ {
+ int delta = ((new_month - 12) / 12 + 1) * 12;
+ y += delta / 12;
+ new_month -= delta;
+ }
+ m = new_month + 1;
+ date result(y, m, d);
+ result.encode(dow, n);
+ result.fix_from_ymd();
+ return result;
+}
+
+date
+operator+(const date& dt, year yr)
+{
+ int dow, n, m, d, y;
+ dt.decode(dow, n);
+ y = dt.year();
+ m = dt.month();
+ d = dt.day();
+ y += yr.value;
+ date result(y, m, d);
+ result.encode(dow, n);
+ result.fix_from_ymd();
+ return result;
+}
+
+} // gregorian
Added: sandbox/committee/concepts/issues/date.h
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/date.h 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,343 @@
+// I, Howard Hinnant, hereby place this code in the public domain.
+
+#ifndef DATE_H
+#define DATE_H
+
+#include <exception>
+#include <istream>
+#include <ostream>
+#include <locale>
+#include <ctime>
+
+namespace gregorian
+{
+
+class day;
+
+namespace detail
+{
+
+class spec
+{
+private:
+ unsigned id_;
+ static unsigned id_next;
+
+ friend class gregorian::day;
+public:
+ spec() : id_(id_next++) {}
+ bool operator == (const spec& y) const {return id_ == y.id_;}
+ bool operator != (const spec& y) const {return id_ != y.id_;}
+};
+
+} // detail
+
+extern const detail::spec last;
+extern const detail::spec first;
+
+class bad_date
+ : public std::exception
+{
+public:
+ virtual const char* what() const throw() {return "bad_date";}
+};
+
+class week_day;
+class date;
+
+class day
+{
+private:
+ unsigned char d_;
+
+ friend class gregorian::date;
+ friend day operator*(detail::spec s, week_day wd);
+ friend day operator*(int n, week_day wd);
+public:
+ day(int d);
+ day(detail::spec s) : d_((unsigned char)s.id_) {}
+};
+
+struct month
+{
+ month(int m) : value(m) {}
+ int value;
+};
+
+struct year
+{
+ year(int y) : value(y) {}
+ int value;
+};
+
+class week_day
+{
+private:
+ int d_;
+
+ friend class gregorian::date;
+ friend day operator*(detail::spec s, week_day wd);
+ friend day operator*(int n, week_day wd);
+public:
+ week_day(int d);
+};
+
+extern const week_day sun;
+extern const week_day mon;
+extern const week_day tue;
+extern const week_day wed;
+extern const week_day thu;
+extern const week_day fri;
+extern const week_day sat;
+
+extern const month jan;
+extern const month feb;
+extern const month mar;
+extern const month apr;
+extern const month may;
+extern const month jun;
+extern const month jul;
+extern const month aug;
+extern const month sep;
+extern const month oct;
+extern const month nov;
+extern const month dec;
+
+namespace detail
+{
+
+class day_month_spec
+{
+private:
+ day d_;
+ month m_;
+
+ friend class gregorian::date;
+public:
+ day_month_spec(day d, month m);
+};
+
+inline
+day_month_spec::day_month_spec(day d, month m)
+ : d_(d),
+ m_(m)
+{
+}
+
+class month_year_spec
+{
+private:
+ month m_;
+ year y_;
+
+ friend class gregorian::date;
+public:
+ month_year_spec(month m, year y);
+};
+
+inline
+month_year_spec::month_year_spec(month m, year y)
+ : m_(m),
+ y_(y)
+{
+}
+
+} // detail
+
+date operator+(const date&, month);
+date operator+(const date&, year);
+
+class date
+{
+private:
+ unsigned long jdate_;
+ unsigned short year_;
+ unsigned char month_;
+ unsigned char day_;
+ static const unsigned char lastDay_s[12];
+
+public:
+ date();
+ date(detail::day_month_spec dm, gregorian::year y);
+ date(gregorian::day d, detail::month_year_spec my);
+
+ int day() const {return day_ & 0x1F;}
+ int month() const {return month_ & 0x0F;}
+ int year() const {return year_;}
+ int day_of_week() const {return static_cast<int>((jdate_+3) % 7);}
+ bool is_leap() const;
+
+ date& operator+=(int d);
+ date& operator++() {return *this += 1;}
+ date operator++(int) {date tmp(*this); *this += 1; return tmp;}
+ date& operator-=(int d) {return *this += -d;}
+ date& operator--() {return *this -= 1;}
+ date operator--(int) {date tmp(*this); *this -= 1; return tmp;}
+ friend date operator+(const date& x, int y) {date r(x); r += y; return r;}
+ friend date operator+(int x, const date& y) {return y + x;}
+ friend date operator-(const date& x, int y) {date r(x); r += -y; return r;}
+
+ date& operator+=(gregorian::month m) {*this = *this + m; return *this;}
+ date& operator-=(gregorian::month m) {return *this += gregorian::month(-m.value);}
+ friend date operator+(gregorian::month m, const date& y) {return y + m;}
+ friend date operator-(const date& x, gregorian::month m) {date r(x); r -= m; return r;}
+
+ date& operator+=(gregorian::year y) {*this = *this + y; return *this;}
+ date& operator-=(gregorian::year y) {return *this += gregorian::year(-y.value);}
+ friend date operator+(gregorian::year y, const date& x) {return x + y;}
+ friend date operator-(const date& x, gregorian::year y) {date r(x); r -= y; return r;}
+
+ friend long operator-(const date& x, const date& y) {return (long)(x.jdate_ - y.jdate_);}
+ friend bool operator==(const date& x, const date& y) {return x.jdate_ == y.jdate_;}
+ friend bool operator!=(const date& x, const date& y) {return x.jdate_ != y.jdate_;}
+ friend bool operator< (const date& x, const date& y) {return x.jdate_ < y.jdate_;}
+ friend bool operator<=(const date& x, const date& y) {return x.jdate_ <= y.jdate_;}
+ friend bool operator> (const date& x, const date& y) {return x.jdate_ > y.jdate_;}
+ friend bool operator>=(const date& x, const date& y) {return x.jdate_ >= y.jdate_;}
+
+private:
+
+ date(int y, int m, int d)
+ : year_((unsigned short)y), month_((unsigned char)m), day_((unsigned char)d) {}
+ void init();
+ void fix_from_ymd();
+ void fix_from_jdate();
+ void decode(int& dow, int& n) const;
+ void encode(int dow, int n);
+
+ friend date operator+(const date&, gregorian::month);
+ friend date operator+(const date&, gregorian::year);
+};
+
+day operator*(detail::spec s, week_day wd);
+day operator*(int n, week_day wd);
+
+detail::day_month_spec
+inline
+operator/(day d, month m)
+{
+ return detail::day_month_spec(d, m);
+}
+
+inline
+detail::day_month_spec
+operator/(month m, day d)
+{
+ return detail::day_month_spec(d, m);
+}
+
+inline
+detail::month_year_spec
+operator/(year y, month m)
+{
+ return detail::month_year_spec(m, y);
+}
+
+inline
+date
+operator/(detail::day_month_spec dm, year y)
+{
+ return date(dm, y);
+}
+
+inline
+date
+operator/(detail::month_year_spec my, day d)
+{
+ return date(d, my);
+}
+
+namespace detail
+{
+
+detail::day_month_spec
+inline
+operator/(spec d, int m)
+{
+ return day(d) / month(m);
+}
+
+inline
+detail::day_month_spec
+operator/(int m, spec d)
+{
+ return day(d) / month(m);
+}
+
+inline
+date
+operator/(detail::day_month_spec dm, int y)
+{
+ return date(dm, year(y));
+}
+
+inline
+date
+operator/(detail::month_year_spec my, int d)
+{
+ return date(day(d), my);
+}
+
+
+
+} // detail
+
+template<class charT, class traits>
+std::basic_istream<charT,traits>&
+operator >>(std::basic_istream<charT,traits>& is, date& item)
+{
+ typename std::basic_istream<charT,traits>::sentry ok(is);
+ if (ok)
+ {
+ std::ios_base::iostate err = std::ios_base::goodbit;
+ try
+ {
+ const std::time_get<charT>& tg = std::use_facet<std::time_get<charT> >
+ (is.getloc());
+ std::tm t;
+ tg.get_date(is, 0, is, err, &t);
+ if (!(err & std::ios_base::failbit))
+ item = date(month(t.tm_mon+1) / day(t.tm_mday) / year(t.tm_year+1900));
+ }
+ catch (...)
+ {
+ err |= std::ios_base::badbit | std::ios_base::failbit;
+ }
+ is.setstate(err);
+ }
+ return is;
+}
+
+template<class charT, class traits>
+std::basic_ostream<charT, traits>&
+operator <<(std::basic_ostream<charT, traits>& os, const date& item)
+{
+ typename std::basic_ostream<charT, traits>::sentry ok(os);
+ if (ok)
+ {
+ bool failed;
+ try
+ {
+ const std::time_put<charT>& tp = std::use_facet<std::time_put<charT> >
+ (os.getloc());
+ std::tm t;
+ t.tm_mday = item.day();
+ t.tm_mon = item.month() - 1;
+ t.tm_year = item.year() - 1900;
+ t.tm_wday = item.day_of_week();
+ charT pattern[2] = {'%', 'x'};
+ failed = tp.put(os, os, os.fill(), &t, pattern, pattern+2).failed();
+ }
+ catch (...)
+ {
+ failed = true;
+ }
+ if (failed)
+ os.setstate(std::ios_base::failbit | std::ios_base::badbit);
+ }
+ return os;
+}
+
+} // gregorian
+
+#endif // DATE_H
Added: sandbox/committee/concepts/issues/issues/concepts-issues.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/concepts-issues.xml 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,190 @@
+<issueslist revision="C1"
+ maintainer="Douglas Gregor <doug.gregor_at_[hidden]>"
+ active_docno="Dxxxx=xx-xxxx"
+ defect_docno="Dxxxx=xx-xxxx"
+ closed_docno="Dxxxx=xx-xxxx"
+ date="2007-03-03"
+>
+
+<intros>
+<intro list="Active">
+ <p>Also see:</p>
+ <ul>
+ <li>Table of Contents for all concepts issues.</li>
+ <li>Index by Section for all concepts issues.</li>
+ <li>Index by Status for all concepts issues.</li>
+ <li>Concepts Defect Reports List</li>
+ <li>Concepts Closed Issues List</li>
+ </ul>
+ <p>The purpose of this document is to record the status of issues
+ which have been related to the authors of the C++ concepts
+ proposals. Issues represent potential defects in the language
+ or library proposals for concepts. </p>
+
+ <p>This document contains only issues which are actively being
+ considered for concepts. That is, issues which have a
+ status of New, Open,
+ Ready, and Review. See
+ Concepts Defect Reports List for issues considered defects and
+ Concepts Closed Issues List for issues considered closed.</p>
+
+</intro>
+
+<intro list="Defects">
+ <p>Also see:</p>
+ <ul>
+ <li>Table of Contents for all concepts issues.</li>
+ <li>Index by Section for all concepts issues.</li>
+ <li>Index by Status for all concepts issues.</li>
+ <li>Concepts Active Issues List</li>
+ <li>Concepts Closed Issues List</li>
+ </ul>
+ <p>This document contains only concepts issues which have been closed
+ after being found to be defects
+ in the proposal. That is, issues which have a status of DR. See the
+ Concepts Closed Issues List for issues closed as non-defects. See the
+ Concepts Active Issues List for active issues and more information. The
+ introductory material in that document also applies to this
+ document.</p>
+</intro>
+
+<intro list="Closed">
+ <p>Also see:</p>
+ <ul>
+ <li>Table of Contents for all concepts issues.</li>
+ <li>Index by Section for all concepts issues.</li>
+ <li>Index by Status for all concepts issues.</li>
+ <li>Concepts Active Issues List</li>
+ <li>Concepts Defect Reports List</li>
+ </ul>
+
+ <p>This document contains only concepts issues which have been closed
+ by the concepts authors as duplicates or not defects. That is,
+ issues which have a status of Dup or
+ NAD. See the Concepts Active Issues List active issues and more
+ information. See the Concepts Defect Reports List for issues considered
+ defects. The introductory material in that document also applies to
+ this document.</p>
+</intro>
+
+<intro list="TOC">
+ <p>This document is the Table of Contents for the Concepts Active Issues List,
+ Concepts Defect Reports List, and Concepts Closed Issues List.</p>
+
+ <p>Also see:</p>
+ <ul>
+ <li>Index by Section</li>
+ <li>Index by Status</li>
+ </ul>
+</intro>
+
+<intro list="Section">
+ <p>This document is the Index by Section for the Concepts Active Issues List,
+ Concepts Defect Reports List, and Concepts Closed Issues List.</p>
+
+ <p>Also see:</p>
+ <ul>
+ <li>Table of Contents</li>
+ <li>Index by Status</li>
+ </ul>
+</intro>
+
+<intro list="Status">
+ <p>This document is the Index by Status for the Concepts Active Issues List,
+ Concepts Defect Reports List, and Concepts Closed Issues List.</p>
+
+ <p>Also see:</p>
+ <ul>
+ <li>Table of Contents</li>
+ <li>Index by Section</li>
+ </ul>
+</intro>
+
+</intros>
+
+<revision_history>
+
+<revision tag="C1">
+Initial version. (3 Mar 2008)
+</revision>
+
+</revision_history>
+
+<statuses>
+ <p><b><a name="New">New</a></b> - The issue has not yet been
+ reviewed. Any <b>Proposed Resolution</b> is purely a
+ suggestion from the issue submitter, and should not be construed as
+ the view of the committee.</p>
+
+ <p><b><a name="Open">Open</a></b> - The committee has discussed the issue
+ but is not yet ready to move the issue forward. There are several
+ possible reasons for open status:</p>
+ <ul>
+ <li>Consensus may have not yet have been reached as to how to deal
+ with the issue.</li>
+ <li>Informal consensus may have been reached, but the committee awaits
+ exact <b>Proposed Resolution</b> wording for review.</li>
+ <li>The committee wishes to consult additional technical experts before
+ proceeding.</li>
+ <li>The issue may require further study.</li>
+ </ul>
+
+ <p>A <b>Proposed Resolution</b> for an open issue is still not be
+ construed as the view of committee. Comments on the current state of
+ discussions are often given at the end of open issues in an italic
+ font. Such comments are for information only and should not be given
+ undue importance.</p>
+
+ <p><b><a name="Dup">Dup</a></b> - The committee has reached consensus that
+ the issue is a duplicate of another issue, and will not be further
+ dealt with. A <b>Rationale</b> identifies the duplicated issue's
+ issue number. </p>
+
+ <p><b><a name="NAD">NAD</a></b> - The committee has reached consensus that
+ the issue is not a defect in the Standard.</p>
+
+ <p><b><a name="NAD Editorial">NAD Editorial</a></b> - The committee has reached consensus that
+ the issue can either be handled editorially, or is handled by a paper (usually
+ linked to in the rationale).</p>
+
+ <p><b><a name="NAD Future">NAD Future</a></b> - In addition to the regular
+ status, the committee believes that this issue should be revisited at the
+ next revision of the standard.</p>
+
+ <p><b><a name="Review">Review</a></b> - Exact wording of a
+ <b>Proposed Resolution</b> is now available for review on an issue
+ for which the committee previously reached informal consensus.</p>
+
+ <p><b><a name="Ready">Ready</a></b> - The committee has reached
+ consensus that the issue is a defect in the concepts proposal,
+ the <b>Proposed Resolution</b> is correct, and the issue is ready to
+ be integrated into the next concepts proposal.</p>
+
+ <p><b><a name="DR">DR</a></b> - (Defect Report) - The committee has
+ decided to accept the proposed resolution and the resolution is part
+ of a concepts proposal draft.</p>
+
+ <p><b>Pending</b> - This is a <i>status qualifier</i>. When prepended to
+ a status this indicates the issue has been
+ processed by the committee, and a decision has been made to move the issue to
+ the associated unqualified status. However for logistical reasons the indicated
+ outcome of the issue has not yet appeared in the latest working paper.
+
+ <p>Issues are always given the status of New when
+ they first appear on the issues list. They may progress to
+ Open or Review while the committee
+ is actively working on them. When the committee has reached consensus on
+ the disposition of an issue, the status will then change to
+ Dup, NAD, or
+ Ready as appropriate. Once
+ a Ready issue has made it into a draft of the concepts proposal, it
+ is given the status of Defect Report
+ ( DR). To streamline the
+ process for concepts (since it is still a proposal, not part of the
+ committee working paper), we will often skip the Review or Ready
+ status.
+ </p>
+
+</statuses>
+
+</issueslist>
Added: sandbox/committee/concepts/issues/issues/concepts-template.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/concepts-template.xml 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,22 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="???" status="New">
+<title>Your Title</title>
+<section><sref ref="00.0.0"/></section>
+<submitter>Your name</submitter>
+<date>29 Feb 1900</date>
+
+<discussion>
+<p>
+</p>
+</discussion>
+
+<resolution>
+<p>
+</p>
+</resolution>
+
+</issue>
Added: sandbox/committee/concepts/issues/issues/issue1.xml
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/issues/issue1.xml 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
+<!DOCTYPE issue SYSTEM "lwg-issue.dtd" [
+ <!ENTITY nbsp " ">
+] >
+
+<issue num="1" status="New">
+ <title>Naming and symmetry in EqualityComparable</title>
+ <section><sref ref="[concept.comparison]"/></section>
+ <submitter>LWG</submitter>
+ <date>27 Feb 2008</date>
+
+ <discussion>
+ <p>Another way to characterize the problem with EqualityComparable:
+ the name suggests that it's a concept with semantics, one that's
+ based on some kind of mathematical notion. At the Bloomington
+ discussion there was a different naming convention for concepts
+ that are purely syntactic; e.g. HasPlus, as opposed to "Addable",
+ for a concept that doesn't mean anything more than that a +
+ exists. The two-parameter EqualityComparable really falls into
+ that category, since all it really means is that there's some kind
+ of operation spelled == and we're not saying what it does. The
+ one-parameter version of EqualityComparable really is
+ EqualityComparable, though, and it does have mathematical axioms.</p>
+
+ <p>General issue: do we accept the naming convention that purely
+ syntactic concepts should be named Has*?</p>
+
+ <p>If we do have a two-parameter HasEquals, do we also want it to
+ provide != ? In other words, does it have any kind of semantic
+ coherency? </p>
+
+ <p>Can we make the two-parameter HasEquals symmetrical? That is:
+ if we say that there is a HasEquals for types T and U, and if t
+ and u are variables of the appropriate types, can we at least
+ say that t == u and u == t are both allowed and both mean the
+ same thing? Is there any way to write defaults in the concept
+ definition that won't ever give us an infinite loop?</p>
+ </discussion>
+</issue>
Added: sandbox/committee/concepts/issues/main.cpp
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/main.cpp 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,1498 @@
+#include <sstream>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <vector>
+#include <map>
+#include <set>
+#include <iterator>
+#include <stdexcept>
+#include <cctype>
+#include <cassert>
+#include <sys/types.h>
+#include <dirent.h>
+#include "date.h"
+
+namespace greg = gregorian;
+
+std::string insert_color("ins {background-color:#A0FFA0}\n");
+std::string delete_color("del {background-color:#FFA0A0}\n");
+
+std::string path;
+std::string issues_path;
+
+std::string
+remove_pending(std::string stat)
+{
+ typedef std::string::size_type size_type;
+ if (stat.find("Pending") == 0)
+ stat.erase(size_type(0), size_type(8));
+ return stat;
+}
+
+std::string
+find_file(std::string stat)
+{
+ stat = remove_pending(stat);
+ if (stat == "TC")
+ return "concepts-defects.html";
+ if (stat == "WP")
+ return "concepts-defects.html";
+ if (stat == "DR")
+ return "concepts-defects.html";
+ if (stat == "TRDec")
+ return "concepts-defects.html";
+ if (stat == "Dup")
+ return "concepts-closed.html";
+ if (stat == "NAD")
+ return "concepts-closed.html";
+ if (stat == "NAD Future")
+ return "concepts-closed.html";
+ if (stat == "NAD Editorial")
+ return "concepts-closed.html";
+ if (stat == "Ready")
+ return "concepts-active.html";
+ if (stat == "Tentatively Ready")
+ return "concepts-active.html";
+ if (stat == "Review")
+ return "concepts-active.html";
+ if (stat == "New")
+ return "concepts-active.html";
+ if (stat == "Open")
+ return "concepts-active.html";
+ throw std::runtime_error("unknown status " + stat);
+}
+
+bool
+is_active(const std::string& stat)
+{
+ return find_file(stat) == "concepts-active.html";
+}
+
+bool
+is_defect(const std::string& stat)
+{
+ return find_file(stat) == "concepts-defects.html";
+}
+
+bool
+is_closed(const std::string& stat)
+{
+ return find_file(stat) == "concepts-closed.html";
+}
+
+struct section_num
+{
+ std::string prefix;
+ std::vector<int> num;
+
+};
+
+std::istream&
+operator >> (std::istream& is, section_num& sn)
+{
+ sn.prefix.clear();
+ sn.num.clear();
+ ws(is);
+ if (is.peek() == 'T')
+ {
+ is.get();
+ if (is.peek() == 'R')
+ {
+ std::string w;
+ is >> w;
+ if (w == "R1")
+ sn.prefix = "TR1";
+ else if (w == "RDecimal")
+ sn.prefix = "TRDecimal";
+ else
+ throw std::runtime_error("section_num format error");
+ ws(is);
+ }
+ else
+ {
+ sn.num.push_back(100 + 'T' - 'A');
+ if (is.peek() != '.')
+ return is;
+ is.get();
+ }
+ }
+ while (true)
+ {
+ if (std::isdigit(is.peek()))
+ {
+ int n;
+ is >> n;
+ sn.num.push_back(n);
+ }
+ else
+ {
+ char c;
+ is >> c;
+ sn.num.push_back(100 + c - 'A');
+ }
+ if (is.peek() != '.')
+ break;
+ char dot;
+ is >> dot;
+ }
+ return is;
+}
+
+std::ostream&
+operator << (std::ostream& os, const section_num& sn)
+{
+ if (!sn.prefix.empty())
+ os << sn.prefix << " ";
+ if (sn.num.size() > 0)
+ {
+ if (sn.num.front() >= 100)
+ os << char(sn.num.front() - 100 + 'A');
+ else
+ os << sn.num.front();
+ for (unsigned i = 1; i < sn.num.size(); ++i)
+ {
+ os << '.';
+ if (sn.num[i] >= 100)
+ os << char(sn.num[i] - 100 + 'A');
+ else
+ os << sn.num[i];
+ }
+ }
+ return os;
+}
+
+bool
+operator<(const section_num& x, const section_num& y)
+{
+ if (x.prefix < y.prefix)
+ return true;
+ else if (y.prefix < x.prefix)
+ return false;
+ return x.num < y.num;
+}
+
+bool
+operator==(const section_num& x, const section_num& y)
+{
+ if (x.prefix != y.prefix)
+ return false;
+ return x.num == y.num;
+}
+
+bool
+operator!=(const section_num& x, const section_num& y)
+{
+ return !(x == y);
+}
+
+typedef std::string section_tag;
+
+struct issue
+{
+ int num;
+ std::string stat;
+ std::string title;
+ std::vector<section_tag> tags;
+ std::string submitter;
+ greg::date date;
+ std::vector<std::string> duplicates;
+ std::string text;
+ bool has_resolution;
+};
+
+typedef std::map<section_tag, section_num> SectionMap;
+SectionMap section_db;
+
+section_tag
+remove_square_brackets(const section_tag& tag)
+{
+ assert(tag.size() > 2);
+ assert(tag[0] == '[');
+ assert(tag[tag.size()-1] == ']');
+ return tag.substr(1, tag.size()-2);
+}
+
+struct sort_by_section
+{
+ bool operator()(const issue& x, const issue& y)
+ {
+ return section_db[x.tags[0]] < section_db[y.tags[0]];
+ }
+};
+
+struct sort_by_num
+{
+ bool operator()(const issue& x, const issue& y) const
+ {
+ return x.num < y.num;
+ }
+ bool operator()(const issue& x, int y) const
+ {
+ return x.num < y;
+ }
+ bool operator()(int x, const issue& y) const
+ {
+ return x < y.num;
+ }
+};
+
+struct sort_by_status
+{
+ bool operator()(const issue& x, const issue& y) const
+ {
+ if (is_active(x.stat) && !is_active(y.stat))
+ return true;
+ if (!is_active(x.stat) && is_active(y.stat))
+ return false;
+ return x.stat < y.stat;
+ }
+};
+
+struct sort_by_first_tag
+{
+ bool operator()(const issue& x, const issue& y) const
+ {
+ return x.tags[0] < y.tags[0];
+ }
+};
+
+struct equal_issue_num
+{
+ bool operator()(const issue& x, int y) {return x.num == y;}
+ bool operator()(int x, const issue& y) {return x == y.num;}
+};
+
+/*
+void display(const std::vector<issue>& issues)
+{
+ for (unsigned i = 0; i < issues.size(); ++i)
+ std::cout << issues[i];
+}
+*/
+SectionMap
+read_section_db()
+{
+ SectionMap section_db;
+ std::ifstream infile((path + "section.data").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Can't open section.data\n");
+ while (infile)
+ {
+ ws(infile);
+ std::string line;
+ getline(infile, line);
+ if (!line.empty())
+ {
+ assert(line[line.size()-1] == ']');
+ unsigned p = line.rfind('[');
+ assert(p != std::string::npos);
+ section_tag tag = line.substr(p);
+ assert(tag.size() > 2);
+ assert(tag[0] == '[');
+ assert(tag[tag.size()-1] == ']');
+ line.erase(p-1);
+ section_num num;
+ if (tag.find("[trdec.") != std::string::npos)
+ {
+ num.prefix = "TRDecimal";
+ line.erase(0, 10);
+ }
+ else if (tag.find("[tr.") != std::string::npos)
+ {
+ num.prefix = "TR1";
+ line.erase(0, 4);
+ }
+ std::istringstream temp(line);
+ if (!std::isdigit(line[0]))
+ {
+ char c;
+ temp >> c;
+ num.num.push_back(100 + c - 'A');
+ temp >> c;
+ }
+ while (temp)
+ {
+ int n;
+ temp >> n;
+ if (!temp.fail())
+ {
+ num.num.push_back(n);
+ char dot;
+ temp >> dot;
+ }
+ }
+ section_db[tag] = num;
+ }
+ }
+ return section_db;
+}
+
+void
+check_against_index(const SectionMap& section_db)
+{
+ SectionMap::const_iterator s_db = section_db.begin();
+ SectionMap::const_iterator e_db = section_db.end();
+ for (SectionMap::const_iterator s_db = section_db.begin(), e_db = section_db.end(); s_db != e_db; ++s_db)
+ {
+ std::string temp = s_db->first;
+ temp.erase(temp.end()-1);
+ temp.erase(temp.begin());
+ std::cout << temp << ' ' << s_db->second << '\n';
+ }
+}
+
+std::string
+get_revision()
+{
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find("revision=\"");
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find revision in concepts-issues.xml");
+ i += sizeof("revision=\"") - 1;
+ unsigned j = s.find('\"', i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse revision in concepts-issues.xml");
+ return s.substr(i, j-i);
+}
+
+std::string
+get_maintainer()
+{
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find("maintainer=\"");
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find maintainer in concepts-issues.xml");
+ i += sizeof("maintainer=\"") - 1;
+ unsigned j = s.find('\"', i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse maintainer in concepts-issues.xml");
+ std::string r = s.substr(i, j-i);
+ std::size_t m = r.find("<");
+ if (m == std::string::npos)
+ throw std::runtime_error("Unable to parse maintainer email address in concepts-issues.xml");
+ m += sizeof("<") - 1;
+ std::size_t me = r.find(">", m);
+ if (me == std::string::npos)
+ throw std::runtime_error("Unable to parse maintainer email address in concepts-issues.xml");
+ std::string email = r.substr(m, me-m);
+ // < howard.hinnant_at_[hidden] >
+ // <<a href="mailto:howard.hinnant_at_[hidden]">howard.hinnant_at_[hidden]</a>>
+ r.replace(m, me-m, "<a href=\"mailto:" + email + "\">" + email + "</a>");
+ return r;
+}
+
+std::string
+get_date()
+{
+#if 1
+ greg::date today;
+ std::ostringstream date;
+ date << today.year() << '-';
+ if (today.month() < 10)
+ date << '0';
+ date << today.month() << '-';
+ if (today.day() < 10)
+ date << '0';
+ date << today.day();
+ return date.str();
+#else
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find("date=\"");
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find date in concepts-issues.xml");
+ i += sizeof("date=\"") - 1;
+ unsigned j = s.find('\"', i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse date in concepts-issues.xml");
+ return s.substr(i, j-i);
+#endif
+}
+
+std::string
+get_doc_number(std::string doc)
+{
+ if (doc == "active")
+ doc = "active_docno=\"";
+ else if (doc == "defect")
+ doc = "defect_docno=\"";
+ else if (doc == "closed")
+ doc = "closed_docno=\"";
+ else
+ throw std::runtime_error("unknown argument to get_doc_number: " + doc);
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find(doc);
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find docno in concepts-issues.xml");
+ i += doc.size();
+ unsigned j = s.find('\"', i+1);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse docno in concepts-issues.xml");
+ return s.substr(i, j-i);
+}
+
+std::string
+get_intro(std::string doc)
+{
+ if (doc == "active")
+ doc = "<intro list=\"Active\">";
+ else if (doc == "defect")
+ doc = "<intro list=\"Defects\">";
+ else if (doc == "closed")
+ doc = "<intro list=\"Closed\">";
+ else
+ throw std::runtime_error("unknown argument to intro: " + doc);
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find(doc);
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find intro in concepts-issues.xml");
+ i += doc.size();
+ unsigned j = s.find("</intro>", i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse intro in concepts-issues.xml");
+ return s.substr(i, j-i);
+}
+
+void format(std::vector<issue>& issues, issue& is)
+{
+ std::string& s = is.text;
+ int issue_num = is.num;
+ std::vector<std::string> tag_stack;
+ std::ostringstream er;
+ for (unsigned i = 0; i < s.size(); ++i)
+ {
+ if (s[i] == '<')
+ {
+ unsigned j = s.find('>', i);
+ if (j == std::string::npos)
+ {
+ er.clear();
+ er.str("");
+ er << "missing '>' in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ std::string tag;
+ {
+ std::istringstream iword(s.substr(i+1, j-i-1));
+ iword >> tag;
+ }
+ if (tag.empty())
+ {
+ er.clear();
+ er.str("");
+ er << "unexpected <> in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ if (tag[0] == '/') // closing tag
+ {
+ tag.erase(tag.begin());
+ if (tag == "issue" || tag == "revision")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ return;
+ }
+ if (tag_stack.empty() || tag != tag_stack.back())
+ {
+ er.clear();
+ er.str("");
+ er << "mismatched tags in issue " << issue_num;
+ if (tag_stack.empty())
+ er << ". Had no open tag.";
+ else
+ er << ". Open tag was " << tag_stack.back() << ".";
+ er << " Closing tag was " << tag;
+ throw std::runtime_error(er.str());
+ }
+ tag_stack.pop_back();
+ if (tag == "discussion")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ }
+ else if (tag == "resolution")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ }
+ else if (tag == "rationale")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ }
+ else if (tag == "duplicate")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ }
+ else if (tag == "note")
+ {
+ s.replace(i, j-i + 1, "]</i></p>\n");
+ i += 9;
+ }
+ else
+ i = j;
+ continue;
+ }
+ if (s[j-1] == '/') // self-contained tag: sref, iref
+ {
+ if (tag == "sref")
+ {
+ std::string r;
+ unsigned k = s.find('\"', i+5);
+ if (k >= j)
+ {
+ er.clear();
+ er.str("");
+ er << "missing '\"' in sref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ unsigned l = s.find('\"', k+1);
+ if (l >= j)
+ {
+ er.clear();
+ er.str("");
+ er << "missing '\"' in sref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ ++k;
+ r = s.substr(k, l-k);
+ {
+ std::ostringstream t;
+ t << section_db[r] << ' ';
+ r.insert(0, t.str());
+ }
+ j -= i - 1;
+ s.replace(i, j, r);
+ i += r.size() - 1;
+ continue;
+ }
+ else if (tag == "iref")
+ {
+ std::string r;
+ unsigned k = s.find('\"', i+5);
+ if (k >= j)
+ {
+ er.clear();
+ er.str("");
+ er << "missing '\"' in iref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ unsigned l = s.find('\"', k+1);
+ if (l >= j)
+ {
+ er.clear();
+ er.str("");
+ er << "missing '\"' in iref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ ++k;
+ r = s.substr(k, l-k);
+ std::istringstream temp(r);
+ int num;
+ temp >> num;
+ if (temp.fail())
+ {
+ er.clear();
+ er.str("");
+ er << "bad number in iref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ std::vector<issue>::iterator n = std::lower_bound(issues.begin(), issues.end(), num, sort_by_num());
+ if (n->num != num)
+ {
+ er.clear();
+ er.str("");
+ er << "couldn't find number in iref in issue " << issue_num;
+ throw std::runtime_error(er.str());
+ }
+ if (!tag_stack.empty() && tag_stack.back() == "duplicate")
+ {
+ std::ostringstream temp;
+ temp << is.num;
+ std::string d = "<a href=\"";
+ d += find_file(is.stat);
+ d += '#';
+ d += temp.str();
+ d += "\">";
+ d += temp.str();
+ d += "</a>";
+ n->duplicates.push_back(d);
+ temp.str("");
+ temp << n->num;
+ d = "<a href=\"";
+ d += find_file(n->stat);
+ d += '#';
+ d += temp.str();
+ d += "\">";
+ d += temp.str();
+ d += "</a>";
+ is.duplicates.push_back(d);
+ r.clear();
+ }
+ else
+ {
+ r = "<a href=\"";
+ r += find_file(n->stat);
+ r += '#';
+ std::string ns;
+ {
+ std::ostringstream t;
+ t << num;
+ ns = t.str();
+ }
+ r += ns;
+ r += "\">";
+ r += ns;
+ r += "</a>";
+ }
+ j -= i - 1;
+ s.replace(i, j, r);
+ i += r.size() - 1;
+ continue;
+ }
+ i = j;
+ continue; // don't worry about this <tag/>
+ }
+ tag_stack.push_back(tag);
+ if (tag == "discussion")
+ {
+ s.replace(i, j-i + 1, "<p><b>Discussion:</b></p>");
+ i += 24;
+ }
+ else if (tag == "resolution")
+ {
+ s.replace(i, j-i + 1, "<p><b>Proposed resolution:</b></p>");
+ i += 33;
+ }
+ else if (tag == "rationale")
+ {
+ s.replace(i, j-i + 1, "<p><b>Rationale:</b></p>");
+ i += 23;
+ }
+ else if (tag == "duplicate")
+ {
+ s.erase(i, j-i + 1);
+ --i;
+ }
+ else if (tag == "note")
+ {
+ s.replace(i, j-i + 1, "<p><i>[");
+ i += 6;
+ }
+ else if (tag == "!--")
+ {
+ tag_stack.pop_back();
+ j = s.find("-->", i);
+ j += 3;
+ s.erase(i, j-i);
+ --i;
+ }
+ else
+ i = j;
+ }
+ }
+}
+
+std::string
+get_revisions(std::vector<issue>& issues)
+{
+ std::string r = "<ul>\n";
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find("<revision_history>");
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find <revision_history> in concepts-issues.xml");
+ i += sizeof("<revision_history>") - 1;
+ unsigned j = s.find("</revision_history>", i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to find </revision_history> in concepts-issues.xml");
+ s = s.substr(i, j-i);
+ j = 0;
+ while (true)
+ {
+ i = s.find("<revision tag=\"", j);
+ if (i == std::string::npos)
+ break;
+ i += sizeof("<revision tag=\"") - 1;
+ j = s.find('\"', i);
+ std::string rv = s.substr(i, j-i);
+ i = j+2;
+ j = s.find("</revision>", i);
+ issue is;
+ is.text = s.substr(i, j-i);
+ format(issues, is);
+ r += "<li>";
+ r += rv + ": ";
+ r += is.text;
+ r += "</li>\n";
+ }
+ r += "</ul>\n";
+ return r;
+}
+
+std::string
+get_statuses()
+{
+ std::ifstream infile((issues_path + "concepts-issues.xml").c_str());
+ if (!infile.is_open())
+ throw std::runtime_error("Unable to open concepts-issues.xml");
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string s(first, last);
+ unsigned i = s.find("<statuses>");
+ if (i == std::string::npos)
+ throw std::runtime_error("Unable to find statuses in concepts-issues.xml");
+ i += sizeof("<statuses>") - 1;
+ unsigned j = s.find("</statuses>", i);
+ if (j == std::string::npos)
+ throw std::runtime_error("Unable to parse statuses in concepts-issues.xml");
+ return s.substr(i, j-i);
+}
+
+void
+print_table(std::ostream& out, std::vector<issue>::const_iterator i, std::vector<issue>::const_iterator e)
+{
+ std::string prev_tag;
+ for (; i != e; ++i)
+ {
+ out << "<tr>\n";
+
+ // Number
+ out << "<td align=\"right\"><a href=\"";
+ out << find_file(i->stat);
+ out << '#';
+ out << i->num;
+ out << "\">";
+ out << i->num;
+ out << "</a></td>\n";
+
+ // Status
+ out << "<td align=\"left\"><a href=\"concepts-active.html#";
+ out << remove_pending(i->stat);
+ out << "\">";
+ out << i->stat;
+ out << "</a></td>\n";
+
+ // Section
+ out << "<td align=\"left\">";
+ out << section_db[i->tags[0]] << " " << i->tags[0];
+ if (i->tags[0] != prev_tag)
+ {
+ prev_tag = i->tags[0];
+ out << "<a name=\"" << remove_square_brackets(prev_tag) << "\"</a>";
+ }
+ out << "</td>\n";
+
+ // Title
+ out << "<td align=\"left\">";
+ out << i->title;
+ out << "</td>\n";
+
+ // Has Proposed Resolution
+ out << "<td align=\"center\">";
+ if (i->has_resolution)
+ out << "Yes";
+ else
+ out << "<font color=\"red\">No</font>";
+ out << "</td>\n";
+
+ // Duplicates
+ out << "<td align=\"left\">";
+ if (!i->duplicates.empty())
+ {
+ out << i->duplicates[0];
+ for (unsigned j = 1; j < i->duplicates.size(); ++j)
+ out << ", " << i->duplicates[j];
+ }
+ out << "</td>\n";
+
+ out << "</tr>\n";
+ }
+ out << "</table>\n";
+}
+
+void print_file_header(std::ostream& out, const std::string& title)
+{
+ out << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n";
+ out << " \"http://www.w3.org/TR/html4/strict.dtd\">\n";
+ out << "<html>\n";
+ out << "<head>\n";
+ out << "<title>" << title << "</title>\n";
+ out << "<style type=\"text/css\">\n";
+ out << "p {text-align:justify}\n";
+ out << "li {text-align:justify}\n";
+ out << insert_color;
+ out << delete_color;
+ out << "</style>\n";
+ out << "</head>\n";
+ out << "<body>\n";
+}
+
+void print_file_trailer(std::ostream& out)
+{
+ out << "</body>\n";
+ out << "</html>\n";
+}
+
+void make_sort_by_num(std::vector<issue>& issues)
+{
+ std::ofstream out((path + "concepts-toc.html").c_str());
+ out << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
+ out << " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+ out << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
+ out << "<head>\n";
+ out << "<title>Concepts Issues List Table of Contents</title>\n";
+ out << "<style type=\"text/css\">\n";
+ out << "p {text-align:justify}\n";
+ out << "li {text-align:justify}\n";
+ out << insert_color;
+ out << delete_color;
+ out << "</style>\n";
+ out << "</head>\n";
+ out << "<body>\n";
+
+ out << "<h1>C++ Concepts Issues List (Revision " << get_revision() << ")</h1>\n";
+ out << "<h1>Table of Contents</h1>\n";
+ out << "<p>Reference ISO/IEC IS 14882:1998(E)</p>\n";
+ out << "<p>This document is the Table of Contents for the <a href=\"concepts-active.html\">Concepts Active Issues List</a>,"
+ " <a href=\"concepts-defects.html\">Concepts Defect Reports List</a>, and <a href=\"concepts-closed.html\">Concepts Closed Issues List</a>.</p>\n";
+ out << "<h2>Table of Contents</h2>\n";
+
+ out << "<table border=\"1\" cellpadding=\"4\">\n";
+ out << "<tr>\n";
+ out << "<td align=\"center\"><b>Issue</b></td>\n";
+ out << "<td align=\"center\"><a href=\"concepts-status.html\"><b>Status</b></a></td>\n";
+ out << "<td align=\"center\"><a href=\"concepts-index.html\"><b>Section</b></a></td>\n";
+ out << "<td align=\"center\"><b>Title</b></td>\n";
+ out << "<td align=\"center\"><b>Proposed Resolution</b></td>\n";
+ out << "<td align=\"center\"><b>Duplicates</b></td></tr>\n";
+
+ sort(issues.begin(), issues.end(), sort_by_num());
+ print_table(out, issues.begin(), issues.end());
+
+ out << "</body>\n";
+ out << "</html>\n";
+
+}
+
+void make_sort_by_status(std::vector<issue>& issues)
+{
+ std::ofstream out((path + "concepts-status.html").c_str());
+ out << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
+ out << " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+ out << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
+ out << "<head>\n";
+ out << "<title>Concepts Issues List Table of Contents</title>\n";
+ out << "<style type=\"text/css\">\n";
+ out << "p {text-align:justify}\n";
+ out << "li {text-align:justify}\n";
+ out << insert_color;
+ out << delete_color;
+ out << "</style>\n";
+ out << "</head>\n";
+ out << "<body>\n";
+
+ out << "<h1>C++ Concepts Issues List (Revision " << get_revision() << ")</h1>\n";
+ out << "<h1>Table of Contents</h1>\n";
+ out << "<p>Reference ISO/IEC IS 14882:1998(E)</p>\n";
+ out << "<p>This document is the Table of Contents for the <a href=\"concepts-active.html\">Concepts Active Issues List</a>,"
+ " <a href=\"concepts-defects.html\">Concepts Defect Reports List</a>, and <a href=\"concepts-closed.html\">Concepts Closed Issues List</a>.</p>\n";
+
+ out << "<h2>Index by Status</h2>\n";
+
+ sort(issues.begin(), issues.end(), sort_by_num());
+ stable_sort(issues.begin(), issues.end(), sort_by_section());
+ stable_sort(issues.begin(), issues.end(), sort_by_status());
+
+ for (std::vector<issue>::const_iterator i = issues.begin(), e = issues.end(); i != e;)
+ {
+
+ std::string current_status = i->stat;
+ std::vector<issue>::const_iterator j = i;
+ for (; j != e; ++j)
+ {
+ if (j->stat != current_status)
+ break;
+ }
+ out << "<h2><a name=\"" << current_status << "\"</a>" << current_status << " (" << (j-i) << " issues)</h2>\n";
+
+ out << "<table border=\"1\" cellpadding=\"4\">\n";
+ out << "<tr>\n";
+ out << "<td align=\"center\"><a href=\"concepts-toc.html\"><b>Issue</b></a></td>\n";
+ out << "<td align=\"center\"><b>Status</b></td>\n";
+ out << "<td align=\"center\"><a href=\"concepts-index.html\"><b>Section</b></a></td>\n";
+ out << "<td align=\"center\"><b>Title</b></td>\n";
+ out << "<td align=\"center\"><b>Proposed Resolution</b></td>\n";
+ out << "<td align=\"center\"><b>Duplicates</b></td></tr>\n";
+
+ print_table(out, i, j);
+ i = j;
+ }
+
+ out << "</body>\n";
+ out << "</html>\n";
+
+}
+
+std::string
+major_section(const section_num& sn)
+{
+ std::ostringstream out;
+ std::string prefix = sn.prefix;
+ if (!prefix.empty())
+ out << prefix << " ";
+ if (sn.num[0] < 100)
+ out << sn.num[0];
+ else
+ out << char(sn.num[0] - 100 + 'A');
+ return out.str();
+}
+
+struct sort_by_mjr_section
+{
+ bool operator()(const issue& x, const issue& y) const
+ {
+ return section_db[x.tags[0]].num[0] < section_db[y.tags[0]].num[0];
+ }
+};
+
+void make_sort_by_section(std::vector<issue>& issues, bool active_only = false)
+{
+ std::string filename;
+ if (active_only)
+ filename = path + "concepts-index-open.html";
+ else
+ filename = path + "concepts-index.html";
+ std::ofstream out(filename.c_str());
+ out << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
+ out << " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
+ out << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n";
+ out << "<head>\n";
+ out << "<title>Concepts Issues List Table of Contents</title>\n";
+ out << "<style type=\"text/css\">\n";
+ out << "p {text-align:justify}\n";
+ out << "li {text-align:justify}\n";
+ out << insert_color;
+ out << delete_color;
+ out << "</style>\n";
+ out << "</head>\n";
+ out << "<body>\n";
+
+ out << "<h1>C++ Concepts Issues List (Revision " << get_revision() << ")</h1>\n";
+ out << "<h1>Table of Contents</h1>\n";
+ out << "<p>Reference ISO/IEC IS 14882:1998(E)</p>\n";
+ out << "<p>This document is the Table of Contents for the <a href=\"concepts-active.html\">Concepts Active Issues List</a>,"
+ " <a href=\"concepts-defects.html\">Concepts Defect Reports List</a>, and <a href=\"concepts-closed.html\">Concepts Closed Issues List</a>.</p>\n";
+ out << "<h2>Index by Section";
+ if (active_only)
+ out << " (active issues only)";
+ out << "</h2>\n";
+ if (active_only)
+ out << "<p><a href=\"concepts-index.html\">(view all issues)</a></p>\n";
+ else
+ out << "<p><a href=\"concepts-index-open.html\">(view only open issues)</a></p>\n";
+ sort(issues.begin(), issues.end(), sort_by_num());
+ stable_sort(issues.begin(), issues.end(), sort_by_status());
+ std::vector<issue>::iterator e = issues.end();
+ if (active_only)
+ {
+ std::vector<issue>::iterator j;
+ for (j = issues.begin(); j != e; ++j)
+ {
+ if (!is_active(j->stat))
+ break;
+ }
+ e = j;
+ }
+ stable_sort(issues.begin(), e, sort_by_section());
+ std::set<issue, sort_by_mjr_section> mjr_section_open;
+ for (std::vector<issue>::const_iterator i = issues.begin(), e = issues.end(); i != e; ++i)
+ if (is_active(i->stat))
+ mjr_section_open.insert(*i);
+
+ for (std::vector<issue>::const_iterator i = issues.begin(); i != e;)
+ {
+ int current_num = section_db[i->tags[0]].num[0];
+ std::vector<issue>::const_iterator j = i;
+ for (; j != e; ++j)
+ {
+ if (section_db[j->tags[0]].num[0] != current_num)
+ break;
+ }
+ std::string msn = major_section(section_db[i->tags[0]]);
+ out << "<h2><a name=\"Section " << msn << "\"></a>" << "Section " << msn;
+ out << " (" << (j-i) << " issues)</h2>\n";
+ out << "<p>";
+ if (active_only)
+ out << "<a href=\"concepts-index.html#Section " << msn << "\">(view all issues)</a>";
+ else if (mjr_section_open.count(*i) > 0)
+ out << "<a href=\"concepts-index-open.html#Section " << msn << "\">(view only open issues)</a>";
+ out << "</p>\n";
+
+ out << "<table border=\"1\" cellpadding=\"4\">\n";
+ out << "<tr>\n";
+ out << "<td align=\"center\"><a href=\"concepts-toc.html\"><b>Issue</b></a></td>\n";
+ out << "<td align=\"center\"><a href=\"concepts-status.html\"><b>Status</b></a></td>\n";
+ out << "<td align=\"center\"><b>Section</b></td>\n";
+ out << "<td align=\"center\"><b>Title</b></td>\n";
+ out << "<td align=\"center\"><b>Proposed Resolution</b></td>\n";
+ out << "<td align=\"center\"><b>Duplicates</b></td></tr>\n";
+
+ print_table(out, i, j);
+ i = j;
+ }
+
+ out << "</body>\n";
+ out << "</html>\n";
+
+}
+
+struct if_active
+{
+ bool operator()(const issue& i) {return is_active(i.stat);}
+};
+
+template <class Pred>
+void
+print_issues(std::ostream& out, const std::vector<issue>& issues, Pred pred)
+{
+ std::multiset<issue, sort_by_first_tag> all_issues(issues.begin(), issues.end());
+ std::multiset<issue, sort_by_first_tag> active_issues;
+ for (std::vector<issue>::const_iterator i = issues.begin(), e = issues.end(); i != e; ++i)
+ {
+ if (if_active()(*i))
+ active_issues.insert(*i);
+ }
+ std::multiset<issue, sort_by_status> issues_by_status(issues.begin(), issues.end());
+ for (std::vector<issue>::const_iterator i = issues.begin(), e = issues.end(); i != e; ++i)
+ {
+ if (pred(*i))
+ {
+ out << "<hr>\n";
+
+ // Number and title
+ out << "<h3>";
+ out << "<a name=\"";
+ out << i->num;
+ out << "\"></a>";
+ out << i->num << ". " << i->title << "</h3>\n";
+
+ // Section, Status, Submitter, Date
+ out << "<p><b>Section:</b> ";
+ out << section_db[i->tags[0]] << " " << i->tags[0];
+ for (unsigned k = 1; k < i->tags.size(); ++k)
+ out << ", " << section_db[i->tags[k]] << " " << i->tags[k];
+ out << " <b>Status:</b> <a href=\"concepts-active.html#" << remove_pending(i->stat) << "\">" << i->stat << "</a>\n";
+ out << " <b>Submitter:</b> " << i->submitter;
+ out << " <b>Date:</b> " << i->date.year() << '-';
+ if (i->date.month() < 10)
+ out << '0';
+ out << i->date.month() << '-';
+ if (i->date.day() < 10)
+ out << '0';
+ out << i->date.day() << "</p>\n";
+
+ // view active issues in []
+ if (active_issues.count(*i) > 1)
+ out << "<p><b>View other</b> " << "<a href=\"" << "concepts-index-open.html#" << remove_square_brackets(i->tags[0])
+ << "\">" << "active issues</a> in " << i->tags[0] << ".</p>\n";
+
+ // view all issues in []
+ if (all_issues.count(*i) > 1)
+ out << "<p><b>View all other</b> " << "<a href=\"" << "concepts-index.html#" << remove_square_brackets(i->tags[0])
+ << "\">" << "issues</a> in " << i->tags[0] << ".</p>\n";
+
+ // view all issues with same status
+ if (issues_by_status.count(*i) > 1)
+ {
+ out << "<p><b>View all issues with</b> "
+ << "<a href=\"concepts-status.html#" << i->stat << "\">" << i->stat << "</a>"
+ << " status.</p>\n";
+ }
+
+ // duplicates
+ if (!i->duplicates.empty())
+ {
+ out << "<p><b>Duplicate of:</b> ";
+ out << i->duplicates[0];
+ for (unsigned j = 1; j < i->duplicates.size(); ++j)
+ out << ", " << i->duplicates[j];
+ out << "</p>\n";
+ }
+
+ // text
+ out << i->text << "\n\n";
+ }
+ }
+}
+
+void print_paper_heading(std::ostream& out, const std::string& paper)
+{
+ out << "<table>\n";
+ out << "<tr>\n";
+ out << "<td align=\"left\">Doc. no.</td>\n";
+ out << "<td align=\"left\">" << get_doc_number(paper) << "</td>\n";
+ out << "</tr>\n";
+ out << "<tr>\n";
+ out << "<td align=\"left\">Date:</td>\n";
+ out << "<td align=\"left\">" << get_date() << "</td>\n";
+ out << "</tr>\n";
+ out << "<tr>\n";
+ out << "<td align=\"left\">Project:</td>\n";
+ out << "<td align=\"left\">Programming Language C++</td>\n";
+ out << "</tr>\n";
+ out << "<tr>\n";
+ out << "<td align=\"left\">Reply to:</td>\n";
+ out << "<td align=\"left\">" << get_maintainer() << "</td>\n";
+ out << "</tr>\n";
+ out << "</table>\n";
+ out << "<h1>";
+ if (paper == "active")
+ out << "C++ Concepts Active Issues List (Revision ";
+ else if (paper == "defect")
+ out << "C++ Concepts Defect Report List (Revision ";
+ else if (paper == "closed")
+ out << "C++ Concepts Closed Issues List (Revision ";
+ out << get_revision() << ")</h1>\n";
+}
+
+void make_active(std::vector<issue>& issues)
+{
+ sort(issues.begin(), issues.end(), sort_by_num());
+ std::ofstream out((path + "concepts-active.html").c_str());
+ print_file_header(out, "C++ Concepts Active Issues List");
+ print_paper_heading(out, "active");
+ out << get_intro("active") << '\n';
+ out << "<h2>Revision History</h2>\n" << get_revisions(issues) << '\n';
+ out << "<h2><a name=\"Status\"></a>Issue Status</h2>\n" << get_statuses() << '\n';
+ out << "<h2>Active Issues</h2>\n";
+ print_issues(out, issues, if_active());
+ print_file_trailer(out);
+}
+
+struct if_defect
+{
+ bool operator()(const issue& i) {return is_defect(i.stat);}
+};
+
+void make_defect(std::vector<issue>& issues)
+{
+ sort(issues.begin(), issues.end(), sort_by_num());
+ std::ofstream out((path + "concepts-defects.html").c_str());
+ print_file_header(out, "C++ Concepts Defect Report List");
+ print_paper_heading(out, "defect");
+ out << get_intro("defect") << '\n';
+ out << "<h2>Revision History</h2>\n" << get_revisions(issues) << '\n';
+ out << "<h2>Defect Reports</h2>\n";
+ print_issues(out, issues, if_defect());
+ print_file_trailer(out);
+}
+
+struct if_closed
+{
+ bool operator()(const issue& i) {return is_closed(i.stat);}
+};
+
+void make_closed(std::vector<issue>& issues)
+{
+ sort(issues.begin(), issues.end(), sort_by_num());
+ std::ofstream out((path + "concepts-closed.html").c_str());
+ print_file_header(out, "C++ Concepts Closed Issues List");
+ print_paper_heading(out, "closed");
+ out << get_intro("closed") << '\n';
+ out << "<h2>Revision History</h2>\n" << get_revisions(issues) << '\n';
+ out << "<h2>Closed Issues</h2>\n";
+ print_issues(out, issues, if_closed());
+ print_file_trailer(out);
+}
+
+int parse_month(const std::string& m)
+{
+ if (m == "Jan")
+ return 1;
+ if (m == "Feb")
+ return 2;
+ if (m == "Mar")
+ return 3;
+ if (m == "Apr")
+ return 4;
+ if (m == "May")
+ return 5;
+ if (m == "Jun")
+ return 6;
+ if (m == "Jul")
+ return 7;
+ if (m == "Aug")
+ return 8;
+ if (m == "Sep")
+ return 9;
+ if (m == "Oct")
+ return 10;
+ if (m == "Nov")
+ return 11;
+ if (m == "Dec")
+ return 12;
+ throw std::runtime_error("unknown month");
+}
+
+int
+main(int argc, char* argv[])
+{
+ if (argc == 2)
+ path = argv[1];
+ else
+ {
+ char cwd[1024];
+ if (getcwd(cwd, sizeof(cwd)) == 0)
+ {
+ std::cout << "unable to getcwd\n";
+ return 1;
+ }
+ path = cwd;
+ }
+ if (path[path.size()-1] != '/')
+ path += '/';
+ issues_path = path + "issues/";
+ section_db = read_section_db();
+// check_against_index(section_db);
+ std::vector<issue> issues;
+/* for (unsigned i = 0; i < sizeof(issue_files)/sizeof(issue_files[0]); ++i)
+ {
+ std::ifstream infile((issues_path + issue_files[i]).c_str());
+ if (!infile.is_open())
+ {
+ std::cout << "Unable to open file " << (issues_path + issue_files[i]) << '\n';
+ return 1;
+ }
+ std::istreambuf_iterator<char> first(infile), last;
+ std::string f(first, last);
+ infile.close();
+ unsigned l2 = 0;
+ while (true)
+ {
+ unsigned k2 = f.find("<sref", l2);
+ if (k2 == std::string::npos)
+ break;
+ l2 = f.find("/>", k2) + 2;
+ std::string r = f.substr(k2, l2-k2);
+ std::istringstream temp(r);
+ std::string w;
+ temp >> w; // <sref
+ ws(temp);
+ char c;
+ temp >> c; // r
+ temp >> c; // e
+ temp >> c; // f
+ temp >> c; // =
+ temp >> c; // "
+ section_num sn;
+ temp >> sn;
+ if (section_db.find(sn) == section_db.end())
+ throw std::runtime_error(issue_files[i] + " invalid section");
+ r = "<sref ref=\"" + section_db[sn] + "\"/>";
+ f.replace(k2, l2-k2, r);
+ l2 = k2 + r.size();
+ }
+ std::ofstream out((issues_path + issue_files[i]).c_str());
+ out << f;
+*/
+ DIR* dir = opendir(issues_path.c_str());
+ if (dir == 0)
+ {
+ std::cout << "Unable to open issues dir\n";
+ return 1;
+ }
+ for (dirent* entry = readdir(dir); entry != 0; entry = readdir(dir))
+ {
+ std::string issue_file = entry->d_name;
+ if (issue_file.find("issue") != 0)
+ continue;
+ std::ifstream infile((issues_path + issue_file).c_str());
+ if (!infile.is_open())
+ {
+ std::cout << "Unable to open file " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ std::istreambuf_iterator<char> first(infile), last;
+ issues.push_back(issue());
+ std::string& tx = issues.back().text;
+ tx.assign(first, last);
+ infile.close();
+
+ // Get issue number
+ issue& is = issues.back();
+ unsigned k = tx.find("<issue num=\"");
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue number in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("<issue num=\"") - 1;
+ unsigned l = tx.find('\"', k);
+ std::istringstream temp(tx.substr(k, l-k));
+ temp >> is.num;
+
+ // Get issue status
+ k = tx.find("status=\"", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue status in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("status=\"") - 1;
+ l = tx.find('\"', k);
+ is.stat = tx.substr(k, l-k);
+
+ // Get issue title
+ k = tx.find("<title>", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue title in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("<title>") - 1;
+ l = tx.find("</title>", k);
+ is.title = tx.substr(k, l-k);
+
+ // Get issue sections
+ k = tx.find("<section>", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue section in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("<section>") - 1;
+ l = tx.find("</section>", k);
+ while (k < l)
+ {
+ k = tx.find('\"', k);
+ if (k >= l)
+ break;
+ unsigned k2 = tx.find('\"', k+1);
+ if (k2 >= l)
+ {
+ std::cout << "Unable to find issue section in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ ++k;
+ is.tags.push_back(tx.substr(k, k2-k));
+ if (section_db.find(is.tags.back()) == section_db.end())
+ {
+ std::cout << "Unable to find issue section: " << is.tags.back() << " in database" << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k = k2;
+ ++k;
+ }
+ if (is.tags.empty())
+ {
+ std::cout << "Unable to find issue section in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+
+ // Get submitter
+ k = tx.find("<submitter>", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue submitter in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("<submitter>") - 1;
+ l = tx.find("</submitter>", k);
+ is.submitter = tx.substr(k, l-k);
+
+ // Get date
+ k = tx.find("<date>", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue date in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ k += sizeof("<date>") - 1;
+ l = tx.find("</date>", k);
+ temp.clear();
+ temp.str(tx.substr(k, l-k));
+ {
+ int d;
+ temp >> d;
+ if (temp.fail())
+ throw std::runtime_error("date format error in " + issue_file);
+ std::string month;
+ temp >> month;
+ int m;
+ try
+ {
+ m = parse_month(month);
+ int y = 0;
+ temp >> y;
+ is.date = greg::month(m)/greg::day(d)/y;
+ }
+ catch (std::exception& e)
+ {
+ throw std::runtime_error(e.what() + std::string(" in ") + issue_file);
+ }
+ }
+
+ // Trim text to <discussion>
+ k = tx.find("<discussion>", l);
+ if (k == std::string::npos)
+ {
+ std::cout << "Unable to find issue discussion in " << (issues_path + issue_file) << '\n';
+ return 1;
+ }
+ tx.erase(0, k);
+
+ // Find out if issue has a proposed resolution
+ if (is_active(is.stat))
+ {
+ unsigned k2 = tx.find("<resolution>", 0);
+ if (k2 == std::string::npos)
+ {
+ is.has_resolution = false;
+ }
+ else
+ {
+ k2 += sizeof("<resolution>") - 1;
+ unsigned l2 = tx.find("</resolution>", k2);
+ is.has_resolution = l2 - k2 > 15;
+ }
+ }
+ else
+ is.has_resolution = true;
+ }
+ closedir(dir);
+ sort(issues.begin(), issues.end(), sort_by_num());
+ for (std::vector<issue>::iterator i = issues.begin(), e = issues.end(); i != e; ++i)
+ format(issues, *i);
+ make_sort_by_num(issues);
+ make_sort_by_status(issues);
+ make_sort_by_section(issues);
+ make_sort_by_section(issues, true);
+ make_active(issues);
+ make_defect(issues);
+ make_closed(issues);
+ std::cout << "Made all documents\n";
+}
Added: sandbox/committee/concepts/issues/section.data
==============================================================================
--- (empty file)
+++ sandbox/committee/concepts/issues/section.data 2008-03-03 11:27:23 EST (Mon, 03 Mar 2008)
@@ -0,0 +1,1781 @@
+1 [intro]
+ 1.1 [intro.scope]
+ 1.2 [intro.refs]
+ 1.3 [intro.defs]
+ 1.3.1 [defns.argument]
+ 1.3.2 [defns.cond.supp]
+ 1.3.3 [defns.diagnostic]
+ 1.3.4 [defns.dynamic.type]
+ 1.3.5 [defns.ill.formed]
+ 1.3.6 [defns.impl.defined]
+ 1.3.7 [defns.impl.limits]
+ 1.3.8 [defns.locale.specific]
+ 1.3.9 [defns.multibyte]
+ 1.3.10 [defns.parameter]
+ 1.3.11 [defns.signature]
+ 1.3.12 [defns.static.type]
+ 1.3.13 [defns.undefined]
+ 1.3.14 [defns.unspecified]
+ 1.3.15 [defns.well.formed]
+ 1.4 [intro.compliance]
+ 1.5 [intro.structure]
+ 1.6 [syntax]
+ 1.7 [intro.memory]
+ 1.8 [intro.object]
+ 1.9 [intro.execution]
+ 1.10 [intro.multithread]
+ 1.11 [intro.ack]
+2 [lex]
+ 2.1 [lex.phases]
+ 2.2 [lex.charset]
+ 2.3 [lex.trigraph]
+ 2.4 [lex.pptoken]
+ 2.5 [lex.digraph]
+ 2.6 [lex.token]
+ 2.7 [lex.comment]
+ 2.8 [lex.header]
+ 2.9 [lex.ppnumber]
+ 2.10 [lex.name]
+ 2.11 [lex.key]
+ 2.12 [lex.operators]
+ 2.13 [lex.literal]
+ 2.13.1 [lex.icon]
+ 2.13.2 [lex.ccon]
+ 2.13.3 [lex.fcon]
+ 2.13.4 [lex.string]
+ 2.13.5 [lex.bool]
+ 2.13.6 [lex.nullptr]
+3 [basic]
+ 3.1 [basic.def]
+ 3.2 [basic.def.odr]
+ 3.3 [basic.scope]
+ 3.3.1 [basic.scope.pdecl]
+ 3.3.2 [basic.scope.local]
+ 3.3.3 [basic.scope.proto]
+ 3.3.4 [basic.funscope]
+ 3.3.5 [basic.scope.namespace]
+ 3.3.6 [basic.scope.class]
+ 3.3.7 [basic.scope.enum]
+ 3.3.8 [basic.scope.hiding]
+ 3.4 [basic.lookup]
+ 3.4.1 [basic.lookup.unqual]
+ 3.4.2 [basic.lookup.argdep]
+ 3.4.3 [basic.lookup.qual]
+ 3.4.3.1 [class.qual]
+ 3.4.3.2 [namespace.qual]
+ 3.4.4 [basic.lookup.elab]
+ 3.4.5 [basic.lookup.classref]
+ 3.4.6 [basic.lookup.udir]
+ 3.5 [basic.link]
+ 3.6 [basic.start]
+ 3.6.1 [basic.start.main]
+ 3.6.2 [basic.start.init]
+ 3.6.3 [basic.start.term]
+ 3.7 [basic.stc]
+ 3.7.1 [basic.stc.static]
+ 3.7.2 [basic.stc.auto]
+ 3.7.3 [basic.stc.dynamic]
+ 3.7.3.1 [basic.stc.dynamic.allocation]
+ 3.7.3.2 [basic.stc.dynamic.deallocation]
+ 3.7.4 [basic.stc.inherit]
+ 3.8 [basic.life]
+ 3.9 [basic.types]
+ 3.9.1 [basic.fundamental]
+ 3.9.2 [basic.compound]
+ 3.9.3 [basic.type.qualifier]
+ 3.10 [basic.lval]
+ 3.11 [basic.align]
+4 [conv]
+ 4.1 [conv.lval]
+ 4.2 [conv.array]
+ 4.3 [conv.func]
+ 4.4 [conv.qual]
+ 4.5 [conv.prom]
+ 4.6 [conv.fpprom]
+ 4.7 [conv.integral]
+ 4.8 [conv.double]
+ 4.9 [conv.fpint]
+ 4.10 [conv.ptr]
+ 4.11 [conv.mem]
+ 4.12 [conv.bool]
+ 4.13 [conv.rank]
+5 [expr]
+ 5.1 [expr.prim]
+ 5.2 [expr.post]
+ 5.2.1 [expr.sub]
+ 5.2.2 [expr.call]
+ 5.2.3 [expr.type.conv]
+ 5.2.4 [expr.pseudo]
+ 5.2.5 [expr.ref]
+ 5.2.6 [expr.post.incr]
+ 5.2.7 [expr.dynamic.cast]
+ 5.2.8 [expr.typeid]
+ 5.2.9 [expr.static.cast]
+ 5.2.10 [expr.reinterpret.cast]
+ 5.2.11 [expr.const.cast]
+ 5.3 [expr.unary]
+ 5.3.1 [expr.unary.op]
+ 5.3.2 [expr.pre.incr]
+ 5.3.3 [expr.sizeof]
+ 5.3.4 [expr.new]
+ 5.3.5 [expr.delete]
+ 5.3.6 [expr.alignof]
+ 5.4 [expr.cast]
+ 5.5 [expr.mptr.oper]
+ 5.6 [expr.mul]
+ 5.7 [expr.add]
+ 5.8 [expr.shift]
+ 5.9 [expr.rel]
+ 5.10 [expr.eq]
+ 5.11 [expr.bit.and]
+ 5.12 [expr.xor]
+ 5.13 [expr.or]
+ 5.14 [expr.log.and]
+ 5.15 [expr.log.or]
+ 5.16 [expr.cond]
+ 5.17 [expr.ass]
+ 5.18 [expr.comma]
+ 5.19 [expr.const]
+6 [stmt.stmt]
+ 6.1 [stmt.label]
+ 6.2 [stmt.expr]
+ 6.3 [stmt.block]
+ 6.4 [stmt.select]
+ 6.4.1 [stmt.if]
+ 6.4.2 [stmt.switch]
+ 6.5 [stmt.iter]
+ 6.5.1 [stmt.while]
+ 6.5.2 [stmt.do]
+ 6.5.3 [stmt.for]
+ 6.6 [stmt.jump]
+ 6.6.1 [stmt.break]
+ 6.6.2 [stmt.cont]
+ 6.6.3 [stmt.return]
+ 6.6.4 [stmt.goto]
+ 6.7 [stmt.dcl]
+ 6.8 [stmt.ambig]
+7 [dcl.dcl]
+ 7.1 [dcl.spec]
+ 7.1.1 [dcl.stc]
+ 7.1.2 [dcl.fct.spec]
+ 7.1.3 [dcl.typedef]
+ 7.1.4 [dcl.friend]
+ 7.1.5 [dcl.constexpr]
+ 7.1.6 [dcl.type]
+ 7.1.6.1 [dcl.type.cv]
+ 7.1.6.2 [dcl.type.simple]
+ 7.1.6.3 [dcl.type.elab]
+ 7.1.6.4 [dcl.spec.auto]
+ 7.1.7 [dcl.align]
+ 7.2 [dcl.enum]
+ 7.3 [basic.namespace]
+ 7.3.1 [namespace.def]
+ 7.3.1.1 [namespace.unnamed]
+ 7.3.1.2 [namespace.memdef]
+ 7.3.2 [namespace.alias]
+ 7.3.3 [namespace.udecl]
+ 7.3.4 [namespace.udir]
+ 7.4 [dcl.asm]
+ 7.5 [dcl.link]
+8 [dcl.decl]
+ 8.1 [dcl.name]
+ 8.2 [dcl.ambig.res]
+ 8.3 [dcl.meaning]
+ 8.3.1 [dcl.ptr]
+ 8.3.2 [dcl.ref]
+ 8.3.3 [dcl.mptr]
+ 8.3.4 [dcl.array]
+ 8.3.5 [dcl.fct]
+ 8.3.6 [dcl.fct.default]
+ 8.4 [dcl.fct.def]
+ 8.5 [dcl.init]
+ 8.5.1 [dcl.init.aggr]
+ 8.5.2 [dcl.init.string]
+ 8.5.3 [dcl.init.ref]
+9 [class]
+ 9.1 [class.name]
+ 9.2 [class.mem]
+ 9.3 [class.mfct]
+ 9.3.1 [class.mfct.non-static]
+ 9.3.2 [class.this]
+ 9.4 [class.static]
+ 9.4.1 [class.static.mfct]
+ 9.4.2 [class.static.data]
+ 9.5 [class.union]
+ 9.6 [class.bit]
+ 9.7 [class.nest]
+ 9.8 [class.local]
+ 9.9 [class.nested.type]
+10 [class.derived]
+ 10.1 [class.mi]
+ 10.2 [class.member.lookup]
+ 10.3 [class.virtual]
+ 10.4 [class.abstract]
+11 [class.access]
+ 11.1 [class.access.spec]
+ 11.2 [class.access.base]
+ 11.3 [class.access.dcl]
+ 11.4 [class.friend]
+ 11.5 [class.protected]
+ 11.6 [class.access.virt]
+ 11.7 [class.paths]
+ 11.8 [class.access.nest]
+12 [special]
+ 12.1 [class.ctor]
+ 12.2 [class.temporary]
+ 12.3 [class.conv]
+ 12.3.1 [class.conv.ctor]
+ 12.3.2 [class.conv.fct]
+ 12.4 [class.dtor]
+ 12.5 [class.free]
+ 12.6 [class.init]
+ 12.6.1 [class.expl.init]
+ 12.6.2 [class.base.init]
+ 12.7 [class.cdtor]
+ 12.8 [class.copy]
+13 [over]
+ 13.1 [over.load]
+ 13.2 [over.dcl]
+ 13.3 [over.match]
+ 13.3.1 [over.match.funcs]
+ 13.3.1.1 [over.match.call]
+ 13.3.1.1.1 [over.call.func]
+ 13.3.1.1.2 [over.call.object]
+ 13.3.1.2 [over.match.oper]
+ 13.3.1.3 [over.match.ctor]
+ 13.3.1.4 [over.match.copy]
+ 13.3.1.5 [over.match.conv]
+ 13.3.1.6 [over.match.ref]
+ 13.3.2 [over.match.viable]
+ 13.3.3 [over.match.best]
+ 13.3.3.1 [over.best.ics]
+ 13.3.3.1.1 [over.ics.scs]
+ 13.3.3.1.2 [over.ics.user]
+ 13.3.3.1.3 [over.ics.ellipsis]
+ 13.3.3.1.4 [over.ics.ref]
+ 13.3.3.2 [over.ics.rank]
+ 13.4 [over.over]
+ 13.5 [over.oper]
+ 13.5.1 [over.unary]
+ 13.5.2 [over.binary]
+ 13.5.3 [over.ass]
+ 13.5.4 [over.call]
+ 13.5.5 [over.sub]
+ 13.5.6 [over.ref]
+ 13.5.7 [over.inc]
+ 13.6 [over.built]
+14 [temp]
+ 14.1 [temp.param]
+ 14.2 [temp.names]
+ 14.3 [temp.arg]
+ 14.3.1 [temp.arg.type]
+ 14.3.2 [temp.arg.nontype]
+ 14.3.3 [temp.arg.template]
+ 14.4 [temp.type]
+ 14.5 [temp.decls]
+ 14.5.1 [temp.class]
+ 14.5.1.1 [temp.mem.func]
+ 14.5.1.2 [temp.mem.class]
+ 14.5.1.3 [temp.static]
+ 14.5.2 [temp.mem]
+ 14.5.3 [temp.variadic]
+ 14.5.4 [temp.friend]
+ 14.5.5 [temp.class.spec]
+ 14.5.5.1 [temp.class.spec.match]
+ 14.5.5.2 [temp.class.order]
+ 14.5.5.3 [temp.class.spec.mfunc]
+ 14.5.6 [temp.fct]
+ 14.5.6.1 [temp.over.link]
+ 14.5.6.2 [temp.func.order]
+ 14.5.7 [temp.alias]
+ 14.6 [temp.res]
+ 14.6.1 [temp.local]
+ 14.6.2 [temp.dep]
+ 14.6.2.1 [temp.dep.type]
+ 14.6.2.2 [temp.dep.expr]
+ 14.6.2.3 [temp.dep.constexpr]
+ 14.6.2.4 [temp.dep.temp]
+ 14.6.3 [temp.nondep]
+ 14.6.4 [temp.dep.res]
+ 14.6.4.1 [temp.point]
+ 14.6.4.2 [temp.dep.candidate]
+ 14.6.5 [temp.inject]
+ 14.7 [temp.spec]
+ 14.7.1 [temp.inst]
+ 14.7.2 [temp.explicit]
+ 14.7.3 [temp.expl.spec]
+ 14.8 [temp.fct.spec]
+ 14.8.1 [temp.arg.explicit]
+ 14.8.2 [temp.deduct]
+ 14.8.2.1 [temp.deduct.call]
+ 14.8.2.2 [temp.deduct.funcaddr]
+ 14.8.2.3 [temp.deduct.conv]
+ 14.8.2.4 [temp.deduct.partial]
+ 14.8.2.5 [temp.deduct.type]
+ 14.8.3 [temp.over]
+15 [except]
+ 15.1 [except.throw]
+ 15.2 [except.ctor]
+ 15.3 [except.handle]
+ 15.4 [except.spec]
+ 15.5 [except.special]
+ 15.5.1 [except.terminate]
+ 15.5.2 [except.unexpected]
+ 15.5.3 [except.uncaught]
+ 15.6 [except.access]
+16 [cpp]
+ 16.1 [cpp.cond]
+ 16.2 [cpp.include]
+ 16.3 [cpp.replace]
+ 16.3.1 [cpp.subst]
+ 16.3.2 [cpp.stringize]
+ 16.3.3 [cpp.concat]
+ 16.3.4 [cpp.rescan]
+ 16.3.5 [cpp.scope]
+ 16.4 [cpp.line]
+ 16.5 [cpp.error]
+ 16.6 [cpp.pragma]
+ 16.7 [cpp.null]
+ 16.8 [cpp.predefined]
+ 16.9 [cpp.pragma.op]
+17 [library]
+ 17.1 [definitions]
+ 17.1.1 [defns.arbitrary.stream]
+ 17.1.2 [defns.blocked]
+ 17.1.3 [defns.character]
+ 17.1.4 [defns.character.container]
+ 17.1.5 [defns.comparison]
+ 17.1.6 [defns.component]
+ 17.1.7 [defns.deadlock]
+ 17.1.8 [defns.default.behavior]
+ 17.1.9 [defns.handler]
+ 17.1.10 [defns.iostream.templates]
+ 17.1.11 [defns.modifier]
+ 17.1.12 [defns.obj.state]
+ 17.1.13 [defns.ntcts]
+ 17.1.14 [defns.narrow.iostream]
+ 17.1.15 [defns.observer]
+ 17.1.16 [defns.replacement]
+ 17.1.17 [defns.repositional.stream]
+ 17.1.18 [defns.required.behavior]
+ 17.1.19 [defns.reserved.function]
+ 17.1.20 [defns.stable]
+ 17.1.21 [defns.traits]
+ 17.1.22 [defns.wide.iostream]
+ 17.2 [defns.additional]
+ 17.3 [description]
+ 17.3.1 [structure]
+ 17.3.1.1 [structure.summary]
+ 17.3.1.2 [structure.requirements]
+ 17.3.1.3 [structure.specifications]
+ 17.3.1.4 [structure.see.also]
+ 17.3.2 [conventions]
+ 17.3.2.1 [type.descriptions]
+ 17.3.2.1.1 [enumerated.types]
+ 17.3.2.1.2 [bitmask.types]
+ 17.3.2.1.3 [character.seq]
+ 17.3.2.1.3.1 [byte.strings]
+ 17.3.2.1.3.2 [multibyte.strings]
+ 17.3.2.1.3.3 [char16_t.seq]
+ 17.3.2.1.3.4 [char32_t.seq]
+ 17.3.2.1.3.5 [wide.characters]
+ 17.3.2.2 [functions.within.classes]
+ 17.3.2.3 [objects.within.classes]
+ 17.4 [requirements]
+ 17.4.1 [organization]
+ 17.4.1.1 [contents]
+ 17.4.1.2 [headers]
+ 17.4.1.3 [compliance]
+ 17.4.2 [using]
+ 17.4.2.1 [using.headers]
+ 17.4.2.2 [using.linkage]
+ 17.4.3 [constraints]
+ 17.4.3.1 [reserved.names]
+ 17.4.3.1.1 [macro.names]
+ 17.4.3.1.2 [global.names]
+ 17.4.3.1.3 [extern.names]
+ 17.4.3.1.4 [extern.types]
+ 17.4.3.2 [alt.headers]
+ 17.4.3.3 [derived.classes]
+ 17.4.3.4 [replacement.functions]
+ 17.4.3.5 [handler.functions]
+ 17.4.3.6 [res.on.functions]
+ 17.4.3.7 [res.on.arguments]
+ 17.4.3.8 [res.on.required]
+ 17.4.4 [conforming]
+ 17.4.4.1 [res.on.headers]
+ 17.4.4.2 [res.on.macro.definitions]
+ 17.4.4.3 [global.functions]
+ 17.4.4.4 [member.functions]
+ 17.4.4.5 [reentrancy]
+ 17.4.4.6 [protection.within.classes]
+ 17.4.4.7 [derivation]
+ 17.4.4.8 [res.on.exception.handling]
+ 17.4.4.9 [value.error.codes]
+18 [language.support]
+ 18.1 [support.types]
+ 18.2 [support.limits]
+ 18.2.1 [limits]
+ 18.2.1.1 [numeric.limits]
+ 18.2.1.2 [numeric.limits.members]
+ 18.2.1.3 [round.style]
+ 18.2.1.4 [denorm.style]
+ 18.2.1.5 [numeric.special]
+ 18.2.2 [c.limits]
+ 18.3 [cstdint]
+ 18.3.1 [cstdint.syn]
+ 18.3.2 [stdinth]
+ 18.4 [support.start.term]
+ 18.5 [support.dynamic]
+ 18.5.1 [new.delete]
+ 18.5.1.1 [new.delete.single]
+ 18.5.1.2 [new.delete.array]
+ 18.5.1.3 [new.delete.placement]
+ 18.5.2 [alloc.errors]
+ 18.5.2.1 [bad.alloc]
+ 18.5.2.2 [new.handler]
+ 18.5.2.3 [set.new.handler]
+ 18.6 [support.rtti]
+ 18.6.1 [type.info]
+ 18.6.2 [bad.cast]
+ 18.6.3 [bad.typeid]
+ 18.7 [support.exception]
+ 18.7.1 [exception]
+ 18.7.2 [exception.unexpected]
+ 18.7.2.1 [bad.exception]
+ 18.7.2.2 [unexpected.handler]
+ 18.7.2.3 [set.unexpected]
+ 18.7.2.4 [unexpected]
+ 18.7.3 [exception.terminate]
+ 18.7.3.1 [terminate.handler]
+ 18.7.3.2 [set.terminate]
+ 18.7.3.3 [terminate]
+ 18.7.4 [uncaught]
+ 18.7.5 [propagation]
+ 18.8 [support.runtime]
+19 [diagnostics]
+ 19.1 [std.exceptions]
+ 19.1.1 [logic.error]
+ 19.1.2 [domain.error]
+ 19.1.3 [invalid.argument]
+ 19.1.4 [length.error]
+ 19.1.5 [out.of.range]
+ 19.1.6 [runtime.error]
+ 19.1.7 [range.error]
+ 19.1.8 [overflow.error]
+ 19.1.9 [underflow.error]
+ 19.2 [assertions]
+ 19.3 [errno]
+ 19.4 [syserr]
+ 19.4.1 [syserr.errcat]
+ 19.4.1.1 [syserr.errcat.overview]
+ 19.4.1.2 [syserr.errcat.virtuals]
+ 19.4.1.3 [syserr.errcat.nonvirtuals]
+ 19.4.1.4 [syserr.errcat.derived]
+ 19.4.1.5 [syserr.errcat.objects]
+ 19.4.2 [syserr.errcode]
+ 19.4.2.1 [syserr.errcode.overview]
+ 19.4.2.2 [syserr.errcode.constructors]
+ 19.4.2.3 [syserr.errcode.modifiers]
+ 19.4.2.4 [syserr.errcode.observers]
+ 19.4.2.5 [syserr.errcode.nonmembers]
+ 19.4.3 [syserr.errcondition]
+ 19.4.3.1 [syserr.errcondition.overview]
+ 19.4.3.2 [syserr.errcondition.constructors]
+ 19.4.3.3 [syserr.errcondition.modifiers]
+ 19.4.3.4 [syserr.errcondition.observers]
+ 19.4.3.5 [syserr.errcondition.nonmembers]
+ 19.4.4 [syserr.compare]
+ 19.4.5 [syserr.syserr]
+ 19.4.5.1 [syserr.syserr.overview]
+ 19.4.5.2 [syserr.syserr.members]
+20 [utilities]
+ 20.1 [utility.concepts]
+ 20.1.1 [concept.support]
+ 20.1.2 [concept.comparison]
+ 20.1.3 [concept.destruct]
+ 20.1.4 [concept.construct]
+ 20.1.5 [concept.copymove]
+ 20.1.6 [concept.memory]
+ 20.1.7 [concept.regular]
+ 20.1.8 [concept.convertible]
+ 20.1.9 [concept.true]
+ 20.1.10 [concept.operator]
+ 20.1.11 [concept.arithmetic]
+ 20.1.12 [concept.predicate]
+ 20.1.13 [concept.allocator]
+ 20.2 [utility]
+ 20.2.1 [operators]
+ 20.2.2 [forward]
+ 20.2.3 [pairs]
+ 20.3 [tuple]
+ 20.3.1 [tuple.tuple]
+ 20.3.1.1 [tuple.cnstr]
+ 20.3.1.2 [tuple.creation]
+ 20.3.1.3 [tuple.helper]
+ 20.3.1.4 [tuple.elem]
+ 20.3.1.5 [tuple.rel]
+ 20.4 [meta]
+ 20.4.1 [meta.rqmts]
+ 20.4.2 [meta.type.synop]
+ 20.4.3 [meta.help]
+ 20.4.4 [meta.unary]
+ 20.4.4.1 [meta.unary.cat]
+ 20.4.4.2 [meta.unary.comp]
+ 20.4.4.3 [meta.unary.prop]
+ 20.4.5 [meta.rel]
+ 20.4.6 [meta.trans]
+ 20.4.6.1 [meta.trans.cv]
+ 20.4.6.2 [meta.trans.ref]
+ 20.4.6.3 [meta.trans.sign]
+ 20.4.6.4 [meta.trans.arr]
+ 20.4.6.5 [meta.trans.ptr]
+ 20.4.7 [meta.trans.other]
+ 20.5 [function.objects]
+ 20.5.1 [func.def]
+ 20.5.2 [func.require]
+ 20.5.3 [base]
+ 20.5.4 [func.ret]
+ 20.5.5 [refwrap]
+ 20.5.5.1 [refwrap.const]
+ 20.5.5.2 [refwrap.assign]
+ 20.5.5.3 [refwrap.access]
+ 20.5.5.4 [refwrap.invoke]
+ 20.5.5.5 [refwrap.helpers]
+ 20.5.6 [arithmetic.operations]
+ 20.5.7 [comparisons]
+ 20.5.8 [logical.operations]
+ 20.5.9 [bitwise.operations]
+ 20.5.10 [negators]
+ 20.5.11 [bind]
+ 20.5.11.1 [func.bind]
+ 20.5.11.1.1 [func.bind.isbind]
+ 20.5.11.1.2 [func.bind.isplace]
+ 20.5.11.1.3 [func.bind.bind]
+ 20.5.11.1.4 [func.bind.place]
+ 20.5.12 [function.pointer.adaptors]
+ 20.5.13 [member.pointer.adaptors]
+ 20.5.14 [func.memfn]
+ 20.5.15 [func.wrap]
+ 20.5.15.1 [func.wrap.badcall]
+ 20.5.15.1.1 [func.wrap.badcall.const]
+ 20.5.15.2 [func.wrap.func]
+ 20.5.15.2.1 [func.wrap.func.con]
+ 20.5.15.2.2 [func.wrap.func.mod]
+ 20.5.15.2.3 [func.wrap.func.cap]
+ 20.5.15.2.4 [func.wrap.func.inv]
+ 20.5.15.2.5 [func.wrap.func.targ]
+ 20.5.15.2.6 [func.wrap.func.nullptr]
+ 20.5.15.2.7 [func.wrap.func.alg]
+ X [func.wrap.func.undef]
+ 20.5.16 [unord.hash]
+ 20.6 [memory]
+ 20.6.1 [default.allocator]
+ 20.6.1.1 [allocator.members]
+ 20.6.1.2 [allocator.globals]
+ 20.6.2 [storage.iterator]
+ 20.6.3 [temporary.buffer]
+ 20.6.4 [specialized.algorithms]
+ 20.6.4.1 [uninitialized.copy]
+ 20.6.4.2 [uninitialized.fill]
+ 20.6.4.3 [uninitialized.fill.n]
+ 20.6.5 [unique.ptr]
+ 20.6.5.1 [unique.ptr.dltr]
+ 20.6.5.1.1 [unique.ptr.dltr.dflt]
+ 20.6.5.1.2 [unique.ptr.dltr.dflt1]
+ 20.6.5.1.3 [unique.ptr.dltr.dflt2]
+ 20.6.5.2 [unique.ptr.single]
+ 20.6.5.2.1 [unique.ptr.single.ctor]
+ 20.6.5.2.2 [unique.ptr.single.dtor]
+ 20.6.5.2.3 [unique.ptr.single.asgn]
+ 20.6.5.2.4 [unique.ptr.single.observers]
+ 20.6.5.2.5 [unique.ptr.single.modifiers]
+ 20.6.5.3 [unique.ptr.runtime]
+ 20.6.5.3.1 [unique.ptr.runtime.ctor]
+ 20.6.5.3.2 [unique.ptr.runtime.observers]
+ 20.6.5.3.3 [unique.ptr.runtime.modifiers]
+ 20.6.5.4 [unique.ptr.compiletime]
+ 20.6.5.4.1 [unique.ptr.compiletime.dtor]
+ 20.6.5.4.2 [unique.ptr.compiletime.observers]
+ 20.6.5.4.3 [unique.ptr.compiletime.modifiers]
+ 20.6.5.5 [unique.ptr.special]
+ 20.6.6 [util.smartptr]
+ 20.6.6.1 [util.smartptr.weakptr]
+ 20.6.6.2 [util.smartptr.shared]
+ 20.6.6.2.1 [util.smartptr.shared.const]
+ 20.6.6.2.2 [util.smartptr.shared.dest]
+ 20.6.6.2.3 [util.smartptr.shared.assign]
+ 20.6.6.2.4 [util.smartptr.shared.mod]
+ 20.6.6.2.5 [util.smartptr.shared.obs]
+ 20.6.6.2.6 [util.smartptr.shared.create]
+ 20.6.6.2.7 [util.smartptr.shared.cmp]
+ 20.6.6.2.8 [util.smartptr.shared.io]
+ 20.6.6.2.9 [util.smartptr.shared.spec]
+ 20.6.6.2.10 [util.smartptr.shared.cast]
+ 20.6.6.2.11 [util.smartptr.getdeleter]
+ 20.6.6.3 [util.smartptr.weak]
+ 20.6.6.3.1 [util.smartptr.weak.const]
+ 20.6.6.3.2 [util.smartptr.weak.dest]
+ 20.6.6.3.3 [util.smartptr.weak.assign]
+ 20.6.6.3.4 [util.smartptr.weak.mod]
+ 20.6.6.3.5 [util.smartptr.weak.obs]
+ 20.6.6.3.6 [util.smartptr.weak.cmp]
+ 20.6.6.3.7 [util.smartptr.weak.spec]
+ 20.6.6.4 [util.smartptr.enab]
+ 20.6.7 [ptr.align]
+ 20.6.8 [c.malloc]
+ 20.7 [date.time]
+21 [strings]
+ 21.1 [char.traits]
+ 21.1.1 [char.traits.require]
+ 21.1.2 [char.traits.typedefs]
+ 21.1.3 [char.traits.specializations]
+ 21.1.3.1 [char.traits.specializations.char]
+ 21.1.3.2 [char.traits.specializations.char16_t]
+ 21.1.3.3 [char.traits.specializations.char32_t]
+ 21.1.3.4 [char.traits.specializations.wchar.t]
+ 21.2 [string.classes]
+ 21.3 [basic.string]
+ 21.3.1 [string.require]
+ 21.3.2 [string.cons]
+ 21.3.3 [string.iterators]
+ 21.3.4 [string.capacity]
+ 21.3.5 [string.access]
+ 21.3.6 [string.modifiers]
+ 21.3.6.1 [string::op+=]
+ 21.3.6.2 [string::append]
+ 21.3.6.3 [string::assign]
+ 21.3.6.4 [string::insert]
+ 21.3.6.5 [string::erase]
+ 21.3.6.6 [string::replace]
+ 21.3.6.7 [string::copy]
+ 21.3.6.8 [string::swap]
+ 21.3.7 [string.ops]
+ 21.3.7.1 [string.accessors]
+ 21.3.7.2 [string::find]
+ 21.3.7.3 [string::rfind]
+ 21.3.7.4 [string::find.first.of]
+ 21.3.7.5 [string::find.last.of]
+ 21.3.7.6 [string::find.first.not.of]
+ 21.3.7.7 [string::find.last.not.of]
+ 21.3.7.8 [string::substr]
+ 21.3.7.9 [string::compare]
+ 21.3.8 [string.nonmembers]
+ 21.3.8.1 [string::op+]
+ 21.3.8.2 [string::operator==]
+ 21.3.8.3 [string::op!=]
+ 21.3.8.4 [string::op<]
+ 21.3.8.5 [string::op>]
+ 21.3.8.6 [string::op<=]
+ 21.3.8.7 [string::op>=]
+ 21.3.8.8 [string.special]
+ 21.3.8.9 [string.io]
+ 21.4 [string.conversions]
+ 21.5 [c.strings]
+22 [localization]
+ 22.1 [locales]
+ 22.1.1 [locale]
+ 22.1.1.1 [locale.types]
+ 22.1.1.1.1 [locale.category]
+ 22.1.1.1.2 [locale.facet]
+ 22.1.1.1.3 [locale.id]
+ 22.1.1.2 [locale.cons]
+ 22.1.1.3 [locale.members]
+ 22.1.1.4 [locale.operators]
+ 22.1.1.5 [locale.statics]
+ 22.1.2 [locale.global.templates]
+ 22.1.3 [locale.convenience]
+ 22.1.3.1 [classification]
+ 22.1.3.2 [conversions]
+ 22.1.3.2.1 [conversions.character]
+ 22.1.3.2.2 [conversions.string]
+ 22.1.3.2.3 [conversions.buffer]
+ 22.2 [locale.categories]
+ 22.2.1 [category.ctype]
+ 22.2.1.1 [locale.ctype]
+ 22.2.1.1.1 [locale.ctype.members]
+ 22.2.1.1.2 [locale.ctype.virtuals]
+ 22.2.1.2 [locale.ctype.byname]
+ 22.2.1.3 [facet.ctype.special]
+ 22.2.1.3.1 [facet.ctype.char.dtor]
+ 22.2.1.3.2 [facet.ctype.char.members]
+ 22.2.1.3.3 [facet.ctype.char.statics]
+ 22.2.1.3.4 [facet.ctype.char.virtuals]
+ 22.2.1.4 [locale.codecvt]
+ 22.2.1.4.1 [locale.codecvt.members]
+ 22.2.1.4.2 [locale.codecvt.virtuals]
+ 22.2.1.5 [locale.codecvt.byname]
+ 22.2.2 [category.numeric]
+ 22.2.2.1 [locale.num.get]
+ 22.2.2.1.1 [facet.num.get.members]
+ 22.2.2.1.2 [facet.num.get.virtuals]
+ 22.2.2.2 [locale.nm.put]
+ 22.2.2.2.1 [facet.num.put.members]
+ 22.2.2.2.2 [facet.num.put.virtuals]
+ 22.2.3 [facet.numpunct]
+ 22.2.3.1 [locale.numpunct]
+ 22.2.3.1.1 [facet.numpunct.members]
+ 22.2.3.1.2 [facet.numpunct.virtuals]
+ 22.2.3.2 [locale.numpunct.byname]
+ 22.2.4 [category.collate]
+ 22.2.4.1 [locale.collate]
+ 22.2.4.1.1 [locale.collate.members]
+ 22.2.4.1.2 [locale.collate.virtuals]
+ 22.2.4.2 [locale.collate.byname]
+ 22.2.5 [category.time]
+ 22.2.5.1 [locale.time.get]
+ 22.2.5.1.1 [locale.time.get.members]
+ 22.2.5.1.2 [locale.time.get.virtuals]
+ 22.2.5.2 [locale.time.get.byname]
+ 22.2.5.3 [locale.time.put]
+ 22.2.5.3.1 [locale.time.put.members]
+ 22.2.5.3.2 [locale.time.put.virtuals]
+ 22.2.5.4 [locale.time.put.byname]
+ 22.2.6 [category.monetary]
+ 22.2.6.1 [locale.money.get]
+ 22.2.6.1.1 [locale.money.get.members]
+ 22.2.6.1.2 [locale.money.get.virtuals]
+ 22.2.6.2 [locale.money.put]
+ 22.2.6.2.1 [locale.money.put.members]
+ 22.2.6.2.2 [locale.money.put.virtuals]
+ 22.2.6.3 [locale.moneypunct]
+ 22.2.6.3.1 [locale.moneypunct.members]
+ 22.2.6.3.2 [locale.moneypunct.virtuals]
+ 22.2.6.4 [locale.moneypunct.byname]
+ 22.2.7 [category.messages]
+ 22.2.7.1 [locale.messages]
+ 22.2.7.1.1 [locale.messages.members]
+ 22.2.7.1.2 [locale.messages.virtuals]
+ 22.2.7.2 [locale.messages.byname]
+ 22.2.8 [facets.examples]
+ 22.3 [locale.stdcvt]
+ 22.4 [c.locales]
+23 [containers]
+ 23.1 [container.requirements]
+ 23.1.1 [sequence.reqmts]
+ 23.1.2 [associative.reqmts]
+ 23.1.3 [unord.req]
+ 23.1.3.1 [unord.req.except]
+ 23.2 [sequences]
+ 23.2.1 [array]
+ 23.2.1.1 [array.cons]
+ 23.2.1.2 [array.special]
+ 23.2.1.3 [array.size]
+ 23.2.1.4 [array.data]
+ 23.2.1.5 [array.zero]
+ 23.2.1.6 [array.tuple]
+ 23.2.2 [deque]
+ 23.2.2.1 [deque.cons]
+ 23.2.2.2 [deque.capacity]
+ 23.2.2.3 [deque.modifiers]
+ 23.2.2.4 [deque.special]
+ 23.2.3 [list]
+ 23.2.3.1 [list.cons]
+ 23.2.3.2 [list.capacity]
+ 23.2.3.3 [list.modifiers]
+ 23.2.3.4 [list.ops]
+ 23.2.3.5 [list.special]
+ 23.2.4 [container.adaptors]
+ 23.2.4.1 [queue]
+ 23.2.4.1.1 [queue.defn]
+ 23.2.4.1.2 [queue.ops]
+ 23.2.4.1.3 [queue.special]
+ 23.2.4.2 [priority.queue]
+ 23.2.4.2.1 [priqueue.cons]
+ 23.2.4.2.2 [priqueue.members]
+ 23.2.4.2.3 [priqueue.special]
+ 23.2.4.3 [stack]
+ 23.2.4.3.1 [stack.defn]
+ 23.2.4.3.2 [stack.ops]
+ 23.2.4.3.3 [stack.special]
+ 23.2.5 [vector]
+ 23.2.5.1 [vector.cons]
+ 23.2.5.2 [vector.capacity]
+ 23.2.5.3 [vector.data]
+ 23.2.5.4 [vector.modifiers]
+ 23.2.5.5 [vector.special]
+ 23.2.6 [vector.bool]
+ 23.3 [associative]
+ 23.3.1 [map]
+ 23.3.1.1 [map.cons]
+ 23.3.1.2 [map.access]
+ 23.3.1.3 [map.modifiers]
+ 23.3.1.4 [map.ops]
+ 23.3.1.5 [map.special]
+ 23.3.2 [multimap]
+ 23.3.2.1 [multimap.cons]
+ 23.3.2.2 [multimap.modifiers]
+ 23.3.2.3 [multimap.ops]
+ 23.3.2.4 [multimap.special]
+ 23.3.3 [set]
+ 23.3.3.1 [set.cons]
+ 23.3.3.2 [set.special]
+ 23.3.4 [multiset]
+ 23.3.4.1 [multiset.cons]
+ 23.3.4.2 [multiset.special]
+ 23.3.5 [template.bitset]
+ 23.3.5.1 [bitset.cons]
+ 23.3.5.2 [bitset.members]
+ 23.3.5.3 [bitset.operators]
+ 23.4 [unord]
+ 23.4.1 [unord.map]
+ 23.4.1.1 [unord.map.cnstr]
+ 23.4.1.2 [unord.map.elem]
+ 23.4.1.3 [unord.map.swap]
+ 23.4.2 [unord.multimap]
+ 23.4.2.1 [unord.multimap.cnstr]
+ 23.4.2.2 [unord.multimap.swap]
+ 23.4.3 [unord.set]
+ 23.4.3.1 [unord.set.cnstr]
+ 23.4.3.2 [unord.set.swap]
+ 23.4.4 [unord.multiset]
+ 23.4.4.1 [unord.multiset.cnstr]
+ 23.4.4.2 [unord.multiset.swap]
+24 [iterators]
+ 24.1 [iterator.requirements]
+ 24.1.1 [input.iterators]
+ 24.1.2 [output.iterators]
+ 24.1.3 [forward.iterators]
+ 24.1.4 [bidirectional.iterators]
+ 24.1.5 [random.access.iterators]
+ 24.2 [iterator.synopsis]
+ 24.3 [iterator.primitives]
+ 24.3.1 [iterator.traits]
+ 24.3.2 [iterator.basic]
+ 24.3.3 [std.iterator.tags]
+ 24.3.4 [iterator.operations]
+ 24.4 [predef.iterators]
+ 24.4.1 [reverse.iterators]
+ 24.4.1.1 [reverse.iterator]
+ 24.4.1.2 [reverse.iter.requirements]
+ 24.4.1.3 [reverse.iter.ops]
+ 24.4.1.3.1 [reverse.iter.cons]
+ 24.4.1.3.2 [reverse.iter.op=]
+ 24.4.1.3.3 [reverse.iter.conv]
+ 24.4.1.3.4 [reverse.iter.op.star]
+ 24.4.1.3.5 [reverse.iter.opref]
+ 24.4.1.3.6 [reverse.iter.op++]
+ 24.4.1.3.7 [reverse.iter.op--]
+ 24.4.1.3.8 [reverse.iter.op+]
+ 24.4.1.3.9 [reverse.iter.op+=]
+ 24.4.1.3.10 [reverse.iter.op-]
+ 24.4.1.3.11 [reverse.iter.op-=]
+ 24.4.1.3.12 [reverse.iter.opindex]
+ 24.4.1.3.13 [reverse.iter.op==]
+ 24.4.1.3.14 [reverse.iter.op<]
+ 24.4.1.3.15 [reverse.iter.op!=]
+ 24.4.1.3.16 [reverse.iter.op>]
+ 24.4.1.3.17 [reverse.iter.op>=]
+ 24.4.1.3.18 [reverse.iter.op<=]
+ 24.4.1.3.19 [reverse.iter.opdiff]
+ 24.4.1.3.20 [reverse.iter.opsum]
+ 24.4.2 [insert.iterators]
+ 24.4.2.1 [back.insert.iterator]
+ 24.4.2.2 [back.insert.iter.ops]
+ 24.4.2.2.1 [back.insert.iter.cons]
+ 24.4.2.2.2 [back.insert.iter.op=]
+ 24.4.2.2.3 [back.insert.iter.op*]
+ 24.4.2.2.4 [back.insert.iter.op++]
+ 24.4.2.2.5 [back.inserter]
+ 24.4.2.3 [front.insert.iterator]
+ 24.4.2.4 [front.insert.iter.ops]
+ 24.4.2.4.1 [front.insert.iter.cons]
+ 24.4.2.4.2 [front.insert.iter.op=]
+ 24.4.2.4.3 [front.insert.iter.op*]
+ 24.4.2.4.4 [front.insert.iter.op++]
+ 24.4.2.4.5 [front.inserter]
+ 24.4.2.5 [insert.iterator]
+ 24.4.2.6 [insert.iter.ops]
+ 24.4.2.6.1 [insert.iter.cons]
+ 24.4.2.6.2 [insert.iter.op=]
+ 24.4.2.6.3 [insert.iter.op*]
+ 24.4.2.6.4 [insert.iter.op++]
+ 24.4.2.6.5 [inserter]
+ 24.4.3 [move.iterators]
+ 24.4.3.1 [move.iterator]
+ 24.4.3.2 [move.iter.requirements]
+ 24.4.3.3 [move.iter.ops]
+ 24.4.3.3.1 [move.iter.op.const]
+ 24.4.3.3.2 [move.iter.op=]
+ 24.4.3.3.3 [move.iter.op.conv]
+ 24.4.3.3.4 [move.iter.op.star]
+ 24.4.3.3.5 [move.iter.op.ref]
+ 24.4.3.3.6 [move.iter.op.incr]
+ 24.4.3.3.7 [move.iter.op.decr]
+ 24.4.3.3.8 [move.iter.op.+]
+ 24.4.3.3.9 [move.iter.op.+=]
+ 24.4.3.3.10 [move.iter.op.-]
+ 24.4.3.3.11 [move.iter.op.-=]
+ 24.4.3.3.12 [move.iter.op.index]
+ 24.4.3.3.13 [move.iter.op.comp]
+ 24.4.3.3.14 [move.iter.nonmember]
+ 24.5 [stream.iterators]
+ 24.5.1 [istream.iterator]
+ 24.5.1.1 [istream.iterator.cons]
+ 24.5.1.2 [istream.iterator.ops]
+ 24.5.2 [ostream.iterator]
+ 24.5.2.1 [ostream.iterator.cons.des]
+ 24.5.2.2 [ostream.iterator.ops]
+ 24.5.3 [istreambuf.iterator]
+ 24.5.3.1 [istreambuf.iterator::proxy]
+ 24.5.3.2 [istreambuf.iterator.cons]
+ 24.5.3.3 [istreambuf.iterator::op*]
+ 24.5.3.4 [istreambuf.iterator::op++]
+ 24.5.3.5 [istreambuf.iterator::equal]
+ 24.5.3.6 [istreambuf.iterator::op==]
+ 24.5.3.7 [istreambuf.iterator::op!=]
+ 24.5.4 [ostreambuf.iterator]
+ 24.5.4.1 [ostreambuf.iter.cons]
+ 24.5.4.2 [ostreambuf.iter.ops]
+25 [algorithms]
+ 25.1 [alg.nonmodifying]
+ 25.1.1 [alg.foreach]
+ 25.1.2 [alg.find]
+ 25.1.3 [alg.find.end]
+ 25.1.4 [alg.find.first.of]
+ 25.1.5 [alg.adjacent.find]
+ 25.1.6 [alg.count]
+ 25.1.7 [mismatch]
+ 25.1.8 [alg.equal]
+ 25.1.9 [alg.search]
+ 25.2 [alg.modifying.operations]
+ 25.2.1 [alg.copy]
+ 25.2.2 [alg.move]
+ 25.2.3 [alg.swap]
+ 25.2.4 [alg.transform]
+ 25.2.5 [alg.replace]
+ 25.2.6 [alg.fill]
+ 25.2.7 [alg.generate]
+ 25.2.8 [alg.remove]
+ 25.2.9 [alg.unique]
+ 25.2.10 [alg.reverse]
+ 25.2.11 [alg.rotate]
+ 25.2.12 [alg.random.shuffle]
+ 25.2.13 [alg.partitions]
+ 25.3 [alg.sorting]
+ 25.3.1 [alg.sort]
+ 25.3.1.1 [sort]
+ 25.3.1.2 [stable.sort]
+ 25.3.1.3 [partial.sort]
+ 25.3.1.4 [partial.sort.copy]
+ 25.3.1.5 [is.sorted]
+ 25.3.2 [alg.nth.element]
+ 25.3.3 [alg.binary.search]
+ 25.3.3.1 [lower.bound]
+ 25.3.3.2 [upper.bound]
+ 25.3.3.3 [equal.range]
+ 25.3.3.4 [binary.search]
+ 25.3.4 [alg.merge]
+ 25.3.5 [alg.set.operations]
+ 25.3.5.1 [includes]
+ 25.3.5.2 [set.union]
+ 25.3.5.3 [set.intersection]
+ 25.3.5.4 [set.difference]
+ 25.3.5.5 [set.symmetric.difference]
+ 25.3.6 [alg.heap.operations]
+ 25.3.6.1 [push.heap]
+ 25.3.6.2 [pop.heap]
+ 25.3.6.3 [make.heap]
+ 25.3.6.4 [sort.heap]
+ 25.3.6.5 [is.heap]
+ 25.3.7 [alg.min.max]
+ 25.3.8 [alg.lex.comparison]
+ 25.3.9 [alg.permutation.generators]
+ 25.4 [alg.c.library]
+26 [numerics]
+ 26.1 [numeric.requirements]
+ 26.2 [cfenv]
+ 26.2.1 [cfenv.syn]
+ 26.2.2 [fenv]
+ 26.3 [complex.numbers]
+ 26.3.1 [complex.synopsis]
+ 26.3.2 [complex]
+ 26.3.3 [complex.special]
+ 26.3.4 [complex.members]
+ 26.3.5 [complex.member.ops]
+ 26.3.6 [complex.ops]
+ 26.3.7 [complex.value.ops]
+ 26.3.8 [complex.transcendentals]
+ 26.3.9 [cmplx.over]
+ 26.3.10 [ccmplx]
+ 26.3.11 [cmplxh]
+ 26.4 [rand]
+ 26.4.1 [rand.req]
+ 26.4.1.1 [rand.req.genl]
+ 26.4.1.2 [rand.req.urng]
+ 26.4.1.3 [rand.req.eng]
+ 26.4.1.4 [rand.req.adapt]
+ 26.4.1.5 [rand.req.dist]
+ 26.4.2 [rand.synopsis]
+ 26.4.3 [rand.eng]
+ 26.4.3.1 [rand.eng.lcong]
+ 26.4.3.2 [rand.eng.mers]
+ 26.4.3.3 [rand.eng.sub]
+ 26.4.4 [rand.adapt]
+ 26.4.4.1 [rand.adapt.disc]
+ 26.4.4.2 [rand.adapt.ibits]
+ 26.4.4.3 [rand.adapt.shuf]
+ 26.4.4.4 [rand.adapt.xor]
+ 26.4.5 [rand.predef]
+ 26.4.6 [rand.device]
+ 26.4.7 [rand.util]
+ 26.4.7.1 [rand.util.seedseq]
+ 26.4.7.2 [rand.util.canonical]
+ 26.4.8 [rand.dist]
+ 26.4.8.1 [rand.dist.uni]
+ 26.4.8.1.1 [rand.dist.uni.int]
+ 26.4.8.1.2 [rand.dist.uni.real]
+ 26.4.8.2 [rand.dist.bern]
+ 26.4.8.2.1 [rand.dist.bern.bernoulli]
+ 26.4.8.2.2 [rand.dist.bern.bin]
+ 26.4.8.2.3 [rand.dist.bern.geo]
+ 26.4.8.2.4 [rand.dist.bern.negbin]
+ 26.4.8.3 [rand.dist.pois]
+ 26.4.8.3.1 [rand.dist.pois.poisson]
+ 26.4.8.3.2 [rand.dist.pois.exp]
+ 26.4.8.3.3 [rand.dist.pois.gamma]
+ 26.4.8.3.4 [rand.dist.pois.weibull]
+ 26.4.8.3.5 [rand.dist.pois.extreme]
+ 26.4.8.4 [rand.dist.norm]
+ 26.4.8.4.1 [rand.dist.norm.normal]
+ 26.4.8.4.2 [rand.dist.norm.lognormal]
+ 26.4.8.4.3 [rand.dist.norm.chisq]
+ 26.4.8.4.4 [rand.dist.norm.cauchy]
+ 26.4.8.4.5 [rand.dist.norm.f]
+ 26.4.8.4.6 [rand.dist.norm.t]
+ 26.4.8.5 [rand.dist.samp]
+ 26.4.8.5.1 [rand.dist.samp.discrete]
+ 26.4.8.5.2 [rand.dist.samp.pconst]
+ 26.4.8.5.3 [rand.dist.samp.genpdf]
+ 26.5 [numarray]
+ 26.5.1 [valarray.synopsis]
+ 26.5.2 [template.valarray]
+ 26.5.2.1 [valarray.cons]
+ 26.5.2.2 [valarray.assign]
+ 26.5.2.3 [valarray.access]
+ 26.5.2.4 [valarray.sub]
+ 26.5.2.5 [valarray.unary]
+ 26.5.2.6 [valarray.cassign]
+ 26.5.2.7 [valarray.members]
+ 26.5.3 [valarray.nonmembers]
+ 26.5.3.1 [valarray.binary]
+ 26.5.3.2 [valarray.comparison]
+ 26.5.3.3 [valarray.transcend]
+ 26.5.3.4 [valarray.special]
+ 26.5.4 [class.slice]
+ 26.5.4.1 [cons.slice]
+ 26.5.4.2 [slice.access]
+ 26.5.5 [template.slice.array]
+ 26.5.5.1 [slice.arr.assign]
+ 26.5.5.2 [slice.arr.comp.assign]
+ 26.5.5.3 [slice.arr.fill]
+ 26.5.6 [class.gslice]
+ 26.5.6.1 [gslice.cons]
+ 26.5.6.2 [gslice.access]
+ 26.5.7 [template.gslice.array]
+ 26.5.7.1 [gslice.array.assign]
+ 26.5.7.2 [gslice.array.comp.assign]
+ 26.5.7.3 [gslice.array.fill]
+ 26.5.8 [template.mask.array]
+ 26.5.8.1 [mask.array.assign]
+ 26.5.8.2 [mask.array.comp.assign]
+ 26.5.8.3 [mask.array.fill]
+ 26.5.9 [template.indirect.array]
+ 26.5.9.1 [indirect.array.assign]
+ 26.5.9.2 [indirect.array.comp.assign]
+ 26.5.9.3 [indirect.array.fill]
+ 26.6 [numeric.ops]
+ 26.6.1 [accumulate]
+ 26.6.2 [inner.product]
+ 26.6.3 [partial.sum]
+ 26.6.4 [adjacent.difference]
+ 26.7 [c.math]
+27 [input.output]
+ 27.1 [iostreams.requirements]
+ 27.1.1 [iostream.limits.imbue]
+ 27.1.2 [iostreams.limits.pos]
+ 27.2 [iostream.forward]
+ 27.3 [iostream.objects]
+ 27.3.1 [narrow.stream.objects]
+ 27.3.2 [wide.stream.objects]
+ 27.4 [iostreams.base]
+ 27.4.1 [stream.types]
+ 27.4.2 [ios.base]
+ 27.4.2.1 [ios.types]
+ 27.4.2.1.1 [ios::failure]
+ 27.4.2.1.2 [ios::fmtflags]
+ 27.4.2.1.3 [ios::iostate]
+ 27.4.2.1.4 [ios::openmode]
+ 27.4.2.1.5 [ios::seekdir]
+ 27.4.2.1.6 [ios::Init]
+ 27.4.2.2 [fmtflags.state]
+ 27.4.2.3 [ios.base.locales]
+ 27.4.2.4 [ios.members.static]
+ 27.4.2.5 [ios.base.storage]
+ 27.4.2.6 [ios.base.callback]
+ 27.4.2.7 [ios.base.cons]
+ 27.4.3 [fpos]
+ 27.4.3.1 [fpos.members]
+ 27.4.3.2 [fpos.operations]
+ 27.4.4 [ios]
+ 27.4.4.1 [basic.ios.cons]
+ 27.4.4.2 [basic.ios.members]
+ 27.4.4.3 [iostate.flags]
+ 27.4.5 [std.ios.manip]
+ 27.4.5.1 [fmtflags.manip]
+ 27.4.5.2 [adjustfield.manip]
+ 27.4.5.3 [basefield.manip]
+ 27.4.5.4 [floatfield.manip]
+ 27.5 [stream.buffers]
+ 27.5.1 [streambuf.reqts]
+ 27.5.2 [streambuf]
+ 27.5.2.1 [streambuf.cons]
+ 27.5.2.2 [streambuf.members]
+ 27.5.2.2.1 [streambuf.locales]
+ 27.5.2.2.2 [streambuf.buffer]
+ 27.5.2.2.3 [streambuf.pub.get]
+ 27.5.2.2.4 [streambuf.pub.pback]
+ 27.5.2.2.5 [streambuf.pub.put]
+ 27.5.2.3 [streambuf.protected]
+ 27.5.2.3.1 [streambuf.assign]
+ 27.5.2.3.2 [streambuf.get.area]
+ 27.5.2.3.3 [streambuf.put.area]
+ 27.5.2.4 [streambuf.virtuals]
+ 27.5.2.4.1 [streambuf.virt.locales]
+ 27.5.2.4.2 [streambuf.virt.buffer]
+ 27.5.2.4.3 [streambuf.virt.get]
+ 27.5.2.4.4 [streambuf.virt.pback]
+ 27.5.2.4.5 [streambuf.virt.put]
+ 27.6 [iostream.format]
+ 27.6.1 [input.streams]
+ 27.6.1.1 [istream]
+ 27.6.1.1.1 [istream.cons]
+ 27.6.1.1.2 [istream.assign]
+ 27.6.1.1.3 [istream::sentry]
+ 27.6.1.2 [istream.formatted]
+ 27.6.1.2.1 [istream.formatted.reqmts]
+ 27.6.1.2.2 [istream.formatted.arithmetic]
+ 27.6.1.2.3 [istream::extractors]
+ 27.6.1.3 [istream.unformatted]
+ 27.6.1.4 [istream.manip]
+ 27.6.1.5 [iostreamclass]
+ 27.6.1.5.1 [iostream.cons]
+ 27.6.1.5.2 [iostream.dest]
+ 27.6.1.5.3 [iostream.assign]
+ 27.6.2 [output.streams]
+ 27.6.2.1 [ostream]
+ 27.6.2.2 [ostream.cons]
+ 27.6.2.3 [ostream.assign]
+ 27.6.2.4 [ostream::sentry]
+ 27.6.2.5 [ostream.seeks]
+ 27.6.2.6 [ostream.formatted]
+ 27.6.2.6.1 [ostream.formatted.reqmts]
+ 27.6.2.6.2 [ostream.inserters.arithmetic]
+ 27.6.2.6.3 [ostream.inserters]
+ 27.6.2.6.4 [ostream.inserters.character]
+ 27.6.2.7 [ostream.unformatted]
+ 27.6.2.8 [ostream.manip]
+ 27.6.3 [std.manip]
+ 27.6.4 [ext.manip]
+ 27.7 [string.streams]
+ 27.7.1 [stringbuf]
+ 27.7.1.1 [stringbuf.cons]
+ 27.7.1.2 [stringbuf.assign]
+ 27.7.1.3 [stringbuf.members]
+ 27.7.1.4 [stringbuf.virtuals]
+ 27.7.2 [istringstream]
+ 27.7.2.1 [istringstream.cons]
+ 27.7.2.2 [istringstream.assign]
+ 27.7.2.3 [istringstream.members]
+ 27.7.3 [ostringstream]
+ 27.7.3.1 [ostringstream.cons]
+ 27.7.3.2 [ostringstream.assign]
+ 27.7.3.3 [ostringstream.members]
+ 27.7.4 [stringstream]
+ 27.7.5 [stringstream.cons]
+ 27.7.5.1 [stringstream.assign]
+ 27.7.6 [stringstream.members]
+ 27.8 [file.streams]
+ 27.8.1 [fstreams]
+ 27.8.1.1 [filebuf]
+ 27.8.1.2 [filebuf.cons]
+ 27.8.1.3 [filebuf.assign]
+ 27.8.1.4 [filebuf.members]
+ 27.8.1.5 [filebuf.virtuals]
+ 27.8.1.6 [ifstream]
+ 27.8.1.7 [ifstream.cons]
+ 27.8.1.8 [ifstream.assign]
+ 27.8.1.9 [ifstream.members]
+ 27.8.1.10 [ofstream]
+ 27.8.1.11 [ofstream.cons]
+ 27.8.1.12 [ofstream.assign]
+ 27.8.1.13 [ofstream.members]
+ 27.8.1.14 [fstream]
+ 27.8.1.15 [fstream.cons]
+ 27.8.1.16 [fstream.assign]
+ 27.8.1.17 [fstream.members]
+ 27.8.2 [c.files]
+28 [re]
+ 28.1 [re.def]
+ 28.1.1 [defns.regex.collating.element]
+ 28.1.2 [defns.regex.finite.state.machine]
+ 28.1.3 [defns.regex.format.specifier]
+ 28.1.4 [defns.regex.matched]
+ 28.1.5 [defns.regex.primary.equivalence.class]
+ 28.1.6 [defns.regex.regular.expression]
+ 28.1.7 [defns.regex.subexpression]
+ 28.2 [re.req]
+ 28.3 [re.sum]
+ 28.4 [re.syn]
+ 28.5 [re.const]
+ 28.5.1 [re.synopt]
+ 28.5.2 [re.matchflag]
+ 28.5.3 [re.err]
+ 28.6 [re.badexp]
+ 28.7 [re.traits]
+ 28.8 [re.regex]
+ 28.8.1 [re.regex.const]
+ 28.8.2 [re.regex.construct]
+ 28.8.3 [re.regex.assign]
+ 28.8.4 [re.regex.operations]
+ 28.8.5 [re.regex.locale]
+ 28.8.6 [re.regex.swap]
+ 28.8.7 [re.regex.nonmemb]
+ 28.8.7.1 [re.regex.nmswap]
+ 28.9 [re.submatch]
+ 28.9.1 [re.submatch.members]
+ 28.9.2 [re.submatch.op]
+ 28.10 [re.results]
+ 28.10.1 [re.results.const]
+ 28.10.2 [re.results.size]
+ 28.10.3 [re.results.acc]
+ 28.10.4 [re.results.form]
+ 28.10.5 [re.results.all]
+ 28.10.6 [re.results.swap]
+ 28.10.7 [re.results.nonmember]
+ 28.11 [re.alg]
+ 28.11.1 [re.except]
+ 28.11.2 [re.alg.match]
+ 28.11.3 [re.alg.search]
+ 28.11.4 [re.alg.replace]
+ 28.12 [re.iter]
+ 28.12.1 [re.regiter]
+ 28.12.1.1 [re.regiter.cnstr]
+ 28.12.1.2 [re.regiter.comp]
+ 28.12.1.3 [re.regiter.deref]
+ 28.12.1.4 [re.regiter.incr]
+ 28.12.2 [re.tokiter]
+ 28.12.2.1 [re.tokiter.cnstr]
+ 28.12.2.2 [re.tokiter.comp]
+ 28.12.2.3 [re.tokiter.deref]
+ 28.12.2.4 [re.tokiter.incr]
+ 28.13 [re.grammar]
+29 [atomics]
+ 29.1 [atomics.order]
+ 29.2 [atomics.lockfree]
+ 29.3 [atomics.flag]
+ 29.4 [atomics.types]
+ 29.4.1 [atomics.types.integral]
+ 29.4.2 [atomics.types.address]
+ 29.4.3 [atomics.types.generic]
+ 29.4.4 [atomics.types.operations]
+30 [thread]
+ 30.1 [thread.req]
+ 30.1.1 [thread.req.paramname]
+ 30.1.2 [thread.req.exception]
+ 30.1.3 [thread.req.native]
+ 30.1.4 [thread.req.timing]
+ 30.2 [thread.threads]
+ 30.2.1 [thread.thread.class]
+ 30.2.1.1 [thread.thread.id]
+ 30.2.1.2 [thread.thread.constr]
+ 30.2.1.3 [thread.thread.destr]
+ 30.2.1.4 [thread.thread.assign]
+ 30.2.1.5 [thread.thread.member]
+ 30.2.1.6 [thread.thread.static]
+ 30.2.1.7 [thread.thread.algorithm]
+ 30.2.2 [thread.thread.this]
+ 30.3 [thread.mutex]
+ 30.3.1 [thread.mutex.requirements]
+ 30.3.1.1 [thread.mutex.class]
+ 30.3.1.2 [thread.mutex.recursive]
+ 30.3.2 [thread.timedmutex.requirements]
+ 30.3.2.1 [thread.timedmutex.class]
+ 30.3.2.2 [thread.timedmutex.recursive]
+ 30.3.3 [thread.lock]
+ 30.3.3.1 [thread.lock.guard]
+ 30.3.3.2 [thread.lock.unique]
+ 30.3.3.2.1 [thread.lock.unique.cons]
+ 30.3.3.2.2 [thread.lock.unique.locking]
+ 30.3.3.2.3 [thread.lock.unique.mod]
+ 30.3.3.2.4 [thread.lock.unique.obs]
+ 30.3.4 [thread.lock.algorithm]
+ 30.3.5 [thread.once]
+ 30.3.5.1 [thread.once.onceflag]
+ 30.3.5.2 [thread.once.callonce]
+ 30.4 [thread.condition]
+ 30.4.1 [thread.condition.condvar]
+ 30.4.2 [thread.condition.condvarany]
+31 [datetime]
+ 31.1 [datetime.req]
+ 31.2 [datetime.syn]
+ 31.3 [datetime.duration]
+ 31.4 [datetime.nanoseconds]
+ 31.5 [datetime.microseconds]
+ 31.6 [datetime.milliseconds]
+ 31.7 [datetime.seconds]
+ 31.8 [datetime.minutes]
+ 31.9 [datetime.hours]
+ 31.10 [datetime.system]
+ 31.11 [datetime.nonmembers]
+A [gram]
+ A.1 [gram.key]
+ A.2 [gram.lex]
+ A.3 [gram.basic]
+ A.4 [gram.expr]
+ A.5 [gram.stmt]
+ A.6 [gram.dcl]
+ A.7 [gram.decl]
+ A.8 [gram.class]
+ A.9 [gram.derived]
+ A.10 [gram.special]
+ A.11 [gram.over]
+ A.12 [gram.temp]
+ A.13 [gram.except]
+ A.14 [gram.cpp]
+B [implimits]
+C [diff]
+ C.1 [diff.iso]
+ C.1.1 [diff.lex]
+ C.1.2 [diff.basic]
+ C.1.3 [diff.expr]
+ C.1.4 [diff.stat]
+ C.1.5 [diff.dcl]
+ C.1.6 [diff.decl]
+ C.1.7 [diff.class]
+ C.1.8 [diff.special]
+ C.1.9 [diff.cpp]
+ C.2 [diff.library]
+ C.2.1 [diff.mods.to.headers]
+ C.2.2 [diff.mods.to.definitions]
+ C.2.2.1 [diff.char16]
+ C.2.2.2 [diff.wchar.t]
+ C.2.2.3 [diff.header.iso646.h]
+ C.2.2.4 [diff.null]
+ C.2.3 [diff.mods.to.declarations]
+ C.2.4 [diff.mods.to.behavior]
+ C.2.4.1 [diff.offsetof]
+ C.2.4.2 [diff.malloc]
+D [depr]
+ D.1 [depr.incr.bool]
+ D.2 [depr.static]
+ D.3 [depr.access.dcl]
+ D.4 [depr.string]
+ D.5 [depr.c.headers]
+ D.6 [depr.ios.members]
+ D.7 [depr.str.strstreams]
+ D.7.1 [depr.strstreambuf]
+ D.7.1.1 [depr.strstreambuf.cons]
+ D.7.1.2 [depr.strstreambuf.members]
+ D.7.1.3 [depr.strstreambuf.virtuals]
+ D.7.2 [depr.istrstream]
+ D.7.2.1 [depr.istrstream.cons]
+ D.7.2.2 [depr.istrstream.members]
+ D.7.3 [depr.ostrstream]
+ D.7.3.1 [depr.ostrstream.cons]
+ D.7.3.2 [depr.ostrstream.members]
+ D.7.4 [depr.strstream]
+ D.7.4.1 [depr.strstream.cons]
+ D.7.4.2 [depr.strstream.dest]
+ D.7.4.3 [depr.strstream.oper]
+ D.8 [depr.lib.binders]
+ D.8.1 [depr.lib.binder.1st]
+ D.8.2 [depr.lib.bind.1st]
+ D.8.3 [depr.lib.binder.2nd]
+ D.8.4 [depr.lib.bind.2nd]
+ D.9 [depr.auto.ptr]
+ D.9.1 [auto.ptr]
+ D.9.1.1 [auto.ptr.cons]
+ D.9.1.2 [auto.ptr.members]
+ D.9.1.3 [auto.ptr.conv]
+E [extendid]
+F [xref]
+
+TR1 1 [tr.intro]
+ TR1 1.1 [tr.description]
+ TR1 1.2 [tr.intro.ext]
+ TR1 1.3 [tr.intro.namespaces]
+TR1 2 [tr.util]
+ TR1 2.1 [tr.util.refwrap]
+ TR1 2.1.1 [tr.util.refwrp.synopsis]
+ TR1 2.1.2 [tr.util.refwrp.refwrp]
+ TR1 2.1.2.1 [tr.util.refwrp.const]
+ TR1 2.1.2.2 [tr.util.refwrp.assign]
+ TR1 2.1.2.3 [tr.util.refwrp.access]
+ TR1 2.1.2.4 [tr.util.refwrp.invoke]
+ TR1 2.1.2.5 [tr.util.refwrp.helpers]
+ TR1 2.2 [tr.util.smartptr]
+ TR1 2.2.1 [tr.util.smartptr.synopsis]
+ TR1 2.2.2 [tr.util.smartptr.weakptr]
+ TR1 2.2.3 [tr.util.smartptr.shared]
+ TR1 2.2.3.1 [tr.util.smartptr.shared.const]
+ TR1 2.2.3.2 [tr.util.smartptr.shared.dest]
+ TR1 2.2.3.3 [tr.util.smartptr.shared.assign]
+ TR1 2.2.3.4 [tr.util.smartptr.shared.mod]
+ TR1 2.2.3.5 [tr.util.smartptr.shared.obs]
+ TR1 2.2.3.6 [tr.util.smartptr.shared.cmp]
+ TR1 2.2.3.7 [tr.util.smartptr.shared.io]
+ TR1 2.2.3.8 [tr.util.smartptr.shared.spec]
+ TR1 2.2.3.9 [tr.util.smartptr.shared.cast]
+ TR1 2.2.3.10 [tr.util.smartptr.getdeleter]
+ TR1 2.2.4 [tr.util.smartptr.weak]
+ TR1 2.2.4.1 [tr.util.smartptr.weak.const]
+ TR1 2.2.4.2 [tr.util.smartptr.weak.dest]
+ TR1 2.2.4.3 [tr.util.smartptr.weak.assign]
+ TR1 2.2.4.4 [tr.util.smartptr.weak.mod]
+ TR1 2.2.4.5 [tr.util.smartptr.weak.obs]
+ TR1 2.2.4.6 [tr.util.smartptr.weak.cmp]
+ TR1 2.2.4.7 [tr.util.smartptr.weak.spec]
+ TR1 2.2.5 [tr.util.smartptr.enab]
+TR1 3 [tr.func]
+ TR1 3.1 [tr.func.def]
+ TR1 3.2 [tr.func.syn]
+ TR1 3.3 [tr.func.require]
+ TR1 3.4 [tr.func.ret]
+ TR1 3.5 [tr.func.memfn]
+ TR1 3.6 [tr.func.bind]
+ TR1 3.6.1 [tr.func.bind.isbind]
+ TR1 3.6.2 [tr.func.bind.isplace]
+ TR1 3.6.3 [tr.func.bind.bind]
+ TR1 3.6.4 [tr.func.bind.place]
+ TR1 3.7 [tr.func.wrap]
+ TR1 3.7.1 [tr.func.wrap.badcall]
+ TR1 3.7.1.1 [tr.func.wrap.badcall.const]
+ TR1 3.7.2 [tr.func.wrap.func]
+ TR1 3.7.2.1 [tr.func.wrap.func.con]
+ TR1 3.7.2.2 [tr.func.wrap.func.mod]
+ TR1 3.7.2.3 [tr.func.wrap.func.cap]
+ TR1 3.7.2.4 [tr.func.wrap.func.inv]
+ TR1 3.7.2.5 [tr.func.wrap.func.targ]
+ TR1 3.7.2.6 [tr.func.wrap.func.undef]
+ TR1 3.7.2.7 [tr.func.wrap.func.nullptr]
+ TR1 3.7.2.8 [tr.func.wrap.func.alg]
+TR1 4 [tr.meta]
+ TR1 4.1 [tr.meta.rqmts]
+ TR1 4.2 [tr.meta.type.synop]
+ TR1 4.3 [tr.meta.help]
+ TR1 4.4 [tr.meta.requirements]
+ TR1 4.5 [tr.meta.unary]
+ TR1 4.5.1 [tr.meta.unary.cat]
+ TR1 4.5.2 [tr.meta.unary.comp]
+ TR1 4.5.3 [tr.meta.unary.prop]
+ TR1 4.6 [tr.meta.rel]
+ TR1 4.7 [tr.meta.trans]
+ TR1 4.7.1 [tr.meta.trans.cv]
+ TR1 4.7.2 [tr.meta.trans.ref]
+ TR1 4.7.3 [tr.meta.trans.arr]
+ TR1 4.7.4 [tr.meta.trans.ptr]
+ TR1 4.8 [tr.meta.trans.other]
+ TR1 4.9 [tr.meta.req]
+TR1 5 [tr.num]
+ TR1 5.1 [tr.rand]
+ TR1 5.1.1 [tr.rand.req]
+ TR1 5.1.2 [tr.rand.synopsis]
+ TR1 5.1.3 [tr.rand.var]
+ TR1 5.1.4 [tr.rand.eng]
+ TR1 5.1.4.1 [tr.rand.eng.lcong]
+ TR1 5.1.4.2 [tr.rand.eng.mers]
+ TR1 5.1.4.3 [tr.rand.eng.sub]
+ TR1 5.1.4.4 [tr.rand.eng.sub1]
+ TR1 5.1.4.5 [tr.rand.eng.disc]
+ TR1 5.1.4.6 [tr.rand.eng.xor]
+ TR1 5.1.5 [tr.rand.predef]
+ TR1 5.1.6 [tr.rand.device]
+ TR1 5.1.7 [tr.rand.dist]
+ TR1 5.1.7.1 [tr.rand.dist.iunif]
+ TR1 5.1.7.2 [tr.rand.dist.bern]
+ TR1 5.1.7.3 [tr.rand.dist.geom]
+ TR1 5.1.7.4 [tr.rand.dist.pois]
+ TR1 5.1.7.5 [tr.rand.dist.bin]
+ TR1 5.1.7.6 [tr.rand.dist.runif]
+ TR1 5.1.7.7 [tr.rand.dist.exp]
+ TR1 5.1.7.8 [tr.rand.dist.norm]
+ TR1 5.1.7.9 [tr.rand.dist.gamma]
+ TR1 5.2 [tr.num.sf]
+ TR1 5.2.1 [tr.num.sf.cmath]
+ TR1 5.2.1.1 [tr.num.sf.Lnm]
+ TR1 5.2.1.2 [tr.num.sf.Plm]
+ TR1 5.2.1.3 [tr.num.sf.beta]
+ TR1 5.2.1.4 [tr.num.sf.ellK]
+ TR1 5.2.1.5 [tr.num.sf.ellEx]
+ TR1 5.2.1.6 [tr.num.sf.ellPx]
+ TR1 5.2.1.7 [tr.num.sf.conhyp]
+ TR1 5.2.1.8 [tr.num.sf.I]
+ TR1 5.2.1.9 [tr.num.sf.J]
+ TR1 5.2.1.10 [tr.num.sf.K]
+ TR1 5.2.1.11 [tr.num.sf.N]
+ TR1 5.2.1.12 [tr.num.sf.ellF]
+ TR1 5.2.1.13 [tr.num.sf.ellE]
+ TR1 5.2.1.14 [tr.num.sf.ellP]
+ TR1 5.2.1.15 [tr.num.sf.ei]
+ TR1 5.2.1.16 [tr.num.sf.Hn]
+ TR1 5.2.1.17 [tr.num.sf.hyper]
+ TR1 5.2.1.18 [tr.num.sf.Ln]
+ TR1 5.2.1.19 [tr.num.sf.Pl]
+ TR1 5.2.1.20 [tr.num.sf.riemannzeta]
+ TR1 5.2.1.21 [tr.num.sf.j]
+ TR1 5.2.1.22 [tr.num.sf.Ylm]
+ TR1 5.2.1.23 [tr.num.sf.n]
+ TR1 5.2.2 [tr.num.sf.mathh]
+TR1 6 [tr.cont]
+ TR1 6.1 [tr.tuple]
+ TR1 6.1.1 [tr.tuple.synopsis]
+ TR1 6.1.2 [tr.tuple.synopsis.pair]
+ TR1 6.1.3 [tr.tuple.tuple]
+ TR1 6.1.3.1 [tr.tuple.cnstr]
+ TR1 6.1.3.2 [tr.tuple.creation]
+ TR1 6.1.3.3 [tr.tuple.helper]
+ TR1 6.1.3.4 [tr.tuple.elem]
+ TR1 6.1.3.5 [tr.tuple.rel]
+ TR1 6.1.4 [tr.tuple.pairs]
+ TR1 6.2 [tr.array]
+ TR1 6.2.1 [tr.array.syn]
+ TR1 6.2.2 [tr.array.array]
+ TR1 6.2.2.1 [tr.array.cons]
+ TR1 6.2.2.2 [tr.array.special]
+ TR1 6.2.2.3 [tr.array.size]
+ TR1 6.2.2.4 [tr.array.zero]
+ TR1 6.2.2.5 [tr.array.tuple]
+ TR1 6.3 [tr.hash]
+ TR1 6.3.1 [tr.unord.req]
+ TR1 6.3.1.1 [tr.unord.req.except]
+ TR1 6.3.2 [tr.unord.fun.syn]
+ TR1 6.3.3 [tr.unord.hash]
+ TR1 6.3.4 [tr.unord.unord]
+ TR1 6.3.4.1 [tr.unord.syn.set]
+ TR1 6.3.4.2 [tr.unord.syn.map]
+ TR1 6.3.4.3 [tr.unord.set]
+ TR1 6.3.4.3.1 [tr.unord.set.cnstr]
+ TR1 6.3.4.3.2 [tr.unord.set.swap]
+ TR1 6.3.4.4 [tr.unord.map]
+ TR1 6.3.4.4.1 [tr.unord.map.cnstr]
+ TR1 6.3.4.4.2 [tr.unord.map.elem]
+ TR1 6.3.4.4.3 [tr.unord.map.swap]
+ TR1 6.3.4.5 [tr.unord.multiset]
+ TR1 6.3.4.5.1 [tr.unord.multiset.cnstr]
+ TR1 6.3.4.5.2 [tr.unord.multiset.swap]
+ TR1 6.3.4.6 [tr.unord.multimap]
+ TR1 6.3.4.6.1 [tr.unord.multimap.cnstr]
+ TR1 6.3.4.6.2 [tr.unord.multimap.swap]
+TR1 7 [tr.re]
+ TR1 7.1 [tr.re.def]
+ TR1 7.2 [tr.re.req]
+ TR1 7.3 [tr.re.sum]
+ TR1 7.4 [tr.re.syn]
+ TR1 7.5 [tr.re.const]
+ TR1 7.5.1 [tr.re.synopt]
+ TR1 7.5.2 [tr.re.matchflag]
+ TR1 7.5.3 [tr.re.err]
+ TR1 7.6 [tr.re.badexp]
+ TR1 7.7 [tr.re.traits]
+ TR1 7.8 [tr.re.regex]
+ TR1 7.8.1 [tr.re.regex.const]
+ TR1 7.8.2 [tr.re.regex.construct]
+ TR1 7.8.3 [tr.re.regex.assign]
+ TR1 7.8.4 [tr.re.regex.operations]
+ TR1 7.8.5 [tr.re.regex.locale]
+ TR1 7.8.6 [tr.re.regex.swap]
+ TR1 7.8.7 [tr.re.regex.nonmemb]
+ TR1 7.8.7.1 [tr.re.regex.nmswap.]
+ TR1 7.9 [tr.re.submatch]
+ TR1 7.9.1 [tr.re.submatch.members]
+ TR1 7.9.2 [tr.re.submatch.op]
+ TR1 7.10 [tr.re.results]
+ TR1 7.10.1 [tr.re.results.const]
+ TR1 7.10.2 [tr.re.results.size]
+ TR1 7.10.3 [tr.re.results.acc]
+ TR1 7.10.4 [tr.re.results.form]
+ TR1 7.10.5 [tr.re.results.all]
+ TR1 7.10.1 [tr.re.results.swap]
+ TR1 7.11 [tr.re.alg]
+ TR1 7.11.1 [tr.re.except]
+ TR1 7.11.2 [tr.re.alg.match]
+ TR1 7.11.3 [tr.re.alg.search]
+ TR1 7.11.4 [tr.re.alg.replace]
+ TR1 7.12 [tr.re.iter]
+ TR1 7.12.1 [tr.re.regiter]
+ TR1 7.12.1.1 [tr.re.regiter.cnstr]
+ TR1 7.12.1.2 [tr.re.regiter.comp]
+ TR1 7.12.1.3 [tr.re.regiter.deref]
+ TR1 7.12.1.4 [tr.re.regiter.incr]
+ TR1 7.12.2 [tr.re.tokiter]
+ TR1 7.12.2.1 [tr.re.tokiter.cnstr]
+ TR1 7.12.2.2 [tr.re.tokiter.comp]
+ TR1 7.12.2.3 [tr.re.tokiter.deref]
+ TR1 7.12.2.4 [tr.re.tokiter.incr]
+ TR1 7.13 [tr.re.grammar]
+TR1 8 [tr.c99]
+ TR1 8.1 [tr.c99.cmplx]
+ TR1 8.1.1 [tr.c99.cmplx.syn]
+ TR1 8.1.2 [tr.c99.cmplx.acos]
+ TR1 8.1.3 [tr.c99.cmplx.asin]
+ TR1 8.1.4 [tr.c99.cmplx.atan]
+ TR1 8.1.5 [tr.c99.cmplx.acosh]
+ TR1 8.1.6 [tr.c99.cmplx.asinh]
+ TR1 8.1.7 [tr.c99.cmplx.atanh]
+ TR1 8.1.8 [tr.c99.cmplx.fabs]
+ TR1 8.1.9 [tr.c99.cmplx.over]
+ TR1 8.2 [tr.c99.ccmplx]
+ TR1 8.3 [tr.c99.cmplxh]
+ TR1 8.4 [tr.c99.cctype]
+ TR1 8.4.1 [tr.c99.cctype.syn]
+ TR1 8.4.2 [tr.c99.cctype.blank]
+ TR1 8.5 [tr.c99.ctypeh]
+ TR1 8.6 [tr.c99.cfenv]
+ TR1 8.6.1 [tr.c99.cfenv.syn]
+ TR1 8.6.2 [tr.c99.cfenv.def]
+ TR1 8.7 [tr.c99.fenv]
+ TR1 8.8 [tr.c99.cfloat]
+ TR1 8.9 [tr.c99.floath]
+ TR1 8.10 [tr.c99.ios]
+ TR1 8.10.1 [tr.c99.ios.syn]
+ TR1 8.10.2 [tr.c99.ios.hex]
+ TR1 8.11 [tr.c99.cinttypes]
+ TR1 8.11.1 [tr.c99.cinttypes.syn]
+ TR1 8.11.2 [tr.c99.cinttypes.def]
+ TR1 8.12 [tr.c99.inttypesh]
+ TR1 8.13 [tr.c99.climits]
+ TR1 8.14 [tr.c99.limitsh]
+ TR1 8.15 [tr.c99.locale]
+ TR1 8.16 [tr.c99.cmath]
+ TR1 8.16.1 [tr.c99.cmath.syn]
+ TR1 8.16.2 [tr.c99.cmath.def]
+ TR1 8.16.3 [tr.c99.cmath.tmpl]
+ TR1 8.16.4 [tr.c99.cmath.over]
+ TR1 8.17 [tr.c99.mathh]
+ TR1 8.18 [tr.c99.cstdarg]
+ TR1 8.19 [tr.c99.stdargh]
+ TR1 8.20 [tr.c99.cbool]
+ TR1 8.21 [tr.c99.boolh]
+ TR1 8.22 [tr.c99.cstdint]
+ TR1 8.22.1 [tr.c99.cstdint.syn]
+ TR1 8.22.2 [tr.c99.cstdint.def]
+ TR1 8.23 [tr.c99.stdinth]
+ TR1 8.24 [tr.c99.cstdio]
+ TR1 8.24.1 [tr.c99.cstdio.syn]
+ TR1 8.24.2 [tr.c99.cstdio.def]
+ TR1 8.24.3 [tr.c99.cstdio.spec]
+ TR1 8.24.4 [tr.c99.stdioh]
+ TR1 8.25 [tr.c99.cstdlib]
+ TR1 8.25.1 [tr.c99.cstdlib.syn]
+ TR1 8.25.2 [tr.c99.cstdlib.def]
+ TR1 8.25.3 [tr.c99.cstdlib.abs]
+ TR1 8.25.4 [tr.c99.cstdlib.div]
+ TR1 8.26 [tr.c99.stdlibh]
+ TR1 8.27 [tr.c99.ctgmath]
+ TR1 8.28 [tr.c99.tgmathh]
+ TR1 8.29 [tr.c99.ctime]
+ TR1 8.30 [tr.c99.cwchar]
+ TR1 8.30.1 [tr.c99.cwchar.syn]
+ TR1 8.30.2 [tr.c99.cwchar.def]
+ TR1 8.30.3 [tr.c99.cwchar.spec]
+ TR1 8.31 [tr.c99.wcharh]
+ TR1 8.32 [tr.c99.cwctype]
+ TR1 8.32.1 [tr.c99.cwctype.syn]
+ TR1 8.32.2 [tr.c99.cwctype.iswblank]
+ TR1 8.33 [tr.c99.wctypeh]
+TR1 A [tr.limits]
+
+TRDecimal 1 [trdec.intro]
+ TRDecimal 1.1 [trdec.model]
+ TRDecimal 1.2 [trdec.encodings]
+ TRDecimal 1.3 [trdec.refs]
+TRDecimal 2 [trdec.conventions]
+ TRDecimal 2.1 [trdec.relation.intro]
+ TRDecimal 2.2 [trdec.relation.tr1]
+ TRDecimal 2.3 [trdec.categories]
+ TRDecimal 2.4 [trdec.namespace]
+TRDecimal 3 [trdec.types]
+ TRDecimal 3.1 [trdec.types.encodings]
+ TRDecimal 3.2 [trdec.types.types]
+ TRDecimal 3.2.1 [trdec.types.types.synopsis]
+ TRDecimal 3.2.2 [trdec.types.types.decimal32]
+ TRDecimal 3.2.2.1 [trdec.types.types.decimal32.cons]
+ TRDecimal 3.2.2.2 [trdec.types.types.decimal32.conv.float]
+ TRDecimal 3.2.2.3 [trdec.types.types.decimal32.conv.from.int]
+ TRDecimal 3.2.2.4 [trdec.types.types.decimal32.conv.to.int]
+ TRDecimal 3.2.2.5 [trdec.types.types.decimal32.incr]
+ TRDecimal 3.2.2.6 [trdec.types.types.decimal32.comp.ass]
+ TRDecimal 3.2.3 [trdec.types.types.decimal64]
+ TRDecimal 3.2.3.1 [trdec.types.types.decimal64.cons]
+ TRDecimal 3.2.3.2 [trdec.types.types.decimal64.float]
+ TRDecimal 3.2.3.3 [trdec.types.types.decimal64.from.int]
+ TRDecimal 3.2.3.4 [trdec.types.types.decimal64.to.int]
+ TRDecimal 3.2.3.5 [trdec.types.types.decimal64.incr]
+ TRDecimal 3.2.3.6 [trdec.types.types.decimal64.comp.ass]
+ TRDecimal 3.2.4 [trdec.types.types.decimal128]
+ TRDecimal 3.2.4.1 [trdec.types.types.decimal128.cons]
+ TRDecimal 3.2.4.2 [trdec.types.types.decimal128.float]
+ TRDecimal 3.2.4.3 [trdec.types.types.decimal128.from.int]
+ TRDecimal 3.2.4.4 [trdec.types.types.decimal128.to.int]
+ TRDecimal 3.2.4.5 [trdec.types.types.decimal128.incr]
+ TRDecimal 3.2.4.6 [trdec.types.types.decimal128.comp.ass]
+ TRDecimal 3.2.5 [trdec.types.types.init]
+ TRDecimal 3.2.6 [trdec.types.types.conv.float]
+ TRDecimal 3.2.7 [trdec.types.types.unary]
+ TRDecimal 3.2.8 [trdec.types.types.binary]
+ TRDecimal 3.2.9 [trdec.types.types.comp]
+ TRDecimal 3.2.10 [trdec.types.types.input]
+ TRDecimal 3.2.11 [trdec.types.types.output]
+ TRDecimal 3.3 [trdec.types.limits]
+ TRDecimal 3.4 [trdec.types.cdecfloat]
+ TRDecimal 3.4.1 [trdec.types.cdecfloat.synopsis]
+ TRDecimal 3.4.2 [trdec.types.decfloat.h.synopsis]
+ TRDecimal 3.4.3 [trdec.types.cdecfloat.max.value]
+ TRDecimal 3.4.4 [trdec.types.cdecfloat.epsilon]
+ TRDecimal 3.4.5 [trdec.types.cdecfloat.min.normal.value]
+ TRDecimal 3.4.6 [trdec.types.cdecfloat.min.subnormal.value]
+ TRDecimal 3.4.7 [trdec.types.cdecfloat.eval.format]
+ TRDecimal 3.5 [trdec.types.cfenv]
+ TRDecimal 3.5.1 [trdec.types.cfenv.synopsis]
+ TRDecimal 3.5.2 [trdec.types.cfenv.round]
+ TRDecimal 3.5.3 [trdec.types.cfenv.fe_dec_getround]
+ TRDecimal 3.5.4 [trdec.types.cfenv.fe_dec_setround]
+ TRDecimal 3.5.5 [trdec.types.cfenv.fenv.h]
+ TRDecimal 3.6 [trdec.types.cmath]
+ TRDecimal 3.6.1 [trdec.types.cmath.synopsis]
+ TRDecimal 3.6.2 [trdec.types.cmath.macros]
+ TRDecimal 3.6.3 [trdec.types.cmath.eval.format]
+ TRDecimal 3.6.4 [trdec.types.cmath.samequantum]
+ TRDecimal 3.6.5 [trdec.types.cmath.quantize]
+ TRDecimal 3.6.6 [trdec.types.cmath.elementary]
+ TRDecimal 3.6.6.1 [trdec.types.cmath.elementary.abs]
+ TRDecimal 3.6.7 [trdec.types.cmath.math.h]
+ TRDecimal 3.6.7.1 [trdec.types.cmath.math.h.synopsis]
+ TRDecimal 3.7 [trdec.types.cstdio]
+ TRDecimal 3.8 [trdec.types.cstdlib]
+ TRDecimal 3.8.1 [trdec.types.cstdlib.synopsis]
+ TRDecimal 3.8.2 [trdec.types.cstdlib.strtod]
+ TRDecimal 3.8.3 [trdec.types.cstdlib.stdlib.h]
+ TRDecimal 3.9 [trdec.types.cwchar]
+ TRDecimal 3.9.1 [trdec.types.cwchar.synopsis]
+ TRDecimal 3.9.2 [trdec.types.cwchar.wcstod]
+ TRDecimal 3.9.3 [trdec.types.cwchar.wchar.h]
+ TRDecimal 3.10 [trdec.types.facets]
+ TRDecimal 3.10.1 [trdec.types.facets.locale]
+ TRDecimal 3.10.2 [trdec.types.facets.extended_num_get]
+ TRDecimal 3.10.2.1 [trdec.types.facets.extended_num_get.mem]
+ TRDecimal 3.10.2.2 [trdec.types.facets.extended_num_get.virt]
+ TRDecimal 3.10.3 [trdec.types.facets.extended_num_put]
+ TRDecimal 3.10.3.1 [trdec.types.facets.extended_num_put.mem]
+ TRDecimal 3.10.3.2 [trdec.types.facets.extended_num_put.virt]
+ TRDecimal 3.11 [trdec.types.traits]
+ TRDecimal 3.11.1 [trdec.types.traits.synopsis]
+ TRDecimal 3.11.2 [trdec.types.traits.is_decimal_floating_point]
+ TRDecimal 3.12 [trdec.types.hash]
+ TRDecimal 3.12.1 [trdec.types.hash.synopsis]
+ TRDecimal 3.12.2 [trdec.types.hash.spec]
+TRDecimal 4 [trdec.compat]
+ TRDecimal 4.1 [trdec.compat.decfloat.h]
+ TRDecimal 4.2 [trdec.compat.literals]
+ TRDecimal 4.3 [trdec.compat.conv]
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk