![](/img/trans.png)
[英]How to define the declared function - template struct member with unnamed template arguments?
[英]Is it legal to define an unnamed struct?
以下代碼是否合法?:
struct
{
int x;
};
此代碼只是定義了一個未命名的結構。 我不打算創建這種類型的對象,也不需要以任何其他方式使用此結構。 它只是在源中出現,作為一些復雜的宏擴展的副作用。
雖然沒用,但我認為沒有問題。 只是另一段代碼可以編譯然后完全優化。
然而,在現實世界中,結果與我的期望完全不同:
GCC 8.3報告錯誤:
error:抽象聲明符'<unnamed struct>'用作聲明
Clang 8.0.0也報告錯誤:
錯誤:匿名結構和類必須是類成員
警告:聲明不聲明任何內容[-Wmissing-declarations]
只有MSVC 2017認為此類來源沒有問題。
所以,問題是:誰是對的? 標准中是否有明確禁止此類聲明的相關引用?
編輯:
該項目使用C ++ 11。 但是C ++ 98,C ++ 11和C ++ 17的錯誤消息是相同的。
不,這是不允許的。 GCC和Clang是對的。
根據N3337(C ++ 11最終草案)中的 [dcl.dcl] / 3(7聲明) ,類聲明必須以一個名稱引入程序。 例如,以下內容無效:
enum { };
typedef class { };
(注意:這不是C ++ 11獨有的。在N4140(C ++ 14最終草案)中,它是[dcl.dcl] / 5(7聲明) 。在N4659 (C ++ 17最終草案)中,它是[dcl.dcl] / 5(10份聲明) 。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.