C++17 最新進(jìn)展報(bào)告
C++標(biāo)準(zhǔn)委員會(huì)最近在夏威夷的科納召開(kāi)了一次會(huì)議,大家可能關(guān)心***的進(jìn)展,但是按照以往的情況,某些文件需要很久才會(huì)公開(kāi)。會(huì)議進(jìn)行的時(shí)候,大 家都在忙著修訂自己的文件,會(huì)議之后,大會(huì)會(huì)收集改好的文件,在幾周之后發(fā)布。但是這一次,委員會(huì)修改了他們的系統(tǒng),所以得到早些版本的文件非常簡(jiǎn)單,這些郵件就是公開(kāi)的。
我從官方收集與組織了這些信息,沒(méi)有任何我個(gè)人的主觀評(píng)論。如果你想知道這次會(huì)議的主要內(nèi)容,請(qǐng)閱讀下面的內(nèi)容(我已經(jīng)知道了絕大多數(shù)關(guān)于C++17庫(kù)的內(nèi)容,但是要將其全部寫(xiě)出來(lái)還是需要一定的時(shí)間)
C++17核心庫(kù)文件
-
P0001R1 棄用register關(guān)鍵字
-
P0002R1 bool類(lèi)型不再支持++運(yùn)算符
-
P0012R1 異常成為類(lèi)型系統(tǒng)的一部分,第五版
-
P0061R1 支持__has_include
-
P0134R0 引入非靜態(tài)成員變量的拷貝構(gòu)造函數(shù)//not sure
-
P0136R1 重寫(xiě)繼承構(gòu)造器(core issue 1941 et al)
-
P0160R0 刪除一元運(yùn)算符的預(yù)設(shè)值//Wording for removing defaults for unary folds
C++17庫(kù)相關(guān)文件
-
P0004R1 棄用過(guò)時(shí)的iostreams的別名
-
P0006R0 采用基于標(biāo)準(zhǔn)庫(kù)規(guī)范的類(lèi)型特征變量模板
-
P0092R1 優(yōu)化
-
P0007R1 Constant View:一個(gè)::as_const 的輔助函數(shù)模板
-
P0156R0 可變的lock_guard (Rev. 3)
-
P0074R0 使std::owner_less更加靈活
-
P0013R1 邏輯運(yùn)算符類(lèi)型特征 (revision 1)
庫(kù)基本規(guī)范 第二版文件
-
N4531 替換std::rand,版本三
-
P0013R1 邏輯運(yùn)算符類(lèi)型特征 (revision 1)[C++17投票通過(guò)]
-
這些文件將會(huì)應(yīng)用于N4529草案,然后進(jìn)行擬議草案技術(shù)規(guī)范的投票。
并發(fā)規(guī)范
-
P0159R0 將會(huì)作為并發(fā)技術(shù)規(guī)范發(fā)布,屆時(shí)可能稍作改動(dòng)。
并行規(guī)范 v2
-
N4505草案和P0155R0的”Task Block R5”負(fù)責(zé)這項(xiàng)工作。
網(wǎng)絡(luò)規(guī)范
-
P0112R1草案負(fù)責(zé)這想工作。
范圍規(guī)范
-
P0021R0草案負(fù)責(zé)這項(xiàng)工作。
核心主題
-
1274.常見(jiàn)的非終結(jié)符表達(dá)式和內(nèi)嵌初始化列表
-
1391.非推導(dǎo)模板參數(shù)到參數(shù)類(lèi)型的轉(zhuǎn)化
-
1722.lambda函數(shù)指針轉(zhuǎn)換函數(shù)應(yīng)該不例外嗎?
-
1847.部分排序時(shí)聲明一致性
-
1863.拋出對(duì)象的類(lèi)型應(yīng)該支持std::current_exception()
-
1949.”sequenced after”代替”sequenced before”
-
1975.允許聲明異常類(lèi)型
-
1981.隱式和顯式的上下文轉(zhuǎn)換
-
1990.decl-specifier-seq造成的歧義
-
2000.#include之外的頭文件名稱
-
2004.常亮表達(dá)式中有可變成員的變量
-
2006.Cv-qualified的void類(lèi)型
-
2015.虛函數(shù)的odr-use
-
2016.類(lèi)型轉(zhuǎn)換函數(shù)的描述中可能存在的歧義
-
2019.存儲(chǔ)時(shí)間描述中成員引用的省略
-
2024.依賴類(lèi)型和未解包的參數(shù)包
-
2026.Zero-initialization和constexpr
-
2027.指定多個(gè)alignas的需求不明
-
2031.&&的不兼容
-
2052.模板參數(shù)推導(dǎo)vs重載操作符
-
2075.傳遞短初始化列表給數(shù)組引用參數(shù)
-
2101.對(duì)類(lèi)型和值的依賴的錯(cuò)誤說(shuō)明
-
2120.數(shù)組作為標(biāo)準(zhǔn)布局類(lèi)的***個(gè)非靜態(tài)成員變量
庫(kù)主題
-
1169.num_get不能和strto*完全兼容
-
2072.緩沖區(qū)容量定義不明確
-
2101.一些類(lèi)型轉(zhuǎn)換可能產(chǎn)生非預(yù)期的類(lèi)型
-
2111.處理異常時(shí)可能調(diào)用那些已經(jīng)刪除的句柄?
-
2119.擴(kuò)展int類(lèi)型缺少哈希函數(shù)
-
2127.帶raw_storage_iterator的Move-construction
-
2133.重載逗號(hào)迭代器
-
2156.無(wú)序容器的reserve(n)保存的是n-1個(gè)元素
-
2218.容器如何使用allocator_traits::construct()不夠明確
-
2219.INVOKE-ing一個(gè)帶有reference_wrapper的指針作為對(duì)象表達(dá)式
-
2224.不活躍對(duì)象的狀態(tài)問(wèn)題
-
2234.assert()應(yīng)該允許在常亮表達(dá)式中使用
-
2244.關(guān)于basic_istream::seekg的issue
-
2250.Library Issue 2207中的Follow-up
-
2259.17.6.5.5規(guī)則中有關(guān)成員函數(shù)的問(wèn)題
-
2273.regex_match的歧義
-
2336.is_trivially_constructible/is_trivially_assignable結(jié)果永遠(yuǎn)是false
-
2353.std::next限制過(guò)度
-
2367.pair和tuple無(wú)參數(shù)時(shí)不兼容is_constructible
-
2380.<cstdlib>應(yīng)該提供long ::abs(long) 和long long ::abs(long long)嗎?
-
2384.分配器的解除函數(shù)需要更好的規(guī)范
-
2385.function::assign分配器參數(shù)無(wú)意義
-
2435.reference_wrapper::operator()的標(biāo)記應(yīng)該是被刪除
-
2447.分配器和Volatile-qualified值類(lèi)型
-
2462.std::ios_base::failure 被過(guò)度規(guī)范
-
2466.allocator_traits::max_size()默認(rèn)表現(xiàn)是錯(cuò)誤的
-
2469.map的[]操作符和unordered_map規(guī)則錯(cuò)誤
-
2473.basic_filebuf對(duì)C文件的兼容
-
2476.scoped_allocator_adaptor是不可分配的
-
2477.std::vector::erase()和std::deque::erase()的不一致
-
2483.throw_with_nested()應(yīng)該使用is_final
-
2484.rethrow_if_nested()是不可實(shí)現(xiàn)的
-
2485.常量tuple&&應(yīng)該重載get()
-
2486.mem_fn()應(yīng)該提供向前兼容
-
2487.bind()不應(yīng)該是cv-overloaded, 而應(yīng)該是const-overloaded
-
2489.mem_fn()應(yīng)該是noexcept的
-
2492.明確comp的需求
-
2495.沒(méi)有類(lèi)似異常安全元素的東西
Library Fundamentals TS v2 Issues
-
2494.[fund.ts.v2] ostream_joiner應(yīng)該是noexcept的
-
2500.[fund.ts.v2] fundts.memory.smartptr.shared.obs/6 應(yīng)該適用于cv-unqualified void
-
2515.[fund.ts.v2]observer_ptr的確定操作符不能匹配任何簡(jiǎn)介
-
2517.[fund.ts.v2] 兩個(gè)propagate_const assignment 操作符返回不正確的類(lèi)型
-
2526.[fund.ts]experimental::function::swap 條件不正確
更多信息
以上只是投票通過(guò)的部分記錄。每次的會(huì)議都會(huì)涉及很多工作,不會(huì)全都反映在文件上,比如,有關(guān)modules的熱烈討論文件中就沒(méi)有。雖然我?guī)缀趸怂械臅r(shí)間在庫(kù)工作組中,但是還是不能跟進(jìn)所有的內(nèi)容。最終版文件我會(huì)在Reddit分享各個(gè)模塊的進(jìn)展。
本文作者可以回答大多數(shù)有關(guān)庫(kù)的問(wèn)題,但是可能回復(fù)略有延遲。可以確定的是,庫(kù)的可用性提高了??雌饋?lái)一切都像小貓一樣溫順可愛(ài),但是如果你去看一 眼重載集合,就會(huì)發(fā)現(xiàn)這些模棱兩可的東西簡(jiǎn)直是災(zāi)難。LWG2451是作為標(biāo)準(zhǔn)庫(kù)定義的一個(gè)極好的例子,optional<string> opt_str = “meow”;現(xiàn)在還未實(shí)現(xiàn)。對(duì)于基本規(guī)范沒(méi)有什么問(wèn)題,但是optional的ship-stopper不符合國(guó)際標(biāo)準(zhǔn)。在這次會(huì)議上,LWG意識(shí)到一 些issue影響到了variant,問(wèn)題會(huì)牽扯到基本規(guī)范。當(dāng)然了,會(huì)議會(huì)解決這些問(wèn)題,你不必經(jīng)歷這些痛苦。