天天看點

C++17 最新進展C++17 最新進展

我從官方收集與組織了這些資訊,沒有任何我個人的主觀評論。如果你想知道這次會議的主要内容,請閱讀下面的内容(我已經知道了絕大多數關于c++17庫的内容,但是要将其全部寫出來還是需要一定的時間)

C++17 最新進展C++17 最新進展

<a></a>

p0001r1 棄用<code>register</code>關鍵字

p0002r1 <code>bool</code>類型不再支援<code>++</code>運算符

p0012r1 異常成為類型系統的一部分,第五版

p0061r1 支援<code>__has_include</code>

p0134r0 引入非靜态成員變量的拷貝構造函數//not sure

p0136r1 重寫繼承構造器(core issue 1941 et al)

p0160r0 删除一進制運算符的預設值//wording for removing defaults for unary folds

p0004r1 棄用過時的<code>iostreams</code>的别名

p0006r0 采用基于标準庫規範的類型特征變量模闆

p0092r1 優化

p0007r1 constant view:一個::as_const 的輔助函數模闆

p0156r0 可變的lock_guard (rev. 3)

p0074r0 使std::owner_less更加靈活

p0013r1 邏輯運算符類型特征 (revision 1)

n4531 替換std::rand,版本三

p0013r1 邏輯運算符類型特征 (revision 1)[c++17投票通過]

這些檔案将會應用于n4529草案,然後進行拟議草案技術規範的投票。

p0159r0 将會作為并發技術規範釋出,屆時可能稍作改動。

n4505草案和p0155r0的”task block r5”負責這項工作。

p0112r1草案負責這想工作。

p0021r0草案負責這項工作。

1274.常見的非終結符表達式和内嵌初始化清單

1391.非推導模闆參數到參數類型的轉化

1722.lambda函數指針轉換函數應該不例外嗎?

1847.部分排序時聲明一緻性

1863.抛出對象的類型應該支援std::current_exception()

1949.”sequenced after”代替”sequenced before”

1975.允許聲明異常類型

1981.隐式和顯式的上下文轉換

1990.decl-specifier-seq造成的歧義

2000.<code>#include</code>之外的頭檔案名稱

2004.常量表達式中有可變成員的變量

2006.cv-qualified的void類型

2015.虛函數的odr-use

2016.類型轉換函數的描述中可能存在的歧義

2019.存儲時間描述中成員引用的省略

2024.依賴類型和未解包的參數包

2026.zero-initialization和constexpr

2027.指定多個alignas的需求不明

2031.<code>&amp;&amp;</code>的不相容

2052.模闆參數推導vs重載操作符

2075.傳遞短初始化清單給數組引用參數

2101.對類型和值的依賴的錯誤說明

2120.數組作為标準布局類的第一個非靜态成員變量

1169.<code>num_get</code>不能和strto*完全相容

2072.緩沖區容量定義不明确

2101.一些類型轉換可能産生非預期的類型

2111.處理異常時可能調用那些已經删除的句柄?

2119.擴充int類型缺少哈希函數

2127.帶raw_storage_iterator的move-construction

2133.重載逗号疊代器

2156.無序容器的reserve(n)儲存的是n-1個元素

2218.容器如何使用allocator_traits::construct()不夠明确

2219.invoke-ing一個帶有reference_wrapper的指針作為對象表達式

2224.不活躍對象的狀态問題

2234.assert()應該允許在常亮表達式中使用

2244.關于basic_istream::seekg的issue

2250.library issue 2207中的follow-up

2259.17.6.5.5規則中有關成員函數的問題

2273.regex_match的歧義

2336.is_trivially_constructible/is_trivially_assignable結果永遠是false

2353.std::next限制過度

2367.pair和tuple無參數時不相容is_constructible

2380.<code>&lt;cstdlib&gt;</code>應該提供long ::abs(long) 和long long ::abs(long long)嗎?

2384.配置設定器的解除函數需要更好的規範

2385.function::assign配置設定器參數無意義

2435.reference_wrapper::operator()的标記應該是被删除

2447.配置設定器和volatile-qualified值類型

2462.<code>std::ios_base::failure</code> 被過度規範

2466.<code>allocator_traits::max_size()</code>預設表現是錯誤的

2469.map的[]操作符和unordered_map規則錯誤

2473.<code>basic_filebuf</code>對c檔案的相容

2476.<code>scoped_allocator_adaptor</code>是不可配置設定的

2477.<code>std::vector::erase()</code>和<code>std::deque::erase()</code>的不一緻

2483.<code>throw_with_nested()</code>應該使用is_final

2484.<code>rethrow_if_nested()</code>是不可實作的

2485.常量tuple&amp;&amp;應該重載get()

2486.<code>mem_fn()</code>應該提供向前相容

2487.<code>bind()</code>不應該是cv-overloaded, 而應該是const-overloaded

2489.<code>mem_fn()</code>應該是noexcept的

2492.明确comp的需求

2495.沒有類似異常安全元素的東西

2494.[fund.ts.v2] ostream_joiner應該是noexcept的

2500.[fund.ts.v2] fundts.memory.smartptr.shared.obs/6 應該适用于cv-unqualified void

2515.[fund.ts.v2]observer_ptr的确定操作符不能比對任何簡介

2517.[fund.ts.v2] 兩個propagate_const assignment 操作符傳回不正确的類型

2526.[fund.ts]experimental::function::swap 條件不正确

以上隻是投票通過的部分記錄。每次的會議都會涉及很多工作,不會全都反映在檔案上,比如,有關modules的熱烈讨論檔案中就沒有。雖然我幾乎花了所有的時間在庫工作組中,但是還是不能跟進所有的内容。最終版檔案我會在reddit分享各個子產品的進展。

本文作者可以回答大多數有關庫的問題,但是可能回複略有延遲。可以确定的是,庫的可用性提高了。看起來一切都像小貓一樣溫順可愛,但是如果你去看一眼重載集合,就會發現這些模棱兩可的東西簡直是災難。lwg2451是作為标準庫定義的一個極好的例子,<code>optional&lt;string&gt; opt_str = "meow";</code>現在還未實作。對于基本規範沒有什麼問題,但是<code>optional</code>的ship-stopper不符合國際标準。在這次會議上,lwg意識到一些issue影響到了<code>variant</code>,問題會牽扯到基本規範。當然了,會議會解決這些問題,你不必經曆這些痛苦。

本文來自雲栖社群合作夥伴“linux中國”,原文發表于2013-04-02.

繼續閱讀