From 88b66f82aae2d7784002b07bfc7877932da3ec94 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 19 Mar 2023 00:47:11 +0900 Subject: fix(content): fix XML notations --- .../index.html | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes') diff --git a/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html b/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html index dc9d084..76806ba 100644 --- a/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html +++ b/public/posts/2021-10-02/cpp-you-can-use-keywords-in-attributes/index.html @@ -9,7 +9,7 @@ 【C++】 属性構文の属性名にはキーワードが使える | REPL: Rest-Eat-Program Loop - + @@ -57,7 +57,7 @@

- この記事は Qiita から移植してきたものです。 元 URL: https://qiita.com/nsfisis/items/94090937bcf860cfa93b + この記事は Qiita から移植してきたものです。 元 URL: https://qiita.com/nsfisis/items/94090937bcf860cfa93b

@@ -66,7 +66,7 @@

- タイトル落ち。まずはこのコードを見て欲しい。 + タイトル落ち。まずはこのコードを見て欲しい。

#include <iostream>
@@ -86,25 +86,25 @@
 [[virtual]] [[void]] [[volatile]] [[wchar_t]] [[while]] [[xor]] [[xor_eq]]
 // [[using]]
 int main() {
-std::cout << "Hello, World!" << std::endl;
+    std::cout << "Hello, World!" << std::endl;
 }

- コンパイラのバージョン $ clang++ –version Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin + コンパイラのバージョン $ clang++ –version Apple clang version 11.0.0 (clang-1100.0.33.8) Target: x86_64-apple-darwin19.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

- コンパイルコマンド (C17指定) $ clang –std=c++17 hoge.cpp + コンパイルコマンド (C17指定) $ clang –std=c++17 hoge.cpp

- この記事から得られるものはこれ以上ないので以下は蛇足になる。 + この記事から得られるものはこれ以上ないので以下は蛇足になる。

- 別件で cppreference.com の identifier のページ を読んでいた時、次の文が目に止まった。 + 別件で cppreference.com の identifier のページ を読んでいた時、次の文が目に止まった。

@@ -121,40 +121,40 @@ std::cout << "Hello, World!" &l

- キーワードでも属性として指定する場合は非キーワードとして使えるらしい。 実際にやってみる。 + キーワードでも属性として指定する場合は非キーワードとして使えるらしい。 実際にやってみる。

- 同サイトの keywords のページ から一覧を拝借し、上のコードが出来上がった (C++17 においてキーワードでないものなど、一部省いている)。 大量の警告 (unknown attribute `〇〇' ignored) がコンパイラから出力されるが、コンパイルできる。 + 同サイトの keywords のページ から一覧を拝借し、上のコードが出来上がった (C++17 においてキーワードでないものなど、一部省いている)。 大量の警告 (unknown attribute `〇〇' ignored) がコンパイラから出力されるが、コンパイルできる。

- 上のコードでは [[using]] をコメントアウトしているが、これは using キーワードのみ属性構文の中で意味を持つからであり、このコメントアウトを外すとコンパイルに失敗する。 + 上のコードでは [[using]] をコメントアウトしているが、これは using キーワードのみ属性構文の中で意味を持つからであり、このコメントアウトを外すとコンパイルに失敗する。

// using の例
 [[using foo: attr1, attr2]] int x; // [[foo::attr1, foo::attr2]] の糖衣構文

- C++17 の仕様も見てみる (正確には標準化前のドラフト)。 + C++17 の仕様も見てみる (正確には標準化前のドラフト)。

- 引用元: https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4 + 引用元: https://timsong-cpp.github.io/cppwp/n4659/dcl.attr#grammar-4

- If a keyword or an alternative token that satisfies the syntactic requirements of an identifier is contained in an attribute-token, it is considered an identifier. + If a keyword or an alternative token that satisfies the syntactic requirements of an identifier is contained in an attribute-token, it is considered an identifier.

- 「identifier の構文上の要件を満たすキーワードまたは代替トークンが attribute-token に含まれている場合、identifier とみなされる」とある。どうやら間違いないようだ。 + 「identifier の構文上の要件を満たすキーワードまたは代替トークンが attribute-token に含まれている場合、identifier とみなされる」とある。どうやら間違いないようだ。

- ところで、代替トークン (alternative token) とは and (&) や bitor (|) などのことだが、identifier の構文上の要件を満たさないような代替トークンなどあるのか? 疑問に思って調べたところ、代替トークンという語にはダイグラフも含まれるらしい (参考: 同ドラフト) + ところで、代替トークン (alternative token) とは and (&) や bitor (|) などのことだが、identifier の構文上の要件を満たさないような代替トークンなどあるのか? 疑問に思って調べたところ、代替トークンという語にはダイグラフも含まれるらしい (参考: 同ドラフト)

- 「identifier の構文上の要件を満たさないような代替トークン」はこれらが当てはまると思われる。 + 「identifier の構文上の要件を満たさないような代替トークン」はこれらが当てはまると思われる。

- 調べた感想: 字句解析器か構文解析器が辛そう + 調べた感想: 字句解析器か構文解析器が辛そう

-- cgit v1.2.3-70-g09d2