{"id":160,"date":"2009-02-22T04:48:19","date_gmt":"2009-02-22T02:48:19","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=160"},"modified":"2009-02-25T08:30:09","modified_gmt":"2009-02-25T06:30:09","slug":"type-inference-in-c","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/","title":{"rendered":"Type inference in C++"},"content":{"rendered":"<p>The new C++0x standard provides support for type inference. The <font color=\"#0066CC\"><b>auto<\/b><\/font> keyword that was doing nothing in C++ was given a new meaning: a placeholder for a type inferred by the compiler. For those familiar with C#&#8217;s <font color=\"#0066CC\"><b>var<\/b><\/font> keyword, this is basically the same.<\/p>\n<p>Here is a comparison between <font color=\"#0066CC\"><b>auto<\/b><\/font> in C++ and <font color=\"#0066CC\"><b>var<\/b><\/font> in C#.<\/p>\n<table border=\"0\" width=\"800px\">\n<tr valign=\"top\">\n<th width=\"400px\">C++<\/th>\n<th width=\"400px\">C#<\/th>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"400px\">\n<pre class=\"prettyprint\">\r\nint _tmain(int argc, _TCHAR* argv[])\r\n{\r\n   auto i = 42;\r\n   auto s = \"Hello world!\";\r\n   auto d = 12.50;\r\n   auto l = [](int n) {return n * n;};\r\n\r\n   cout &lt;&lt; \"i = \" &lt;&lt; i &lt;&lt; endl;\r\n   cout &lt;&lt; \"s = \" &lt;&lt; s &lt;&lt; endl;\r\n   cout &lt;&lt; \"d = \" &lt;&lt; d &lt;&lt; endl;\r\n   cout &lt;&lt; \"l(i) = \" &lt;&lt; l(i) &lt;&lt; endl;\r\n\r\n   return 0;\r\n}\r\n<\/pre>\n<\/td>\n<td width=\"400px\">\n<pre class=\"prettyprint\">\r\nclass Program\r\n{\r\n   static void Main(string[] args)\r\n   {\r\n      var i = 42;\r\n      var s = \"hello world\";\r\n      var d = 12.50;\r\n      \/\/var l = (n) =&gt; n * n; \/\/ error CS0815\r\n\r\n      Console.WriteLine(\"i = {0}\", i);\r\n      Console.WriteLine(\"s = {0}\", s);\r\n      Console.WriteLine(\"d = {0}\", d);\r\n   }\r\n}\r\n<\/pre>\n<\/td>\n<\/tr>\n<\/table>\n<p>with the output<\/p>\n<table border=\"0\" width=\"800px\">\n<tr valign=\"top\">\n<th width=\"400px\">C++<\/th>\n<th width=\"400px\">C#<\/th>\n<\/tr>\n<tr valign=\"top\">\n<td width=\"400px\">\n<pre class=\"prettyprint\">\r\ni = 42\r\ns = Hello world!\r\nd = 12.5\r\nl(i) = 1764\r\n<\/pre>\n<\/td>\n<td width=\"50%\">\n<pre class=\"prettyprint\">\r\ni = 42\r\ns = Hello world!\r\nd = 12.5\r\n\r\n<\/pre>\n<\/td>\n<\/tr>\n<\/table>\n<p>As you can see, the use is very similar, except that in C++ you can use auto for a lambda expression, while in C# you cannot. The C# compiler raises an error, CS0815, when you try to use var with an anonymous function expressions, a lambda expression, a method group expressions, or the null literal expression, because these don&#8217;t have a type.<\/p>\n<p>Just like with <font color=\"#0066CC\"><b>var<\/b><\/font>, you can only use <font color=\"#0066CC\"><b>auto<\/b><\/font> locally, and not as return type from a function, or parameter to a function.<\/p>\n<pre class=\"prettyprint\">\r\nauto power(int n)\r\n{\r\n   return n * n;\r\n}\r\n<\/pre>\n<pre class=\"prettyprint\">\r\nerror C3532: 'auto (int)': incorrect usage of 'auto'\r\n<\/pre>\n<pre class=\"prettyprint\">\r\nint power(auto n)\r\n{\r\n   return n * n;\r\n}\r\n<\/pre>\n<pre class=\"prettyprint\">\r\nerror C3533: 'auto': a parameter cannot have a type that contains 'auto'\r\n<\/pre>\n<p>While it might not be of that much help for ints or strings, using auto for instead of vector&lt; int &gt;::iterator, or map&lt; string, list&lt; string &gt;&gt;::const_iterator comes in handy. The auto type inference helps us write less verbose code.<\/p>\n<pre class=\"prettyprint\">\r\nvector&lt; string &gt; words;\r\nwords.push_back(\"hello\");\r\nwords.push_back(\"world\");\r\n\r\nfor(auto it = words.begin(); it != words.end(); ++it)\r\n   cout &lt;&lt; *it &lt;&lt; endl;\r\n<\/pre>\n<p>In addition to <font color=\"#0066CC\"><b>auto<\/b><\/font>, the C++0x standard introduces a new keyword, called <font color=\"#0066CC\"><b>decltype<\/b><\/font> (think of it as &#8216;typeof&#8217;), that can be used to determine the type of an expression at compile time.<\/p>\n<pre class=\"prettyprint\">\r\nauto i = 42;\r\ndecltype(i) i2 = 44;\r\n<\/pre>\n<p>However, this new keyword was not yet introduced in Visual Studio 2010 CTP. According to <a href=\"http:\/\/blogs.msdn.com\/vcblog\/archive\/2008\/10\/28\/lambdas-auto-and-static-assert-c-0x-features-in-vc10-part-1.aspx#9025183\" target=\"_blank\">Stephan T. Lavavej<\/a> from the VC++ team, it might be possible to be introduced in a next CTP or beta version.<\/p>\n<blockquote><p>\nImplementing auto doesn&#8217;t implement decltype (C++0x&#8217;s name for what was previously called typeof) for free.<\/p>\n<p>Paraphrasing our libraries and compiler front-end program manager Damien Watkins, the CTP is only the first look at our VC10 functionality and there is definitely more to come. We understand that certain features &#8220;go together&#8221;, and that adding complementary features is a good thing in general. As always, customer feedback is a vital resource in forming our plans.\n<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>The new C++0x standard provides support for type inference. The auto keyword that was doing nothing in C++ was given a new meaning: a placeholder for a type inferred by the compiler. For those familiar with C#&#8217;s var keyword, this is basically the same. Here is a comparison between auto in C++ and var in &#8230; <a title=\"Type inference in C++\" class=\"read-more\" href=\"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/\" aria-label=\"Read more about Type inference in C++\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[11,7,20,10],"tags":[75,451,73,90,78,77,74,76,89],"class_list":["post-160","post","type-post","status-publish","format-standard","hentry","category-csharp","category-c","category-ctps-betas","category-visual-studio","tag-auto","tag-c","tag-c0x","tag-ctp","tag-decltype","tag-inference","tag-standard","tag-var","tag-vs2010"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"auto,c++,c++0x,ctp,decltype,inference,standard,var,vs2010\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Type inference in C++\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2009-02-22T02:48:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2009-02-25T06:30:09+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Type inference in C++\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#article\",\"name\":\"Type inference in C++\",\"headline\":\"Type inference in C++\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2009-02-22T04:48:19+02:00\",\"dateModified\":\"2009-02-25T08:30:09+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#webpage\"},\"articleSection\":\"C#, C++, CTPs &amp; Betas, Visual Studio, auto, C++, C++0x, CTP, decltype, inference, standard, var, VS2010\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"position\":4,\"name\":\".NET\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"position\":5,\"name\":\"C#\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#listItem\",\"name\":\"Type inference in C++\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/#listItem\",\"name\":\".NET\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#listItem\",\"position\":6,\"name\":\"Type inference in C++\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/net\\\/csharp\\\/#listItem\",\"name\":\"C#\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/\",\"name\":\"Type inference in C++\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2009\\\/02\\\/22\\\/type-inference-in-c\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2009-02-22T04:48:19+02:00\",\"dateModified\":\"2009-02-25T08:30:09+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Type inference in C++","description":"","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/","robots":"max-image-preview:large","keywords":"auto,c++,c++0x,ctp,decltype,inference,standard,var,vs2010","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#article","name":"Type inference in C++","headline":"Type inference in C++","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2009-02-22T04:48:19+02:00","dateModified":"2009-02-25T08:30:09+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#webpage"},"articleSection":"C#, C++, CTPs &amp; Betas, Visual Studio, auto, C++, C++0x, CTP, decltype, inference, standard, var, VS2010"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","position":4,"name":".NET","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","position":5,"name":"C#","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#listItem","name":"Type inference in C++"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/#listItem","name":".NET"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#listItem","position":6,"name":"Type inference in C++","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/#listItem","name":"C#"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/","name":"Type inference in C++","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2009-02-22T04:48:19+02:00","dateModified":"2009-02-25T08:30:09+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"Type inference in C++","og:url":"https:\/\/mariusbancila.ro\/blog\/2009\/02\/22\/type-inference-in-c\/","article:published_time":"2009-02-22T02:48:19+00:00","article:modified_time":"2009-02-25T06:30:09+00:00","twitter:card":"summary","twitter:title":"Type inference in C++"},"aioseo_meta_data":{"post_id":"160","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:16:02","updated":"2025-12-12 07:24:40","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":0,"uagb_excerpt":"The new C++0x standard provides support for type inference. The auto keyword that was doing nothing in C++ was given a new meaning: a placeholder for a type inferred by the compiler. For those familiar with C#&#8217;s var keyword, this is basically the same. Here is a comparison between auto in C++ and var in&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/net\/csharp\/\" class=\"advgb-post-tax-term\">C#<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/ctps-betas\/\" class=\"advgb-post-tax-term\">CTPs &amp; Betas<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">Visual Studio<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C#<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">CTPs &amp; Betas<\/span>","<span class=\"advgb-post-tax-term\">Visual Studio<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">auto<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">C++0x<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">CTP<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">decltype<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">inference<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">standard<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">var<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/visual-studio\/\" class=\"advgb-post-tax-term\">VS2010<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">auto<\/span>","<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">C++0x<\/span>","<span class=\"advgb-post-tax-term\">CTP<\/span>","<span class=\"advgb-post-tax-term\">decltype<\/span>","<span class=\"advgb-post-tax-term\">inference<\/span>","<span class=\"advgb-post-tax-term\">standard<\/span>","<span class=\"advgb-post-tax-term\">var<\/span>","<span class=\"advgb-post-tax-term\">VS2010<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 18 years ago","modified":"Updated 18 years ago"},"absolute_dates":{"created":"Posted on February 22, 2009","modified":"Updated on February 25, 2009"},"absolute_dates_time":{"created":"Posted on February 22, 2009 4:48 am","modified":"Updated on February 25, 2009 8:30 am"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-2A","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=160"}],"version-history":[{"count":10,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":190,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/160\/revisions\/190"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}