template <auto N> auto func(auto x) { auto r = N + x; return r; } // 呼出し例 assert( func<1>(0.5) == 1.5 ); この記事では、C++言語仕様改定により導入された各autoキーワードの役割を説明します。同時に、該当用法が存在しなかった時代でもコンパイル可能なソースコードへの書換えも行います。 C++20時代 C++20では 関数パラメータ型にautoを書ける ようになります。これはC++言語仕様へのコンセプト(Concept)導入とともに追加された、関数テンプレート定義の短縮記法 です。
![4つのauto、4つのC++規格 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/3179efa234cc9ec3e2f0ce4d2a57bd445da16c9f/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9NCVFMyU4MSVBNCVFMyU4MSVBRWF1dG8lRTMlODAlODE0JUUzJTgxJUE0JUUzJTgxJUFFQyUyQiUyQiVFOCVBNiU4RiVFNiVBMCVCQyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9OWVhNjRlMzY4ZDM5MTMzZTMzMDFjZDgyYjFlZWViM2I%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB5b2hob3kmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWYxNTdlY2YwM2Y3YjQ5ZmVjYzY0N2I5Y2IzMjk2MmVh%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D346a177620cb24d2daf26bf898a6c009)