mirror of
https://github.com/nlohmann/json.git
synced 2026-10-18 03:58:12 +00:00
deploy: 26cfec34be
This commit is contained in:
1 parent
4ce072a05e
commit
9cd1c63d00
330 files changed
+5398
-1012
No files matched your search
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/code_of_conduct/" rel="canonical"><link href=../ rel=prev><link href=../contribution_guidelines/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Code of Conduct - JSON for Modern C++</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../css/custom.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#contributor-covenant-code-of-conduct class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Code of Conduct </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9Line truncated
|
||||
@@ -0,0 +1,8 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/contribution_guidelines/" rel="canonical"><link href=../code_of_conduct/ rel=prev><link href=../quality_assurance/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Contribution Guidelines - JSON for Modern C++</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../css/custom.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#contribution-guidelines class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Contribution Guidelines </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 1Line truncated
|
||||
$<span class=w> </span>cmake<span class=w> </span>--build<span class=w> </span>build<span class=w> </span>-j<span class=w> </span><span class=m>10</span>
|
||||
$<span class=w> </span>ctest<span class=w> </span>--test-dir<span class=w> </span>build<span class=w> </span>-j<span class=w> </span><span class=m>10</span>
|
||||
</code></pre></div> <p>The test suite should report:</p> <div class=highlight><pre><span></span><code>100% tests passed, 0 tests failed out of 98
|
||||
</code></pre></div> <h4 id=add-tests>Add tests<a class=headerlink href=#add-tests title="Permanent link">¶</a></h4> <p>The tests are located in <a href="https://github.com/nlohmann/json/tree/develop/tests/src"><code>tests/src/unit-*.cpp</code></a> and contain <a href="https://github.com/doctest/doctest/blob/master/doc/markdown/assertions.md">doctest assertions</a> like <code>CHECK</code>. The tests are structured along the features of the library or the nature of the tests. Usually, it should be clear from the context which existing file needs to be extended, and only very few cases require creating new test files.</p> <p>When fixing a bug, edit <code>unit-regression2.cpp</code> and add a section referencing the fixed issue.</p> <h4 id=exceptions>Exceptions<a class=headerlink href=#exceptions title="Permanent link">¶</a></h4> <p>When you test exceptions, please use <code>CHECK_THROWS_WITH_AS</code> which also takes the <code>what()</code> argument of the thrown exception into account.</p> <h4 id=coverage>Coverage<a class=headerlink href=#coverage title="Permanent link">¶</a></h4> <p>If test coverage decreases, an automatic warning comment will be posted on the pull request. You can access a code coverage report as artifact to the “Ubuntu” workflow.</p> <h3 id=update-the-documentation>Update the documentation<a class=headerlink href=#update-the-documentation title="Permanent link">¶</a></h3> <p>The <a href="https://json.nlohmann.me">main documentation</a> of the library is generated from the files <a href="https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs"><code>docs/mkdocs/docs</code></a>. This folder contains dedicated pages for <a href="https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/features">certain features</a>, a list of <a href="https://github.com/nlohmann/json/blob/develop/docs/mkdocs/docs/home/exceptions.md">all exceptions</a>, and an <a href="https://github.com/nlohmann/json/tree/develop/docs/mkdocs/docs/api">extensive <abbr title="Application Programming Interfaces">API</abbr> documentation</a> with details on every public <abbr title="Application Programming Interfaces">API</abbr> function.</p> <p>Build the documentation locally using:</p> <div class=highlight><pre><span></span><code>make<span class=w> </span>install_venv<span class=w> </span>-C<span class=w> </span>docs/mkdocs
|
||||
make<span class=w> </span>serve<span class=w> </span>-C<span class=w> </span>docs/mkdocs
|
||||
</code></pre></div> <p>The documentation will then available at <a href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a>. See the documentation of <a href="https://www.mkdocs.org">mkdocs</a> and <a href="https://squidfunk.github.io/mkdocs-material/">Material for MkDocs</a> for more information.</p> <h3 id=amalgamate-the-source-code>Amalgamate the source code<a class=headerlink href=#amalgamate-the-source-code title="Permanent link">¶</a></h3> <p>The single-header files <a href="https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp"><code>single_include/nlohmann/json.hpp</code></a> and <a href="https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json_fwd.hpp"><code>single_include/nlohmann/json_fwd.hpp</code></a> are <strong>generated</strong> from the source files in the <a href="https://github.com/nlohmann/json/tree/develop/include/nlohmann"><code>include/nlohmann</code> directory</a>. <strong>Do not</strong> edit the files directly; instead, modify the include/nlohmann sources and regenerate the files by executing:</p> <div class=highlight><pre><span></span><code>make<span class=w> </span>amalgamate
|
||||
</code></pre></div> <h2 id=recommended-documentation>Recommended documentation<a class=headerlink href=#recommended-documentation title="Permanent link">¶</a></h2> <ul> <li>The library’s <a href="https://github.com/nlohmann/json/blob/master/README.md">README file</a> is an excellent starting point to understand its functionality.</li> <li>The <a href="https://json.nlohmann.me">documentation page</a> is the reference documentation of the library.</li> <li><a href="https://datatracker.ietf.org/doc/html/rfc8259"><abbr title="Request for Comments">RFC</abbr> 8259</a> is the reference for the JavaScript Object Notation (<abbr title="JavaScript Object Notation">JSON</abbr>) Data Interchange Format.</li> </ul> <h2 id=please-dont>Please don't...<a class=headerlink href=#please-dont title="Permanent link">¶</a></h2> <p>Certain contributions are not helpful.</p> <h3 id=break-the-public-api>Break the public <abbr title="Application Programming Interfaces">API</abbr><a class=headerlink href=#break-the-public-api title="Permanent link">¶</a></h3> <p>We take pride in the library being used by <a href="https://json.nlohmann.me/home/customers/">numerous customers across various industries</a>. They all rely on the guarantees provided by <a href="https://semver.org">semantic versioning</a>. Please do not change the library such that the public <abbr title="Application Programming Interfaces">API</abbr> of the 3.x.y version is broken. This includes:</p> <ul> <li>Changing function signatures (altering parameter types, return types, number of parameters) or changing the const-ness of member functions.</li> <li>Removing functions.</li> <li>Renaming functions or classes.</li> <li>Changing exception handling.</li> <li>Changing exception ids.</li> <li>Changing access specifiers.</li> <li>Changing default arguments.</li> </ul> <p>Although these guidelines may seem restrictive, they are essential for maintaining the library’s utility.</p> <p>Breaking changes may be introduced when they are guarded with a feature macro such as <a href="https://json.nlohmann.me/api/macros/json_use_implicit_conversions/"><code>JSON_USE_IMPLICIT_CONVERSIONS</code></a> which allows to selectively change the behavior of the library. In next steps, the current behavior can then be deprecated. Using feature macros then allows users to test their code against the library in the next major release.</p> <h3 id=break-c11-language-conformance>Break C++11 language conformance<a class=headerlink href=#break-c11-language-conformance title="Permanent link">¶</a></h3> <p>This library is designed to work with C++11 and later. This means that any <a href="https://github.com/nlohmann/json/blob/master/README.md#supported-compilers">supported C++11 compiler</a> should compile the library without problems. Some compilers like <abbr title="GNU Compiler Collection">GCC</abbr> 4.7 (and earlier), Clang 3.3 (and earlier), or Microsoft Visual Studio 13.0 and earlier are known not to work due to missing or incomplete C++11 support.</p> <p>Please do not add features that do not work with the mentioned supported compilers. Please guard features from C++14 and later against the respective <a href="https://json.nlohmann.me/api/macros/json_has_cpp_11/"><code>JSON_HAS_CPP_14</code></a> macros.</p> <h3 id=break-json-conformance>Break <abbr title="JavaScript Object Notation">JSON</abbr> conformance<a class=headerlink href=#break-json-conformance title="Permanent link">¶</a></h3> <p>Please refrain from proposing changes that would <strong>break <a href="https://datatracker.ietf.org/doc/html/rfc8259"><abbr title="JavaScript Object Notation">JSON</abbr></a> conformance</strong>. If you propose a conformant extension of <abbr title="JavaScript Object Notation">JSON</abbr> to be supported by the library, please motivate this extension.</p> <h2 id=wanted>Wanted<a class=headerlink href=#wanted title="Permanent link">¶</a></h2> <p>The following areas really need contribution and are always welcomed:</p> <ul> <li>Extending the <strong>continuous integration</strong> toward more exotic compilers such as Android <abbr title="Native Development Kit">NDK</abbr>, Intel's Compiler, or the bleeding-edge versions Clang.</li> <li>Improving the efficiency of the <strong><abbr title="JavaScript Object Notation">JSON</abbr> parser</strong>. The current parser is implemented as a naive recursive descent parser with hand coded string handling. More sophisticated approaches like LALR parsers would be really appreciated. That said, parser generators like Bison or ANTLR do not play nice with single-header files -- I really would like to keep the parser inside the <code>json.hpp</code> header, and I am not aware of approaches similar to <a href="http://re2c.org"><code>re2c</code></a> for parsing.</li> <li>Extending and updating existing <strong>benchmarks</strong> to include (the most recent version of) this library. Though efficiency is not everything, speed and memory consumptiLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/governance/" rel="canonical"><link href=../quality_assurance/ rel=prev><link href=../security_policy/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Governance - JSON for Modern C++</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../css/custom.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#governance class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Governance </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div claLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/" rel="canonical"><link href=../api/macros/nlohmann_json_version_major/ rel=prev><link href=code_of_conduct/ rel=next><link rel=icon href=../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Community - JSON for Modern C++</title><link rel=stylesheet href=../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../css/custom.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#community class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Community </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search dataLine truncated
|
||||
@@ -0,0 +1,525 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/quality_assurance/" rel="canonical"><link href=../contribution_guidelines/ rel=prev><link href=../governance/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Quality assurance - JSON for Modern C++</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../css/custom.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#quality-assurance class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Quality assurance </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5Line truncated
|
||||
<span class=c># -Wno-c++98-compat The library targets C++11.</span>
|
||||
<span class=c># -Wno-c++98-compat-pedantic The library targets C++11.</span>
|
||||
<span class=c># -Wno-deprecated-declarations The library contains annotations for deprecated functions.</span>
|
||||
<span class=c># -Wno-extra-semi-stmt The library uses assert which triggers this warning.</span>
|
||||
<span class=c># -Wno-padded We do not care about padding warnings.</span>
|
||||
<span class=c># -Wno-covered-switch-default All switches list all cases and a default case.</span>
|
||||
<span class=c># -Wno-unsafe-buffer-usage Otherwise Doctest would not compile.</span>
|
||||
|
||||
<span class=nb>set</span><span class=p>(</span><span class=s>CLANG_CXXFLAGS</span>
|
||||
<span class=w> </span><span class=s>-Werror</span>
|
||||
<span class=w> </span><span class=s>-Weverything</span>
|
||||
<span class=w> </span><span class=s>-Wno-c++98-compat</span>
|
||||
<span class=w> </span><span class=s>-Wno-c++98-compat-pedantic</span>
|
||||
<span class=w> </span><span class=s>-Wno-deprecated-declarations</span>
|
||||
<span class=w> </span><span class=s>-Wno-extra-semi-stmt</span>
|
||||
<span class=w> </span><span class=s>-Wno-padded</span>
|
||||
<span class=w> </span><span class=s>-Wno-covered-switch-default</span>
|
||||
<span class=w> </span><span class=s>-Wno-unsafe-buffer-usage</span>
|
||||
<span class=p>)</span>
|
||||
</code></pre></div> </details> </li> <li> <p>On <abbr title="GNU Compiler Collection">GCC</abbr>, 300+ warnings are enabled with 8 exceptions.</p> <details class=abstract> <summary><abbr title="GNU Compiler Collection">GCC</abbr> warnings</summary> <div class=highlight><pre><span></span><code><span class=c># Warning flags determined for GCC 14.2.0 with https://github.com/nlohmann/gcc_flags:</span>
|
||||
<span class=c># Ignored GCC warnings:</span>
|
||||
<span class=c># -Wno-abi-tag We do not care about ABI tags.</span>
|
||||
<span class=c># -Wno-aggregate-return The library uses aggregate returns.</span>
|
||||
<span class=c># -Wno-long-long The library uses the long long type to interface with system functions.</span>
|
||||
<span class=c># -Wno-namespaces The library uses namespaces.</span>
|
||||
<span class=c># -Wno-nrvo Doctest triggers this warning.</span>
|
||||
<span class=c># -Wno-padded We do not care about padding warnings.</span>
|
||||
<span class=c># -Wno-system-headers We do not care about warnings in system headers.</span>
|
||||
<span class=c># -Wno-templates The library uses templates.</span>
|
||||
|
||||
<span class=nb>set</span><span class=p>(</span><span class=s>GCC_CXXFLAGS</span>
|
||||
<span class=w> </span><span class=s>-pedantic</span>
|
||||
<span class=w> </span><span class=s>-Werror</span>
|
||||
<span class=w> </span><span class=s>--all-warnings</span>
|
||||
<span class=w> </span><span class=s>--extra-warnings</span>
|
||||
<span class=w> </span><span class=s>-W</span>
|
||||
<span class=w> </span><span class=s>-WNSObject-attribute</span>
|
||||
<span class=w> </span><span class=s>-Wno-abi-tag</span>
|
||||
<span class=w> </span><span class=s>-Waddress</span>
|
||||
<span class=w> </span><span class=s>-Waddress-of-packed-member</span>
|
||||
<span class=w> </span><span class=s>-Wno-aggregate-return</span>
|
||||
<span class=w> </span><span class=s>-Waggressive-loop-optimizations</span>
|
||||
<span class=w> </span><span class=s>-Waligned-new=all</span>
|
||||
<span class=w> </span><span class=s>-Wall</span>
|
||||
<span class=w> </span><span class=s>-Walloc-size</span>
|
||||
<span class=w> </span><span class=s>-Walloc-zero</span>
|
||||
<span class=w> </span><span class=s>-Walloca</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-allocation-size</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-deref-before-check</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-double-fclose</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-double-free</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-exposure-through-output-file</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-exposure-through-uninit-copy</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-access-mode-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-double-close</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-leak</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-phase-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-type-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-use-after-close</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-fd-use-without-check</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-file-leak</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-free-of-non-heap</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-imprecise-fp-arithmetic</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-infinite-loop</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-infinite-recursion</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-jump-through-null</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-malloc-leak</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-mismatching-deallocation</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-null-argument</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-null-dereference</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-out-of-bounds</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-overlapping-buffers</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-possible-null-argument</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-possible-null-dereference</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-putenv-of-auto-var</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-shift-count-negative</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-shift-count-overflow</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-stale-setjmp-buffer</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-symbol-too-complex</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-allocation-size</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-array-index</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-assertion</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-divisor</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-offset</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-tainted-size</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-too-complex</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-undefined-behavior-strtok</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-unsafe-call-within-signal-handler</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-use-after-free</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-use-of-pointer-in-stale-stack-frame</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-use-of-uninitialized-value</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-va-arg-type-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-va-list-exhausted</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-va-list-leak</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-va-list-use-after-va-end</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-write-to-const</span>
|
||||
<span class=w> </span><span class=s>-Wanalyzer-write-to-string-literal</span>
|
||||
<span class=w> </span><span class=s>-Warith-conversion</span>
|
||||
<span class=w> </span><span class=s>-Warray-bounds=2</span>
|
||||
<span class=w> </span><span class=s>-Warray-compare</span>
|
||||
<span class=w> </span><span class=s>-Warray-parameter=2</span>
|
||||
<span class=w> </span><span class=s>-Wattribute-alias=2</span>
|
||||
<span class=w> </span><span class=s>-Wattribute-warning</span>
|
||||
<span class=w> </span><span class=s>-Wattributes</span>
|
||||
<span class=w> </span><span class=s>-Wbool-compare</span>
|
||||
<span class=w> </span><span class=s>-Wbool-operation</span>
|
||||
<span class=w> </span><span class=s>-Wbuiltin-declaration-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wbuiltin-macro-redefined</span>
|
||||
<span class=w> </span><span class=s>-Wc++0x-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++11-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++11-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++14-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++14-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++17-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++17-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++1z-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++20-compat</span>
|
||||
<span class=w> </span><span class=s>-Wc++20-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++23-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++26-extensions</span>
|
||||
<span class=w> </span><span class=s>-Wc++2a-compat</span>
|
||||
<span class=w> </span><span class=s>-Wcalloc-transposed-args</span>
|
||||
<span class=w> </span><span class=s>-Wcannot-profile</span>
|
||||
<span class=w> </span><span class=s>-Wcast-align</span>
|
||||
<span class=w> </span><span class=s>-Wcast-align=strict</span>
|
||||
<span class=w> </span><span class=s>-Wcast-function-type</span>
|
||||
<span class=w> </span><span class=s>-Wcast-qual</span>
|
||||
<span class=w> </span><span class=s>-Wcast-user-defined</span>
|
||||
<span class=w> </span><span class=s>-Wcatch-value=3</span>
|
||||
<span class=w> </span><span class=s>-Wchanges-meaning</span>
|
||||
<span class=w> </span><span class=s>-Wchar-subscripts</span>
|
||||
<span class=w> </span><span class=s>-Wclass-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wclass-memaccess</span>
|
||||
<span class=w> </span><span class=s>-Wclobbered</span>
|
||||
<span class=w> </span><span class=s>-Wcomma-subscript</span>
|
||||
<span class=w> </span><span class=s>-Wcomment</span>
|
||||
<span class=w> </span><span class=s>-Wcomments</span>
|
||||
<span class=w> </span><span class=s>-Wcomplain-wrong-lang</span>
|
||||
<span class=w> </span><span class=s>-Wconditionally-supported</span>
|
||||
<span class=w> </span><span class=s>-Wconversion</span>
|
||||
<span class=w> </span><span class=s>-Wconversion-null</span>
|
||||
<span class=w> </span><span class=s>-Wcoverage-invalid-line-number</span>
|
||||
<span class=w> </span><span class=s>-Wcoverage-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wcoverage-too-many-conditions</span>
|
||||
<span class=w> </span><span class=s>-Wcpp</span>
|
||||
<span class=w> </span><span class=s>-Wctad-maybe-unsupported</span>
|
||||
<span class=w> </span><span class=s>-Wctor-dtor-privacy</span>
|
||||
<span class=w> </span><span class=s>-Wdangling-else</span>
|
||||
<span class=w> </span><span class=s>-Wdangling-pointer=2</span>
|
||||
<span class=w> </span><span class=s>-Wdangling-reference</span>
|
||||
<span class=w> </span><span class=s>-Wdate-time</span>
|
||||
<span class=w> </span><span class=s>-Wdelete-incomplete</span>
|
||||
<span class=w> </span><span class=s>-Wdelete-non-virtual-dtor</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated-copy</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated-copy-dtor</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated-declarations</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated-enum-enum-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wdeprecated-enum-float-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wdisabled-optimization</span>
|
||||
<span class=w> </span><span class=s>-Wdiv-by-zero</span>
|
||||
<span class=w> </span><span class=s>-Wdouble-promotion</span>
|
||||
<span class=w> </span><span class=s>-Wduplicated-branches</span>
|
||||
<span class=w> </span><span class=s>-Wduplicated-cond</span>
|
||||
<span class=w> </span><span class=s>-Weffc++</span>
|
||||
<span class=w> </span><span class=s>-Welaborated-enum-base</span>
|
||||
<span class=w> </span><span class=s>-Wempty-body</span>
|
||||
<span class=w> </span><span class=s>-Wendif-labels</span>
|
||||
<span class=w> </span><span class=s>-Wenum-compare</span>
|
||||
<span class=w> </span><span class=s>-Wenum-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wexceptions</span>
|
||||
<span class=w> </span><span class=s>-Wexpansion-to-defined</span>
|
||||
<span class=w> </span><span class=s>-Wextra</span>
|
||||
<span class=w> </span><span class=s>-Wextra-semi</span>
|
||||
<span class=w> </span><span class=s>-Wflex-array-member-not-at-end</span>
|
||||
<span class=w> </span><span class=s>-Wfloat-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wfloat-equal</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-contains-nul</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-extra-args</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-nonliteral</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-security</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-y2k</span>
|
||||
<span class=w> </span><span class=s>-Wformat</span><span class=w> </span><span class=s>-Wformat-zero-length</span>
|
||||
<span class=w> </span><span class=s>-Wformat-diag</span>
|
||||
<span class=w> </span><span class=s>-Wformat-overflow=2</span>
|
||||
<span class=w> </span><span class=s>-Wformat-signedness</span>
|
||||
<span class=w> </span><span class=s>-Wformat-truncation=2</span>
|
||||
<span class=w> </span><span class=s>-Wformat=2</span>
|
||||
<span class=w> </span><span class=s>-Wframe-address</span>
|
||||
<span class=w> </span><span class=s>-Wfree-nonheap-object</span>
|
||||
<span class=w> </span><span class=s>-Wglobal-module</span>
|
||||
<span class=w> </span><span class=s>-Whardened</span>
|
||||
<span class=w> </span><span class=s>-Whsa</span>
|
||||
<span class=w> </span><span class=s>-Wif-not-aligned</span>
|
||||
<span class=w> </span><span class=s>-Wignored-attributes</span>
|
||||
<span class=w> </span><span class=s>-Wignored-qualifiers</span>
|
||||
<span class=w> </span><span class=s>-Wimplicit-fallthrough=5</span>
|
||||
<span class=w> </span><span class=s>-Winaccessible-base</span>
|
||||
<span class=w> </span><span class=s>-Winfinite-recursion</span>
|
||||
<span class=w> </span><span class=s>-Winherited-variadic-ctor</span>
|
||||
<span class=w> </span><span class=s>-Winit-list-lifetime</span>
|
||||
<span class=w> </span><span class=s>-Winit-self</span>
|
||||
<span class=w> </span><span class=s>-Winline</span>
|
||||
<span class=w> </span><span class=s>-Wint-in-bool-context</span>
|
||||
<span class=w> </span><span class=s>-Wint-to-pointer-cast</span>
|
||||
<span class=w> </span><span class=s>-Winterference-size</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-constexpr</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-imported-macros</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-memory-model</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-offsetof</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-pch</span>
|
||||
<span class=w> </span><span class=s>-Winvalid-utf8</span>
|
||||
<span class=w> </span><span class=s>-Wliteral-suffix</span>
|
||||
<span class=w> </span><span class=s>-Wlogical-not-parentheses</span>
|
||||
<span class=w> </span><span class=s>-Wlogical-op</span>
|
||||
<span class=w> </span><span class=s>-Wno-long-long</span>
|
||||
<span class=w> </span><span class=s>-Wlto-type-mismatch</span>
|
||||
<span class=w> </span><span class=s>-Wmain</span>
|
||||
<span class=w> </span><span class=s>-Wmaybe-uninitialized</span>
|
||||
<span class=w> </span><span class=s>-Wmemset-elt-size</span>
|
||||
<span class=w> </span><span class=s>-Wmemset-transposed-args</span>
|
||||
<span class=w> </span><span class=s>-Wmisleading-indentation</span>
|
||||
<span class=w> </span><span class=s>-Wmismatched-dealloc</span>
|
||||
<span class=w> </span><span class=s>-Wmismatched-new-delete</span>
|
||||
<span class=w> </span><span class=s>-Wmismatched-tags</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-attributes</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-braces</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-declarations</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-field-initializers</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-include-dirs</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-profile</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-requires</span>
|
||||
<span class=w> </span><span class=s>-Wmissing-template-keyword</span>
|
||||
<span class=w> </span><span class=s>-Wmultichar</span>
|
||||
<span class=w> </span><span class=s>-Wmultiple-inheritance</span>
|
||||
<span class=w> </span><span class=s>-Wmultistatement-macros</span>
|
||||
<span class=w> </span><span class=s>-Wno-namespaces</span>
|
||||
<span class=w> </span><span class=s>-Wnarrowing</span>
|
||||
<span class=w> </span><span class=s>-Wnoexcept</span>
|
||||
<span class=w> </span><span class=s>-Wnoexcept-type</span>
|
||||
<span class=w> </span><span class=s>-Wnon-template-friend</span>
|
||||
<span class=w> </span><span class=s>-Wnon-virtual-dtor</span>
|
||||
<span class=w> </span><span class=s>-Wnonnull</span>
|
||||
<span class=w> </span><span class=s>-Wnonnull-compare</span>
|
||||
<span class=w> </span><span class=s>-Wnormalized=nfkc</span>
|
||||
<span class=w> </span><span class=s>-Wno-nrvo</span>
|
||||
<span class=w> </span><span class=s>-Wnull-dereference</span>
|
||||
<span class=w> </span><span class=s>-Wodr</span>
|
||||
<span class=w> </span><span class=s>-Wold-style-cast</span>
|
||||
<span class=w> </span><span class=s>-Wopenacc-parallelism</span>
|
||||
<span class=w> </span><span class=s>-Wopenmp</span>
|
||||
<span class=w> </span><span class=s>-Wopenmp-simd</span>
|
||||
<span class=w> </span><span class=s>-Woverflow</span>
|
||||
<span class=w> </span><span class=s>-Woverlength-strings</span>
|
||||
<span class=w> </span><span class=s>-Woverloaded-virtual=2</span>
|
||||
<span class=w> </span><span class=s>-Wpacked</span>
|
||||
<span class=w> </span><span class=s>-Wpacked-bitfield-compat</span>
|
||||
<span class=w> </span><span class=s>-Wpacked-not-aligned</span>
|
||||
<span class=w> </span><span class=s>-Wno-padded</span>
|
||||
<span class=w> </span><span class=s>-Wparentheses</span>
|
||||
<span class=w> </span><span class=s>-Wpedantic</span>
|
||||
<span class=w> </span><span class=s>-Wpessimizing-move</span>
|
||||
<span class=w> </span><span class=s>-Wplacement-new=2</span>
|
||||
<span class=w> </span><span class=s>-Wpmf-conversions</span>
|
||||
<span class=w> </span><span class=s>-Wpointer-arith</span>
|
||||
<span class=w> </span><span class=s>-Wpointer-compare</span>
|
||||
<span class=w> </span><span class=s>-Wpragmas</span>
|
||||
<span class=w> </span><span class=s>-Wprio-ctor-dtor</span>
|
||||
<span class=w> </span><span class=s>-Wpsabi</span>
|
||||
<span class=w> </span><span class=s>-Wrange-loop-construct</span>
|
||||
<span class=w> </span><span class=s>-Wredundant-decls</span>
|
||||
<span class=w> </span><span class=s>-Wredundant-move</span>
|
||||
<span class=w> </span><span class=s>-Wredundant-tags</span>
|
||||
<span class=w> </span><span class=s>-Wregister</span>
|
||||
<span class=w> </span><span class=s>-Wreorder</span>
|
||||
<span class=w> </span><span class=s>-Wrestrict</span>
|
||||
<span class=w> </span><span class=s>-Wreturn-local-addr</span>
|
||||
<span class=w> </span><span class=s>-Wreturn-type</span>
|
||||
<span class=w> </span><span class=s>-Wscalar-storage-order</span>
|
||||
<span class=w> </span><span class=s>-Wself-move</span>
|
||||
<span class=w> </span><span class=s>-Wsequence-point</span>
|
||||
<span class=w> </span><span class=s>-Wshadow=compatible-local</span>
|
||||
<span class=w> </span><span class=s>-Wshadow=global</span>
|
||||
<span class=w> </span><span class=s>-Wshadow=local</span>
|
||||
<span class=w> </span><span class=s>-Wshift-count-negative</span>
|
||||
<span class=w> </span><span class=s>-Wshift-count-overflow</span>
|
||||
<span class=w> </span><span class=s>-Wshift-negative-value</span>
|
||||
<span class=w> </span><span class=s>-Wshift-overflow=2</span>
|
||||
<span class=w> </span><span class=s>-Wsign-compare</span>
|
||||
<span class=w> </span><span class=s>-Wsign-conversion</span>
|
||||
<span class=w> </span><span class=s>-Wsign-promo</span>
|
||||
<span class=w> </span><span class=s>-Wsized-deallocation</span>
|
||||
<span class=w> </span><span class=s>-Wsizeof-array-argument</span>
|
||||
<span class=w> </span><span class=s>-Wsizeof-array-div</span>
|
||||
<span class=w> </span><span class=s>-Wsizeof-pointer-div</span>
|
||||
<span class=w> </span><span class=s>-Wsizeof-pointer-memaccess</span>
|
||||
<span class=w> </span><span class=s>-Wstack-protector</span>
|
||||
<span class=w> </span><span class=s>-Wstrict-aliasing=3</span>
|
||||
<span class=w> </span><span class=s>-Wstrict-null-sentinel</span>
|
||||
<span class=w> </span><span class=s>-Wstrict-overflow</span>
|
||||
<span class=w> </span><span class=s>-Wstring-compare</span>
|
||||
<span class=w> </span><span class=s>-Wstringop-overflow=4</span>
|
||||
<span class=w> </span><span class=s>-Wstringop-overread</span>
|
||||
<span class=w> </span><span class=s>-Wstringop-truncation</span>
|
||||
<span class=w> </span><span class=s>-Wsubobject-linkage</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=cold</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=const</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=format</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=malloc</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=noreturn</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=pure</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-attribute=returns_nonnull</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-final-methods</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-final-types</span>
|
||||
<span class=w> </span><span class=s>-Wsuggest-override</span>
|
||||
<span class=w> </span><span class=s>-Wswitch</span>
|
||||
<span class=w> </span><span class=s>-Wswitch-bool</span>
|
||||
<span class=w> </span><span class=s>-Wswitch-default</span>
|
||||
<span class=w> </span><span class=s>-Wswitch-enum</span>
|
||||
<span class=w> </span><span class=s>-Wswitch-outside-range</span>
|
||||
<span class=w> </span><span class=s>-Wswitch-unreachable</span>
|
||||
<span class=w> </span><span class=s>-Wsync-nand</span>
|
||||
<span class=w> </span><span class=s>-Wsynth</span>
|
||||
<span class=w> </span><span class=s>-Wno-system-headers</span>
|
||||
<span class=w> </span><span class=s>-Wtautological-compare</span>
|
||||
<span class=w> </span><span class=s>-Wno-templates</span>
|
||||
<span class=w> </span><span class=s>-Wterminate</span>
|
||||
<span class=w> </span><span class=s>-Wtrampolines</span>
|
||||
<span class=w> </span><span class=s>-Wtrigraphs</span>
|
||||
<span class=w> </span><span class=s>-Wtrivial-auto-var-init</span>
|
||||
<span class=w> </span><span class=s>-Wtsan</span>
|
||||
<span class=w> </span><span class=s>-Wtype-limits</span>
|
||||
<span class=w> </span><span class=s>-Wundef</span>
|
||||
<span class=w> </span><span class=s>-Wunicode</span>
|
||||
<span class=w> </span><span class=s>-Wuninitialized</span>
|
||||
<span class=w> </span><span class=s>-Wunknown-pragmas</span>
|
||||
<span class=w> </span><span class=s>-Wunreachable-code</span>
|
||||
<span class=w> </span><span class=s>-Wunsafe-loop-optimizations</span>
|
||||
<span class=w> </span><span class=s>-Wunused</span>
|
||||
<span class=w> </span><span class=s>-Wunused-but-set-parameter</span>
|
||||
<span class=w> </span><span class=s>-Wunused-but-set-variable</span>
|
||||
<span class=w> </span><span class=s>-Wunused-const-variable=2</span>
|
||||
<span class=w> </span><span class=s>-Wunused-function</span>
|
||||
<span class=w> </span><span class=s>-Wunused-label</span>
|
||||
<span class=w> </span><span class=s>-Wunused-local-typedefs</span>
|
||||
<span class=w> </span><span class=s>-Wunused-macros</span>
|
||||
<span class=w> </span><span class=s>-Wunused-parameter</span>
|
||||
<span class=w> </span><span class=s>-Wunused-result</span>
|
||||
<span class=w> </span><span class=s>-Wunused-value</span>
|
||||
<span class=w> </span><span class=s>-Wunused-variable</span>
|
||||
<span class=w> </span><span class=s>-Wuse-after-free=3</span>
|
||||
<span class=w> </span><span class=s>-Wuseless-cast</span>
|
||||
<span class=w> </span><span class=s>-Wvarargs</span>
|
||||
<span class=w> </span><span class=s>-Wvariadic-macros</span>
|
||||
<span class=w> </span><span class=s>-Wvector-operation-performance</span>
|
||||
<span class=w> </span><span class=s>-Wvexing-parse</span>
|
||||
<span class=w> </span><span class=s>-Wvirtual-inheritance</span>
|
||||
<span class=w> </span><span class=s>-Wvirtual-move-assign</span>
|
||||
<span class=w> </span><span class=s>-Wvla</span>
|
||||
<span class=w> </span><span class=s>-Wvla-parameter</span>
|
||||
<span class=w> </span><span class=s>-Wvolatile</span>
|
||||
<span class=w> </span><span class=s>-Wvolatile-register-var</span>
|
||||
<span class=w> </span><span class=s>-Wwrite-strings</span>
|
||||
<span class=w> </span><span class=s>-Wxor-used-as-pow</span>
|
||||
<span class=w> </span><span class=s>-Wzero-as-null-pointer-constant</span>
|
||||
<span class=w> </span><span class=s>-Wzero-length-bounds</span>
|
||||
<span class=p>)</span>
|
||||
</code></pre></div> </details> </li> </ul> <h2 id=c-standard-library-compliance>C++ standard library compliance<a class=headerlink href=#c-standard-library-compliance title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: No prerequisites</p> <p>The library has no prerequisites other than the Standard Template Library (<abbr title="Standard Template Library">STL</abbr>).</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The library compiled and tested with both <a href="https://libcxx.llvm.org">libc++</a> and <a href="https://gcc.gnu.org/onlinedocs/libstdc++/">libstdc++</a> to detect subtle differences or incompatibilities.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code checked with <a href="https://include-what-you-use.org">Include What You Use (IWYU)</a> that all required standard headers are included.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> On Windows, the library is compiled with <code><Windows.h></code> being included to detect and avoid common bugs.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The library is compiled with exceptions disabled to support alternative means of error handling.</li> </ul> <h2 id=stable-public-api>Stable public <abbr title="Application Programming Interfaces">API</abbr><a class=headerlink href=#stable-public-api title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: Stable public <abbr title="Application Programming Interfaces">API</abbr></p> <p>Any change to the library does not break the public <abbr title="Application Programming Interfaces">API</abbr>.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> All public <abbr title="Application Programming Interfaces">API</abbr> functions are tested with a variety of arguments.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The library is compiled and tested with different template arguments for number, string, array, and object types.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> All lines of the code base are covered by unit tests.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> Every exception of the library is thrown in the test suite and the error messages and exception ids are checked.</li> </ul> <div class="admonition success"> <p class=admonition-title>Requirement: Complete documentation</p> <p>The public <abbr title="Application Programming Interfaces">API</abbr> is extensively documented.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> Every public <abbr title="Application Programming Interfaces">API</abbr> function has a dedicated page in the <a href="https://json.nlohmann.me/api/basic_json/"><abbr title="Application Programming Interfaces">API</abbr> reference documentation</a> with a self-contained code example.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> All examples in the documentation are tested and changes in their output is treated as an error.</li> </ul> <h2 id=robust-input-processing>Robust input processing<a class=headerlink href=#robust-input-processing title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: Standards compliance</p> <p>The library is compliant to <abbr title="JavaScript Object Notation">JSON</abbr> as defined in <a href="https://datatracker.ietf.org/doc/html/rfc8259"><abbr title="Request for Comments">RFC</abbr> 8259</a>.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The lexer is tested with all valid Unicode code points and all prefixes of all invalid Unicode code points.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The parser is tested against extensive correctness suites for <abbr title="JavaScript Object Notation">JLine truncated
|
||||
|
||||
<span class=na>Checks</span><span class=o>:</span><span class=w> </span><span class=s>'</span><span class=err>*,</span>
|
||||
|
||||
<span class=w> </span><span class=na>-portability-template-virtual-member-function,</span>
|
||||
<span class=w> </span><span class=na>-bugprone-use-after-move,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-invalid-access-moved,</span>
|
||||
|
||||
<span class=w> </span><span class=na>-altera-id-dependent-backward-branch,</span>
|
||||
<span class=w> </span><span class=na>-altera-struct-pack-align,</span>
|
||||
<span class=w> </span><span class=na>-altera-unroll-loops,</span>
|
||||
<span class=w> </span><span class=na>-android-cloexec-fopen,</span>
|
||||
<span class=w> </span><span class=na>-boost-use-ranges,</span>
|
||||
<span class=w> </span><span class=na>-bugprone-easily-swappable-parameters,</span>
|
||||
<span class=w> </span><span class=na>-cert-err58-cpp,</span>
|
||||
<span class=w> </span><span class=na>-concurrency-mt-unsafe,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-avoid-const-or-ref-data-members,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-avoid-do-while,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-avoid-goto,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-avoid-magic-numbers,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-avoid-non-const-global-variables,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-macro-usage,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-pro-bounds-array-to-pointer-decay,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-pro-bounds-constant-array-index,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-pro-bounds-pointer-arithmetic,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-pro-type-reinterpret-cast,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-pro-type-union-access,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-rvalue-reference-param-not-moved,</span>
|
||||
<span class=w> </span><span class=na>-cppcoreguidelines-virtual-class-destructor,</span>
|
||||
<span class=w> </span><span class=na>-fuchsia-default-arguments-calls,</span>
|
||||
<span class=w> </span><span class=na>-fuchsia-default-arguments-declarations,</span>
|
||||
<span class=w> </span><span class=na>-fuchsia-overloaded-operator,</span>
|
||||
<span class=w> </span><span class=na>-google-explicit-constructor,</span>
|
||||
<span class=w> </span><span class=na>-google-readability-function-size,</span>
|
||||
<span class=w> </span><span class=na>-google-runtime-int,</span>
|
||||
<span class=w> </span><span class=na>-google-runtime-references,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-avoid-goto,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-explicit-conversions,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-function-size,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-no-array-decay,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-no-assembler,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-signed-bitwise,</span>
|
||||
<span class=w> </span><span class=na>-hicpp-uppercase-literal-suffix,</span>
|
||||
<span class=w> </span><span class=na>-llvm-header-guard,</span>
|
||||
<span class=w> </span><span class=na>-llvm-include-order,</span>
|
||||
<span class=w> </span><span class=na>-llvmlibc-*,</span>
|
||||
<span class=w> </span><span class=na>-misc-use-anonymous-namespace,</span>
|
||||
<span class=w> </span><span class=na>-misc-confusable-identifiers,</span>
|
||||
<span class=w> </span><span class=na>-misc-include-cleaner,</span>
|
||||
<span class=w> </span><span class=na>-misc-no-recursion,</span>
|
||||
<span class=w> </span><span class=na>-misc-non-private-member-variables-in-classes,</span>
|
||||
<span class=w> </span><span class=na>-modernize-concat-nested-namespaces,</span>
|
||||
<span class=w> </span><span class=na>-modernize-type-traits,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-constraints,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-designated-initializers,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-nodiscard,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-ranges,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-std-numbers,</span>
|
||||
<span class=w> </span><span class=na>-modernize-use-trailing-return-type,</span>
|
||||
<span class=w> </span><span class=na>-performance-enum-size,</span>
|
||||
<span class=w> </span><span class=na>-readability-function-cognitive-complexity,</span>
|
||||
<span class=w> </span><span class=na>-readability-function-size,</span>
|
||||
<span class=w> </span><span class=na>-readability-identifier-length,</span>
|
||||
<span class=w> </span><span class=na>-readability-magic-numbers,</span>
|
||||
<span class=w> </span><span class=na>-readability-redundant-access-specifiers,</span>
|
||||
<span class=w> </span><span class=na>-readability-simplify-boolean-expr,</span>
|
||||
<span class=w> </span><span class=na>-readability-uppercase-literal-suffix'</span>
|
||||
|
||||
<span class=na>CheckOptions</span><span class=o>:</span>
|
||||
<span class=w> </span><span class=na>- key</span><span class=o>:</span><span class=w> </span><span class=s>hicpp-special-member-functions.AllowSoleDefaultDtor</span>
|
||||
<span class=w> </span><span class=na>value</span><span class=o>:</span><span class=w> </span><span class=s>1</span>
|
||||
|
||||
<span class=na>WarningsAsErrors</span><span class=o>:</span><span class=w> </span><span class=s>'*'</span>
|
||||
|
||||
<span class=c1>#HeaderFilterRegex: '.*nlohmann.*'</span>
|
||||
<span class=na>HeaderFilterRegex</span><span class=o>:</span><span class=w> </span><span class=s>'.*hpp$'</span>
|
||||
</code></pre></div> </details> </li> <li class=task-list-item> <p><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code is checked with the latest <a href="https://cppcheck.sourceforge.io">Cppcheck</a> with all warnings enabled.</p> </li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code is checked with the latest <a href="https://clang-analyzer.llvm.org">Clang Static Analyzer</a> with 89 enabled rules.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code is checked with <a href="https://fbinfer.com">Infer</a>.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code is checked with <a href="https://app.codacy.com/gh/nlohmann/json/dashboard">Codacy</a>.</li> </ul> <h2 id=dynamic-analysis>Dynamic analysis<a class=headerlink href=#dynamic-analysis title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: Correctness</p> <p>The library is checked for memory correctness and absence of undefined behavior.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The test suite is executed with enabled <a href="https://json.nlohmann.me/features/assertions/">runtime assertions</a> to check invariants and preconditions of functions to detect undefined behavior.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The test suite is executed with <a href="https://valgrind.org">Valgrind</a> (Memcheck) to detect memory leaks.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The test suite is executed with <a href="https://github.com/google/sanitizers">Sanitizers</a> (address sanitizer, undefined behavior sanitizer, integer overflow detection, nullability violations).</li> </ul> <h2 id=style-check>Style check<a class=headerlink href=#style-check title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: Common code style</p> <p>A common code style is used throughout all code files of the library.</p> </div> <ul class=task-list> <li class=task-list-item> <p><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code is formatted with <a href="https://astyle.sourceforge.net">Artistic Style</a> (astyle) against a style configuration that is also enforced in the <abbr title="Continuous Integration">CI</abbr>.</p> <details class=abstract> <summary>Astyle configuration (tools/astyle/.astylerc)</summary> <div class=highlight><pre><span></span><code><span class=c1># Configuration for Artistic Style</span>
|
||||
<span class=c1># see https://astyle.sourceforge.net/astyle.html</span>
|
||||
|
||||
<span class=c1>#######################</span>
|
||||
<span class=c1># Brace Style Options #</span>
|
||||
<span class=c1>#######################</span>
|
||||
|
||||
<span class=c1># use Allman style for braces</span>
|
||||
<span class=na>--style</span><span class=o>=</span><span class=s>allman</span>
|
||||
|
||||
<span class=c1>###############</span>
|
||||
<span class=c1># Tab Options #</span>
|
||||
<span class=c1>###############</span>
|
||||
|
||||
<span class=c1># indent using 4 spaces</span>
|
||||
<span class=na>--indent</span><span class=o>=</span><span class=s>spaces=4</span>
|
||||
|
||||
<span class=c1>#######################</span>
|
||||
<span class=c1># Indentation Options #</span>
|
||||
<span class=c1>#######################</span>
|
||||
|
||||
<span class=c1># indent access modifiers one half indent</span>
|
||||
<span class=na>--indent-modifiers</span>
|
||||
|
||||
<span class=c1># indent switch cases to the switch block</span>
|
||||
<span class=na>--indent-switches</span>
|
||||
|
||||
<span class=c1># indent preprocessor blocks</span>
|
||||
<span class=na>--indent-preproc-block</span>
|
||||
|
||||
<span class=c1># indent preprocessor defines</span>
|
||||
<span class=na>--indent-preproc-define</span>
|
||||
|
||||
<span class=c1># indent C++ comments</span>
|
||||
<span class=na>--indent-col1-comments</span>
|
||||
|
||||
<span class=c1>###################</span>
|
||||
<span class=c1># Padding Options #</span>
|
||||
<span class=c1>###################</span>
|
||||
|
||||
<span class=c1># insert space padding around operators</span>
|
||||
<span class=na>--pad-oper</span>
|
||||
|
||||
<span class=c1># insert space between if/for/while... and the following parentheses</span>
|
||||
<span class=na>--pad-header</span>
|
||||
|
||||
<span class=c1># attach the pointer to the variable type (left)</span>
|
||||
<span class=na>--align-pointer</span><span class=o>=</span><span class=s>type</span>
|
||||
|
||||
<span class=c1># attach the reference to the variable type (left)</span>
|
||||
<span class=na>--align-reference</span><span class=o>=</span><span class=s>type</span>
|
||||
|
||||
<span class=c1>######################</span>
|
||||
<span class=c1># Formatting Options #</span>
|
||||
<span class=c1>######################</span>
|
||||
|
||||
<span class=c1># add braces to unbraced one line conditional statements</span>
|
||||
<span class=na>--add-braces</span>
|
||||
|
||||
<span class=c1># convert tabs to spaces</span>
|
||||
<span class=na>--convert-tabs</span>
|
||||
|
||||
<span class=c1># closes whitespace between the ending angle brackets of template definitions</span>
|
||||
<span class=na>--close-templates</span>
|
||||
|
||||
<span class=c1>#################</span>
|
||||
<span class=c1># Other Options #</span>
|
||||
<span class=c1>#################</span>
|
||||
|
||||
<span class=c1># do not create backup files</span>
|
||||
<span class=na>--suffix</span><span class=o>=</span><span class=s>none</span>
|
||||
|
||||
<span class=c1># preserve the original file date</span>
|
||||
<span class=na>--preserve-date</span>
|
||||
|
||||
<span class=c1># display only the files that have been formatted</span>
|
||||
<span class=na>--formatted</span>
|
||||
|
||||
<span class=c1># for the linux (LF) line end style</span>
|
||||
<span class=na>--lineend</span><span class=o>=</span><span class=s>linux</span>
|
||||
</code></pre></div> </details> </li> <li class=task-list-item> <p><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The code style is checked with <a href="https://github.com/cpplint/cpplint">cpplint</a> with 61 enabled rules.</p> </li> </ul> <h2 id=simple-integration>Simple integration<a class=headerlink href=#simple-integration title="Permanent link">¶</a></h2> <div class="admonition success"> <p class=admonition-title>Requirement: Single header</p> <p>The library can be used by adding a single header to a C++ project.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> An amalgamation script is used to check if the source code is exposed as self-contained single-header file.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The test suite is checked against the amalgamated source file as well as the individual source file.</li> </ul> <div class="admonition success"> <p class=admonition-title>Requirement: CMake as primary development tool</p> <p>All library functions are exposed and usable by CMake.</p> </div> <ul class=task-list> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> All library options are exposed as <a href="https://json.nlohmann.me/integration/cmake/">CMake options</a> and tested.</li> <li class=task-list-item><label class=task-list-control><input type=checkbox disabled checked><span class=task-list-indicator></span></label> The library is tested against the earliest supported CMake version.</li> </ul> <!-- https://squidfunk.github.io/mkdocs-material/reference/tooltips/#adding-a-glossary --> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">January 17, 2025</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2013-2025 Niels Lohmann </div> </div> <div class=md-social> <a href="https://github.com/nlohmann" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Niels Lohmann"><link href="https://json.nlohmann.me/community/security_policy/" rel="canonical"><link href=../governance/ rel=prev><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Security Policy - JSON for Modern C++</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel="stylesheet" href="../../assets/external/fonts.googleapis.com/css.61a430c9.css"><style>:root{--md-text-font:"Roboto";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=../../css/custom.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#security-policy class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="JSON for Modern C++" class="md-header__button md-logo" aria-label="JSON for Modern C++" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> JSON for Modern C++ </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Security Policy </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-componLine truncated
|
||||
Reference in new issue
Block a user