{"id":344,"date":"2022-12-03T03:33:35","date_gmt":"2022-12-03T03:33:35","guid":{"rendered":"https:\/\/jassweb.com\/new22\/solved-compile-time-restricted-templates-without-use-of-boost\/"},"modified":"2022-12-03T03:33:35","modified_gmt":"2022-12-03T03:33:35","slug":"solved-compile-time-restricted-templates-without-use-of-boost-2","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/","title":{"rendered":"[Solved] Compile time Restricted Templates without use of boost"},"content":{"rendered":"<h2> Introduction <\/h2>\n<p>[ad_1]<\/p>\n<p>Compile time restricted templates are a powerful tool for creating efficient and reusable code. They allow developers to create templates that can be used in multiple contexts, while still ensuring that the code is optimized for the specific context in which it is used. This article will discuss how to create compile time restricted templates without the use of the Boost library. We will look at the advantages of using compile time restricted templates, and how to implement them without the use of Boost. Finally, we will discuss some of the potential pitfalls of using compile time restricted templates.<\/p>\n<h2> Solution<\/h2>\n<p><\/p>\n<p>\/\/ Solution<\/p>\n<p>#include <iostream><\/p>\n<p>template <typename T, int N><br \/>\nclass CompileTimeRestrictedTemplate<br \/>\n{<br \/>\nprivate:<br \/>\n    T data[N];<\/p>\n<p>public:<br \/>\n    CompileTimeRestrictedTemplate()<br \/>\n    {<br \/>\n        for (int i = 0; i < N; i++)\n            data[i] = 0;\n    }\n\n    T&#038; operator[](int index)\n    {\n        if (index < 0 || index >= N)<br \/>\n            throw std::out_of_range(&#8220;Index out of range&#8221;);<br \/>\n        return data[index];<br \/>\n    }<br \/>\n};<\/p>\n<p>int main()<br \/>\n{<br \/>\n    CompileTimeRestrictedTemplate<int, 10> arr;<br \/>\n    arr[0] = 10;<br \/>\n    arr[9] = 20;<br \/>\n    std::cout << arr[0] << \" \" << arr[9] << std::endl;\n    return 0;\n} <\/p>\n<p><\/p>\n<div class=\"entry-content\" itemprop=\"text\">\n<script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-1088640234840270\" crossorigin=\"anonymous\"><\/script><br \/>\n<script><\/p>\n<p><\/script><\/p>\n<p><\/p>\n<div id=\"answer-31744764\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"31744764\" data-parentid=\"31740895\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>You are missing some <code>typename<\/code>s and have the class template <code>Move<\/code> definition repeated three times.<\/p>\n<p>Th below code works:<\/p>\n<pre><code>#include &lt;iostream&gt;\n#include &lt;type_traits&gt;\n\nusing namespace std;\n\ntemplate &lt;typename T&gt; class remove_all_pointers{\npublic:\n    typedef T type;\n};\n\ntemplate &lt;typename T&gt; class remove_all_pointers&lt;T*&gt;{\npublic:\n    typedef typename remove_all_pointers&lt;T&gt;::type type;\n};\n\ntemplate &lt;typename T&gt; class remove_all_pointers&lt;T* const&gt;{\npublic:\n    typedef typename remove_all_pointers&lt;T&gt;::type type;\n};\n\ntemplate &lt;typename T&gt; class remove_all_pointers&lt;T* volatile&gt;{\npublic:\n    typedef typename remove_all_pointers&lt;T&gt;::type type;\n};\n\ntemplate &lt;typename T&gt; class remove_all_pointers&lt;T* const volatile &gt;{\npublic:\n    typedef typename remove_all_pointers&lt;T&gt;::type type;\n};\n\n\nclass OverVoid{\npublic:\n\n    static bool isOverVoid (){\n    return true;\n    }\n    virtual ~OverVoid(){\n    }\n};\n\nclass Meta: public OverVoid{\n\n};\n\nclass Physical{\npublic:\n\n};\n\ntemplate&lt;typename T, typename = typename std::enable_if&lt;std::is_base_of&lt;OverVoid, typename remove_all_pointers&lt;T&gt;::type&gt;::value&gt;::type&gt;\nclass Move{\npublic:\n    Move()\n    {\n        cout&lt;&lt;\"### \"&lt;&lt;remove_all_pointers&lt;T&gt;::type::isOverVoid()&lt;&lt;endl;\n    }\n};\n\n\/*\ntemplate&lt;typename T,typename = typename std::enable_if&lt;std::is_base_of&lt;OverVoid, typename remove_all_pointers&lt;T&gt;::type&gt;::value&gt;::type&gt;\nclass Move{\npublic:\n    Move()\n    {\n        cout&lt;&lt;\"### \"&lt;&lt;remove_all_pointers&lt;T&gt;::type::isOverVoid()&lt;&lt;endl;\n    }\n};\n\ntemplate&lt;typename T, typename = typename std::enable_if&lt;std::is_base_of&lt;OverVoid, typename remove_all_pointers&lt;T&gt;::type&gt;::value&gt;::type&gt;\nclass Move{\npublic:\n    Move()\n    {\n        cout&lt;&lt;\"### \"&lt;&lt;remove_all_pointers&lt;T&gt;::type::isOverVoid()&lt;&lt;endl;\n    }\n};\n*\/\n\nint main(){\n    Move&lt;Meta***&gt; z;\n    Move&lt;Meta**&gt; w;\n    Move&lt;Meta*&gt; x;\n    Move&lt;Meta&gt; y;\n}\n<\/code><\/pre>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/coliru.stacked-crooked.com\/a\/4dbe771dadfce6d8\">Live demo here<\/a>.<\/p>\n<\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p> <span class=\"d-none\" itemprop=\"commentCount\"><\/span> <\/p>\n<\/div>\n<\/div>\n<p>solved Compile time Restricted Templates without use of boost <\/p>\n<p><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-1088640234840270\" crossorigin=\"anonymous\"><\/script><br \/>\n<script><\/p>\n<p><\/script><\/div>\n<p>[ad_2]<\/p>\n<h1>Compile Time Restricted Templates Without Boost<\/h1>\n<p>Templates are a powerful tool in C++, allowing for code reuse and flexibility. However, they can also be difficult to manage, especially when dealing with compile-time restrictions. Fortunately, there are ways to restrict templates without using the Boost library.<\/p>\n<h2>Using Static Assertions<\/h2>\n<p>The most straightforward way to restrict templates is to use static assertions. These are assertions that are checked at compile-time, and can be used to ensure that a template is only used with certain types. For example, if you wanted to restrict a template to only accept integral types, you could use a static assertion like this:<\/p>\n<pre><code>template &lt;typename T&gt;\nvoid foo(T t)\n{\n    static_assert(std::is_integral&lt;T&gt;::value, \"T must be an integral type\");\n    \/\/ ...\n}\n<\/code><\/pre>\n<p>This will cause a compile-time error if the template is used with a non-integral type. This is a simple and effective way to restrict templates.<\/p>\n<h2>Using SFINAE<\/h2>\n<p>Another way to restrict templates is to use SFINAE (Substitution Failure Is Not An Error). This is a technique that allows you to selectively enable or disable certain template specializations based on certain criteria. For example, if you wanted to restrict a template to only accept integral types, you could use a SFINAE expression like this:<\/p>\n<pre><code>template &lt;typename T&gt;\ntypename std::enable_if&lt;std::is_integral&lt;T&gt;::value, void&gt;::type\nfoo(T t)\n{\n    \/\/ ...\n}\n<\/code><\/pre>\n<p>This will cause the template to be disabled if the type is not an integral type. This is a more advanced technique, but it can be useful in certain situations.<\/p>\n<h2>Conclusion<\/h2>\n<p>Templates can be difficult to manage, especially when dealing with compile-time restrictions. Fortunately, there are ways to restrict templates without using the Boost library. Static assertions and SFINAE are two techniques that can be used to restrict templates in a safe and effective manner.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction [ad_1] Compile time restricted templates are a powerful tool for creating efficient and reusable code. They allow developers to create templates that can be used in multiple contexts, while still ensuring that the code is optimized for the specific context in which it is used. This article will discuss how to create compile time &#8230; <a title=\"[Solved] Compile time Restricted Templates without use of boost\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\" aria-label=\"More on [Solved] Compile time Restricted Templates without use of boost\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324,513,5188,435,2682],"class_list":["post-344","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c","tag-c11","tag-tdm-mingw","tag-templates","tag-typetraits"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Compile time Restricted Templates without use of boost - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Compile time Restricted Templates without use of boost - JassWeb\" \/>\n<meta property=\"og:description\" content=\"Introduction [ad_1] Compile time restricted templates are a powerful tool for creating efficient and reusable code. They allow developers to create templates that can be used in multiple contexts, while still ensuring that the code is optimized for the specific context in which it is used. This article will discuss how to create compile time ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-03T03:33:35+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Compile time Restricted Templates without use of boost\",\"datePublished\":\"2022-12-03T03:33:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\"},\"wordCount\":158,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\",\"c++11\",\"tdm-mingw\",\"templates\",\"typetraits\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\",\"name\":\"[Solved] Compile time Restricted Templates without use of boost - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-12-03T03:33:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Compile time Restricted Templates without use of boost\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Compile time Restricted Templates without use of boost - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Compile time Restricted Templates without use of boost - JassWeb","og_description":"Introduction [ad_1] Compile time restricted templates are a powerful tool for creating efficient and reusable code. They allow developers to create templates that can be used in multiple contexts, while still ensuring that the code is optimized for the specific context in which it is used. This article will discuss how to create compile time ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/","og_site_name":"JassWeb","article_published_time":"2022-12-03T03:33:35+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Compile time Restricted Templates without use of boost","datePublished":"2022-12-03T03:33:35+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/"},"wordCount":158,"commentCount":0,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++","c++11","tdm-mingw","templates","typetraits"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/","url":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/","name":"[Solved] Compile time Restricted Templates without use of boost - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-03T03:33:35+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-compile-time-restricted-templates-without-use-of-boost-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Compile time Restricted Templates without use of boost"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=344"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/344\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}