爲類成員使用聲明僅允許作爲成員聲明的原因是什麼?我不能做使用內部類型的聲明
struct Outer
{
typedef int Inner;
};
void f()
{
// this doesn't work with C++14
using Outer::Inner;
}
,但我認爲這將是使用-陳述句引進宣佈其他地方到當前區域名稱的預期語義相當正交的。它是明確的C++標準
7.3.3/8的限制:using聲明的類成員須爲 成員聲明
,但我不知道爲什麼。
我認爲這使語言更加規則,如果它是允許內部類型(類型定義,類等),並定義爲相同
// using Outer::Inner should be identical to
using Inner = Outer::Inner
,這是相同的名稱空間的行爲。
我知道這個問題has been asked before,但接受的答案是被禁止的,因爲標準是這樣說的。我想知道它背後是否有任何技術原因。在一個評論,它說,
制定標準(因此所有的編譯器)更復雜的 處理,有一個方便的解決方法的不尋常的案件只是不 通過成本效益的測試。
我會說這是一個意見,而不是一個論點。改變它使語言變得更加統一是一個巨大的好處。現在,你必須教同樣的事情做不同的事情。如果刪除該子句,則標準將變得更簡單,這既是因爲尺寸縮小了,也是因爲刪除了(接縫任意)特殊情況。
更確切地說,我在尋找技術原因爲什麼這是不允許的,例如,這會造成模棱兩可或其他問題。
這也是被接受的答案。 Quote:'使標準(並因此所有的編譯器)更復雜,以處理一個有一個方便的解決方法不尋常的情況下,只是沒有通過成本效益測試。' – user2079303
@ user2079303我已經擴展了答案與我的論點爲什麼這情況並非如此。 – Jens
我沒有看到你正在尋找的東西,但這個問題還沒有被涵蓋。我正在關閉作爲一個笨蛋。如果你真的想得到更多的細節,請給它一個獎勵,但你不會得到任何。 –