2023-11-24 18:33:21 +01:00
<!doctype html>
< html lang = "en" dir = "ltr" class = "docs-wrapper plugin-docs plugin-id-cpp docs-version-current docs-doc-page docs-doc-id-exceptions-and-raii/2023-11-24-placeholders" data-has-hydrated = "false" >
< head >
< meta charset = "UTF-8" >
2024-01-29 12:51:15 +01:00
< meta name = "generator" content = "Docusaurus v3.1.1" >
2023-11-24 18:33:21 +01:00
< title data-rh = "true" > Placeholders | mf< / title > < meta data-rh = "true" name = "viewport" content = "width=device-width,initial-scale=1" > < meta data-rh = "true" name = "twitter:card" content = "summary_large_image" > < meta data-rh = "true" property = "og:url" content = "https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/" > < meta data-rh = "true" property = "og:locale" content = "en" > < meta data-rh = "true" name = "docusaurus_locale" content = "en" > < meta data-rh = "true" name = "docsearch:language" content = "en" > < meta data-rh = "true" name = "docusaurus_version" content = "current" > < meta data-rh = "true" name = "docusaurus_tag" content = "docs-cpp-current" > < meta data-rh = "true" name = "docsearch:version" content = "current" > < meta data-rh = "true" name = "docsearch:docusaurus_tag" content = "docs-cpp-current" > < meta data-rh = "true" property = "og:title" content = "Placeholders | mf" > < meta data-rh = "true" name = "description" content = "Placeholders that are quite convenient to use when working on the code .
">< meta data-rh = "true" property = "og:description" content = "Placeholders that are quite convenient to use when working on the code .
">< link data-rh = "true" rel = "icon" href = "/img/favicon.ico" > < link data-rh = "true" rel = "canonical" href = "https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/" > < link data-rh = "true" rel = "alternate" href = "https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/" hreflang = "en" > < link data-rh = "true" rel = "alternate" href = "https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/" hreflang = "x-default" > < link data-rh = "true" rel = "preconnect" href = "https://0VXRFPR4QF-dsn.algolia.net" crossorigin = "anonymous" > < link rel = "search" type = "application/opensearchdescription+xml" title = "mf" href = "/opensearch.xml" >
< link rel = "alternate" type = "application/rss+xml" href = "/blog/rss.xml" title = "mf RSS Feed" >
< link rel = "alternate" type = "application/atom+xml" href = "/blog/atom.xml" title = "mf Atom Feed" >
< link rel = "alternate" type = "application/json" href = "/blog/feed.json" title = "mf JSON Feed" >
2024-06-02 21:27:57 +02:00
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity = "sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin = "anonymous" > < link rel = "stylesheet" href = "/assets/css/styles.dd39a9b0.css" >
< script src = "/assets/js/runtime~main.41276843.js" defer = "defer" > < / script >
< script src = "/assets/js/main.e5d7340e.js" defer = "defer" > < / script >
2023-11-24 18:33:21 +01:00
< / head >
< body class = "navigation-with-keyboard" >
< script > ! function ( ) { function t ( t ) { document . documentElement . setAttribute ( "data-theme" , t ) } var e = function ( ) { try { return new URLSearchParams ( window . location . search ) . get ( "docusaurus-theme" ) } catch ( t ) { } } ( ) || function ( ) { try { return localStorage . getItem ( "theme" ) } catch ( t ) { } } ( ) ; t ( null !== e ? e : "light" ) } ( ) , function ( ) { try { const c = new URLSearchParams ( window . location . search ) . entries ( ) ; for ( var [ t , e ] of c ) if ( t . startsWith ( "docusaurus-data-" ) ) { var a = t . replace ( "docusaurus-data-" , "data-" ) ; document . documentElement . setAttribute ( a , e ) } } catch ( t ) { } } ( ) < / script > < div id = "__docusaurus" > < div role = "region" aria-label = "Skip to main content" > < a class = "skipToContent_fXgn" href = "#__docusaurus_skipToContent_fallback" > Skip to main content< / a > < / div > < nav aria-label = "Main" class = "navbar navbar--fixed-top" > < div class = "navbar__inner" > < div class = "navbar__items" > < button aria-label = "Toggle navigation bar" aria-expanded = "false" class = "navbar__toggle clean-btn" type = "button" > < svg width = "30" height = "30" viewBox = "0 0 30 30" aria-hidden = "true" > < path stroke = "currentColor" stroke-linecap = "round" stroke-miterlimit = "10" stroke-width = "2" d = "M4 7h22M4 15h22M4 23h22" > < / path > < / svg > < / button > < a class = "navbar__brand" href = "/" > < b class = "navbar__title text--truncate" > mf< / b > < / a > < div class = "navbar__item dropdown dropdown--hoverable" > < a href = "#" aria-haspopup = "true" aria-expanded = "false" role = "button" class = "navbar__link" > Additional FI MU materials< / a > < ul class = "dropdown__menu" > < li > < a class = "dropdown__link" href = "/algorithms/" > Algorithms< / a > < / li > < li > < a class = "dropdown__link" href = "/c/" > C< / a > < / li > < li > < a aria-current = "page" class = "dropdown__link dropdown__link--active" href = "/cpp/" > C++< / a > < / li > < / ul > < / div > < a class = "navbar__item navbar__link" href = "/contributions/" > Contributions< / a > < a class = "navbar__item navbar__link" href = "/talks/" > Talks< / a > < / div > < div class = "navbar__items navbar__items--right" > < a class = "navbar__item navbar__link" href = "/blog/" > Blog< / a > < div class = "toggle_vylO colorModeToggle_DEke" > < button class = "clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type = "button" disabled = "" title = "Switch between dark and light mode (currently light mode)" aria-label = "Switch between dark and light mode (currently light mode)" aria-live = "polite" > < svg viewBox = "0 0 24 24" width = "24" height = "24" class = "lightToggleIcon_pyhR" > < path fill = "currentColor" d = "M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z" > < / path > < / svg > < svg viewBox = "0 0 24 24" width = "24" height = "24" class = "darkToggleIcon_wfgR" > < path fill = "currentColor" d = "M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z" > < / path > < / svg > < / button > < / div > < div class = "navbarSearchContainer_Bca1" > < button type = "button" class = "DocSearch DocSearch-Button" aria-label = "Search" > < span class = "DocSearch-Button-Container" > < svg width = "20" height = "20" class = "DocSearch-Search-Icon" viewBox = "0 0 20 20" > < path d = "M14.386 14 . 386l4 . 0877 4 . 0877-4 . 0877-4 . 0877c-2 .
languages, but I miss them in the C++. I' m taking the inspiration from languages
like Rust (all that we will implement) or Kotlin (< code > TODO< / code > ) that have them
implemented.< / p >
< p > You may ask what placeholders do we need in the code, in our case we will be
talking about TODOs and unexpected situations, such as not implemented branches.< / p >
< p > Namely we will implement< / p >
< ul >
< li > < code > todo< / code > ,< / li >
< li > < code > unimplemented< / code > , and< / li >
< li > < code > unreachable< / code > .< / li >
< / ul >
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "design" > Design< a href = "#design" class = "hash-link" aria-label = "Direct link to Design" title = "Direct link to Design" > < / a > < / h2 >
< p > If we take the two languages mentioned above as examples, there are at least two
ways how to implement them:< / p >
< ol >
< li > < em > panic< / em > when they are reached (as they do in Rust), or< / li >
< li > < em > raise< / em > an exception when they are reached (as they do in Kotlin).< / li >
< / ol >
< p > I will choose raising an exception, since the closest equivalent of < em > panic< / em > in
C++ would be < code > assert< / code > s that are (by default) disabled in the < em > release builds< / em > .< / p >
< p > However I am too lazy to do:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token comment" style = "color:hsl(230, 4%, 64%)" > // or< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token string" style = "color:hsl(119, 34%, 47%)" > " optional note" < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < br > < / span > < / code > < / pre > < div class = "buttonGroup__atx" > < button type = "button" aria-label = "Copy code to clipboard" title = "Copy" class = "clean-btn" > < span class = "copyButtonIcons_eSgA" aria-hidden = "true" > < svg viewBox = "0 0 24 24" class = "copyButtonIcon_y97N" > < path fill = "currentColor" d = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" > < / path > < / svg > < svg viewBox = "0 0 24 24" class = "copyButtonSuccessIcon_LjdS" > < path fill = "currentColor" d = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" > < / path > < / svg > < / span > < / button > < / div > < / div > < / div >
2023-11-24 18:33:21 +01:00
< p > Therefore we will implement exceptions and also wrap them in functions, so that
we can do:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token comment" style = "color:hsl(230, 4%, 64%)" > // or< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token string" style = "color:hsl(119, 34%, 47%)" > " optional note" < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < br > < / span > < / code > < / pre > < div class = "buttonGroup__atx" > < button type = "button" aria-label = "Copy code to clipboard" title = "Copy" class = "clean-btn" > < span class = "copyButtonIcons_eSgA" aria-hidden = "true" > < svg viewBox = "0 0 24 24" class = "copyButtonIcon_y97N" > < path fill = "currentColor" d = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" > < / path > < / svg > < svg viewBox = "0 0 24 24" class = "copyButtonSuccessIcon_LjdS" > < path fill = "currentColor" d = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" > < / path > < / svg > < / span > < / button > < / div > < / div > < / div >
2023-11-24 18:33:21 +01:00
< div class = "theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success" > < div class = "admonitionHeading_Gvgb" > < span class = "admonitionIcon_Rf37" > < svg viewBox = "0 0 12 16" > < path fill-rule = "evenodd" d = "M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z" > < / path > < / svg > < / span > tip< / div > < div class = "admonitionContent_BuS1" > < p > Wrapping them in a function (or macro) will allow us to do a little magic trick.< / p > < / div > < / div >
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "implementation" > Implementation< a href = "#implementation" class = "hash-link" aria-label = "Direct link to Implementation" title = "Direct link to Implementation" > < / a > < / h2 >
< p > We' re going to utilize the exceptions, so we' ll need to include the < code > exception< / code >
header and we will start with a simple < code > _todo< / code > exception class.< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < exception> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < string> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > class< / span > < span class = "token plain" > < / span > < span class = "token class-name" style = "color:hsl(35, 99%, 36%)" > _todo< / span > < span class = "token plain" > < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < span class = "token base-clause keyword" style = "color:hsl(301, 63%, 40%)" > public< / span > < span class = "token base-clause" > std< / span > < span class = "token base-clause double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token base-clause class-name" style = "color:hsl(35, 99%, 36%)" > exception< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > std< / span > < span class = "token double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token plain" > string cause< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > public< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > cause< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token string" style = "color:hsl(119, 34%, 47%)" > " not yet implemented" < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > }< / span > < span class = "token plain" > < / span > < br > < / span > < span class =
2023-11-24 18:33:21 +01:00
< p > In this case we have 2 constructors:< / p >
< ol >
< li > default constructor without any parameters that will return just
< code > not yet implemented< / code > < / li >
< li > and one parametrized with an “excuse” that will return string like:
< code > not yet implemented: ‹ excuse› < / code > < / li >
< / ol >
< p > If we were to use it now, we would need to do something like:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > " placeholders.hpp" < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > int< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > main< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > return< / span > < span class = "token plain" > < / span > < span class = "token number" style = "color:hsl(35, 99%, 36%)" > 0< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > }< / span > < br > < / span > < / code > < / pre > < div class = "buttonGroup__atx" > < button type = "button" aria-label = "Copy code to clipboard" title = "Copy" class = "clean-btn" > < span class = "copyButtonIcons_eSgA" aria-hidden = "true" > < svg viewBox = "0 0 24 24" class = "copyButtonIcon_y97N" > < path fill = "currentColor" d = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" > < / path > < / svg > < svg viewBox = "0 0 24 24" class = "copyButtonSuccessIcon_LjdS" > < path fill = "currentColor" d = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" > < / path > < / svg > < / span > < / button > < / div > < / div > < / div >
2023-11-24 18:33:21 +01:00
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "wrapping-in-a-function" > Wrapping in a function< a href = "#wrapping-in-a-function" class = "hash-link" aria-label = "Direct link to Wrapping in a function" title = "Direct link to Wrapping in a function" > < / a > < / h2 >
< p > I am a lazy person, so we will wrap the exception in a function that will throw
it:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > void< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > }< / span > < br > < / span > < / code > < / pre > < div class = "buttonGroup__atx" > < button type = "button" aria-label = "Copy code to clipboard" title = "Copy" class = "clean-btn" > < span class = "copyButtonIcons_eSgA" aria-hidden = "true" > < svg viewBox = "0 0 24 24" class = "copyButtonIcon_y97N" > < path fill = "currentColor" d = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" > < / path > < / svg > < svg viewBox = "0 0 24 24" class = "copyButtonSuccessIcon_LjdS" > < path fill = "currentColor" d = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" > < / path > < / svg > < / span > < / button > < / div > < / div > < / div >
2023-11-24 18:33:21 +01:00
< p > This can be used like:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > " placeholders.hpp" < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > int< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > main< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > return< / span > < span class = "token plain" > < / span > < span class = "token number" style = "color:hsl(35, 99%, 36%)" > 0< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > }< / span > < br > < / span > < / code > < / pre > < div class = "buttonGroup__atx" > < button type = "button" aria-label = "Copy code to clipboard" title = "Copy" class = "clean-btn" > < span class = "copyButtonIcons_eSgA" aria-hidden = "true" > < svg viewBox = "0 0 24 24" class = "copyButtonIcon_y97N" > < path fill = "currentColor" d = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z" > < / path > < / svg > < svg viewBox = "0 0 24 24" class = "copyButtonSuccessIcon_LjdS" > < path fill = "currentColor" d = "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" > < / path > < / svg > < / span > < / button > < / div > < / div > < / div >
2023-11-24 18:33:21 +01:00
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "magic-trick" > Magic trick< a href = "#magic-trick" class = "hash-link" aria-label = "Direct link to Magic trick" title = "Direct link to Magic trick" > < / a > < / h2 >
< p > At the beginning I' ve mentioned that by wrapping the exceptions in a helper
functions that will throw them, we can do a nice magic trick <!-- --> 😄<!-- --> This trick
will consist of formatted string and for that we will use
< a href = "https://en.cppreference.com/w/cpp/utility/format/format" target = "_blank" rel = "noopener noreferrer" > < code > std::format< / code > < / a > that is
available since C++20.< / p >
< p > We just need to add one more overload for our < code > todo()< / code > :< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < format> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > template< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > < < / span > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > class< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token plain" > Args < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > > < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > void< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token plain" > std< / span > < span class = "token double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token plain" > format_string< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > < < / span > < span class = "token plain" > Args< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > > < / span > < span class = "token plain" > fmt< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ,< / span > < span class = "token plain" > Args< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > & & < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token plain" > args< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token plain" > std< / span > < span class = "token double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > format< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token plain" > fmt< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ,< / span > < span class = "token plain" > args< / span > < span class = "token punctuation"
2023-11-24 18:33:21 +01:00
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "finishing-off-with-2-more-exceptions" > Finishing off with 2 more exceptions< a href = "#finishing-off-with-2-more-exceptions" class = "hash-link" aria-label = "Direct link to Finishing off with 2 more exceptions" title = "Direct link to Finishing off with 2 more exceptions" > < / a > < / h2 >
< p > Now we can repeat the same process for the other two exceptions I' ve mentioned< / p >
< ul >
< li > < code > unimplemented< / code > , and< / li >
< li > < code > unreachable< / code > .< / li >
< / ul >
< p > In the end we should end up with something like this:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < exception> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < format> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token macro property directive-hash" style = "color:hsl(5, 74%, 59%)" > #< / span > < span class = "token macro property directive keyword" style = "color:hsl(301, 63%, 40%)" > include< / span > < span class = "token macro property" style = "color:hsl(5, 74%, 59%)" > < / span > < span class = "token macro property string" style = "color:hsl(119, 34%, 47%)" > < string> < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > class< / span > < span class = "token plain" > < / span > < span class = "token class-name" style = "color:hsl(35, 99%, 36%)" > _todo< / span > < span class = "token plain" > < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < span class = "token base-clause keyword" style = "color:hsl(301, 63%, 40%)" > public< / span > < span class = "token base-clause" > std< / span > < span class = "token base-clause double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token base-clause class-name" style = "color:hsl(35, 99%, 36%)" > exception< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > std< / span > < span class = "token double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token plain" > string cause< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > public< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _todo< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > :< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)"
2024-01-06 21:28:37 +01:00
< div class = "theme-admonition theme-admonition-info admonition_xJq3 alert alert--info" > < div class = "admonitionHeading_Gvgb" > < span class = "admonitionIcon_Rf37" > < svg viewBox = "0 0 14 16" > < path fill-rule = "evenodd" d = "M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z" > < / path > < / svg > < / span > info< / div > < div class = "admonitionContent_BuS1" > < p > Final source code: < a href = "/files/cpp/exceptions-and-raii/placeholders/placeholders.hpp" target = "_blank" rel = "noopener noreferrer" > < code > placeholders.hpp< / code > < / a > < / p > < / div > < / div >
< h2 class = "anchor anchorWithStickyNavbar_LWe7" id = "post-mortem" > Post-mortem< a href = "#post-mortem" class = "hash-link" aria-label = "Direct link to Post-mortem" title = "Direct link to Post-mortem" > < / a > < / h2 >
< p > One of the things, I' ve forgotten about, is the fact that static analysis of
your code has no way to know those helper functions we' ve created as shortcuts
don' t return and just throw the exception right away. Therefore we need to mark
them with < code > [[noreturn]]< / code > to let the static analysis know that we < strong > never< / strong >
return from such functions. For example:< / p >
2024-02-04 13:54:29 +01:00
< div class = "language-cpp codeBlockContainer_Ckt0 theme-code-block" style = "--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)" > < div class = "codeBlockContent_biex" > < pre tabindex = "0" class = "prism-code language-cpp codeBlock_bY9V thin-scrollbar" style = "background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)" > < code class = "codeBlockLines_e6Vv" > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > [< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > [< / span > < span class = "token plain" > noreturn< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ]< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ]< / span > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > void< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > unreachable< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > {< / span > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > throw< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > _unreachable< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > )< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ;< / span > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > }< / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" style = "display:inline-block" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > template< / span > < span class = "token plain" > < / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > < < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > class< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token plain" > Args< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > > < / span > < span class = "token plain" > < / span > < br > < / span > < span class = "token-line" style = "color:hsl(230, 8%, 24%)" > < span class = "token plain" > < / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > [< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > [< / span > < span class = "token plain" > noreturn< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ]< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ]< / span > < span class = "token plain" > < / span > < span class = "token keyword" style = "color:hsl(301, 63%, 40%)" > void< / span > < span class = "token plain" > < / span > < span class = "token function" style = "color:hsl(221, 87%, 60%)" > unreachable< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > (< / span > < span class = "token plain" > std< / span > < span class = "token double-colon punctuation" style = "color:hsl(119, 34%, 47%)" > ::< / span > < span class = "token plain" > format_string< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > < < / span > < span class = "token plain" > Args< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > .< / span > < span class = "token operator" style = "color:hsl(221, 87%, 60%)" > > < / span > < span class = "token plain" > fmt< / span > < span class = "token punctuation" style = "color:hsl(119, 34%, 47%)" > ,< / span > < span class = "token plain" >
2023-11-24 18:33:21 +01:00
< / body >
< / html >