<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Kate Gregory's Blog - C++ Guidelines</title>
    <link>http://www.gregcons.com/KateBlog/</link>
    <description>Really Good Donut</description>
    <language>en-us</language>
    <copyright>Kate Gregory</copyright>
    <lastBuildDate>Sat, 17 Jun 2023 18:51:47 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>kate@gregcons.com</managingEditor>
    <webMaster>kate@gregcons.com</webMaster>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=250de985-a301-417e-b70b-e1ec7a71707c</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=250de985-a301-417e-b70b-e1ec7a71707c</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
From time to time I think it's wise to summarize the courses I have on Pluralsight.
There is a link on the side you can use to get a free trial if you want to take any
of these. Because I redo most of the courses each time a new version of C++ becomes
widespread, there are quite a few courses with similar names. Here's a quick summary.<br /></p>
        <p>
If you are using the latest version of a major compiler, you are on C++20. These courses
have been updated for C++20: 
</p>
        <ul>
          <li>
            <a href="https://www.pluralsight.com/courses/cplusplus-20-big-picture">C++ 20: The
Big Picture </a>This is an overview covering "what is C++?" and "what is it used for?".
If someone has suggested you learn it, start here to understand why you might want
to. The title means that it's up to date to C++20, not that it only covers C++20.
The actual content is equally applicable to older versions of the language.<br /></li>
          <li>
            <a href="https://www.pluralsight.com/courses/cplusplus-20-fundamentals">C++20 Fundamentals</a> is
more properly "the fundamentals of C++ including things that were introduced in C++20".
This is an introduction to the ideas, syntax, and standard library. At seven and a
half hours it can't cover absolutely every corner of the language, but it does cover
what you need to call yourself a C++ programmer, and get started writing real code.
This course assumes you already know how to program. If you don't, try <a href="https://www.pluralsight.com/courses/learn-program-cplusplus">Learn
to Program with C++ 17</a> which will cover the building blocks of programming languages
like loops, functions, and objects while teaching the C++ syntax and library. Afterwards,
you can take Fundamentals to fill in any gaps.<br /></li>
          <li>
            <a href="https://www.pluralsight.com/courses/cplusplus-20-algorithms-playbook">C++20
Algorithms Playbook</a> again covers up to and including C++20, so plenty of things
that have been around for decades, but it does have a lot of content that is C++20
only, because ranges made such a big difference here. If you're not on C++20 yet,
take the C++17 version, listed below. Both versions are designed to convince you to
stop writing raw loops and start using the many useful functions provided in the standard
library. I demystify iterators and show you the benefits of using library code instead
of rolling your own.</li>
        </ul>
        <div>If you're not on C++20 and are wondering if you should be, try <a href="https://www.pluralsight.com/courses/whats-new-cplusplus-20">What's
New in C++20.</a> It will show you what you have to gain by updating to the latest
version of your compiler (and how to try things out if your compiler doesn't support
something yet.)
</div>
        <div>
          <br />
        </div>
        <div>If you're on an older version and can't move, you should still use the latest
iteration of Fundamentals. There's very little C++20 only material in there, and it's
all signposted, so you can just move past that part if you need to. For the algorithms
course, <a href="https://www.pluralsight.com/courses/beautiful-cplusplus-stl-algorithms">Beautiful
C++ 14: STL Algorithms</a> is the older version that doesn't have all the ranges additions.
</div>
        <div>
          <br />
        </div>
        <div>Some of my courses are really not version specific, but apply to particular kinds
of work you might need to do.
</div>
        <div>
          <ul>
            <li>
              <a href="https://www.pluralsight.com/courses/reading-legacy-cplusplus">Reading Legacy
C++</a> helps you navigate old and decidedly non-modern codebases so you can understand
what you're seeing</li>
            <li>
              <a href="https://www.pluralsight.com/courses/cpp-updating-legacy-code">Beautiful C++
17: Updating Legacy Code</a> is for those who need to change that code to a more modern
style and aren't sure where to start -- or how to know when you're done!</li>
            <li>
              <a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look">First
Look: C++ Core Guidelines and the Guideline Support Library</a> is ancient by Pluralsight
standards, but if you haven't got around to checking out the guidelines, it will give
you a way to get started. If you want a deeper dive, I have a <a href="https://www.amazon.com/Beautiful-Core-Guidelines-Writing-Clean/dp/0137647840/ref=sr_1_1?crid=DARDSEDN5EXT">book </a>you
might enjoy.</li>
          </ul>
          <div>I plan to update everything for C++23 when the compilers have support for the
new features. There are a few things coming I'm really looking forward to!
</div>
          <div>
            <br />
          </div>
          <div>Kate<br /></div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=250de985-a301-417e-b70b-e1ec7a71707c" />
      </body>
      <title>My Pluralsight courses</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=250de985-a301-417e-b70b-e1ec7a71707c</guid>
      <link>http://www.gregcons.com/KateBlog/MyPluralsightCourses.aspx</link>
      <pubDate>Sat, 17 Jun 2023 18:51:47 GMT</pubDate>
      <description>&lt;p&gt;
From time to time I think it's wise to summarize the courses I have on Pluralsight.
There is a link on the side you can use to get a free trial if you want to take any
of these. Because I redo most of the courses each time a new version of C++ becomes
widespread, there are quite a few courses with similar names. Here's a quick summary.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
If you are using the latest version of a major compiler, you are on C++20. These courses
have been updated for C++20: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/cplusplus-20-big-picture"&gt;C++ 20: The
Big Picture &lt;/a&gt;This is an overview covering "what is C++?" and "what is it used for?".
If someone has suggested you learn it, start here to understand why you might want
to. The title means that it's up to date to C++20, not that it only covers C++20.
The actual content is equally applicable to older versions of the language.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/cplusplus-20-fundamentals"&gt;C++20 Fundamentals&lt;/a&gt; is
more properly "the fundamentals of C++ including things that were introduced in C++20".
This is an introduction to the ideas, syntax, and standard library. At seven and a
half hours it can't cover absolutely every corner of the language, but it does cover
what you need to call yourself a C++ programmer, and get started writing real code.
This course assumes you already know how to program. If you don't, try &lt;a href="https://www.pluralsight.com/courses/learn-program-cplusplus"&gt;Learn
to Program with C++ 17&lt;/a&gt; which will cover the building blocks of programming languages
like loops, functions, and objects while teaching the C++ syntax and library. Afterwards,
you can take Fundamentals to fill in any gaps.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/cplusplus-20-algorithms-playbook"&gt;C++20
Algorithms Playbook&lt;/a&gt; again covers up to and including C++20, so plenty of things
that have been around for decades, but it does have a lot of content that is C++20
only, because ranges made such a big difference here. If you're not on C++20 yet,
take the C++17 version, listed below. Both versions are designed to convince you to
stop writing raw loops and start using the many useful functions provided in the standard
library. I demystify iterators and show you the benefits of using library code instead
of rolling your own.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;If you're not on C++20 and are wondering if you should be, try &lt;a href="https://www.pluralsight.com/courses/whats-new-cplusplus-20"&gt;What's
New in C++20.&lt;/a&gt; It will show you what you have to gain by updating to the latest
version of your compiler (and how to try things out if your compiler doesn't support
something yet.)
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;div&gt;If you're on an older version and can't move, you should still use the latest
iteration of Fundamentals. There's very little C++20 only material in there, and it's
all signposted, so you can just move past that part if you need to. For the algorithms
course, &lt;a href="https://www.pluralsight.com/courses/beautiful-cplusplus-stl-algorithms"&gt;Beautiful
C++ 14: STL Algorithms&lt;/a&gt; is the older version that doesn't have all the ranges additions.
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;div&gt;Some of my courses are really not version specific, but apply to particular kinds
of work you might need to do.
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/reading-legacy-cplusplus"&gt;Reading Legacy
C++&lt;/a&gt; helps you navigate old and decidedly non-modern codebases so you can understand
what you're seeing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/cpp-updating-legacy-code"&gt;Beautiful C++
17: Updating Legacy Code&lt;/a&gt; is for those who need to change that code to a more modern
style and aren't sure where to start -- or how to know when you're done!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look"&gt;First
Look: C++ Core Guidelines and the Guideline Support Library&lt;/a&gt; is ancient by Pluralsight
standards, but if you haven't got around to checking out the guidelines, it will give
you a way to get started. If you want a deeper dive, I have a &lt;a href="https://www.amazon.com/Beautiful-Core-Guidelines-Writing-Clean/dp/0137647840/ref=sr_1_1?crid=DARDSEDN5EXT"&gt;book &lt;/a&gt;you
might enjoy.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;I plan to update everything for C++23 when the compilers have support for the
new features. There are a few things coming I'm really looking forward to!
&lt;/div&gt;
&lt;div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;div&gt;Kate&lt;br&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=250de985-a301-417e-b70b-e1ec7a71707c" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Seen and Recommended</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=e4ea85f9-db06-46ec-903c-c33dd5ad1606</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=e4ea85f9-db06-46ec-903c-c33dd5ad1606</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's true! I helped to write a book! Another book! (Do not ask me what this brings
the total to, I truly do not know.) This one is about some of the <a href="https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines">C++
Core Guidelines</a>.<br /></p>
        <p>
          <img src="http://www.gregcons.com/KateBlog/content/binary/ShowCover.jpeg" border="0" />
        </p>
        <p>
Opinions vary on when it will be available: maybe the last week of 2021, maybe early
2022. You can <a href="https://www.informit.com/store/beautiful-c-plus-plus-30-core-guidelines-for-writing-9780137647842">pre-order
from the publisher</a> if you can't wait. There will be both an ebook and a paper
version.
</p>
        <p>
It's Guy Davidson who wrote it really; I have been a sort of editor and suggester
and inspirer most of the time. If you liked my CppCon 2017 talk, <a href="https://youtu.be/XkDEzfpdcSg">10
Core Guidelines You Need to Start Using Now</a>, you will love this book, and not
just because it's three times as many guidelines. Guy has included explanations of
the 30 guidelines we chose, along with plenty of examples, the occasional diagram,
and stories that put them into context and show you why it matters how you write certain
constructs and why you should avoid some aspects of the language entirely. We are
delighted that both Bjarne Stroustrup and Herb Sutter, who edit the Core Guidelines,
reviewed the book, gave us helpful comments on the text, and wrote a foreword and
an afterword for us as well.
</p>
        <p>
I learned things writing this. You will learn things reading it. It may well change
the way you approach code. That is one of our goals. The other is to get you trusting
the guidelines and dipping into them when you have decisions to make about how to
implement something. If these 30 are useful and good (and they are!) then imagine
what else is waiting for you when you're ready!
</p>
        <p>
 Please spread the word far and wide.<br /></p>
        <p>
Kate
</p>
        <p>
ps: the full title is quite a mouthful. We're thinking of RainbowFlower as a nickname
for the book. What do you think?<br /></p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=e4ea85f9-db06-46ec-903c-c33dd5ad1606" />
      </body>
      <title>Beautiful C++: 30 Core Guidelines for Writing Clean, Safe, and Fast Code</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=e4ea85f9-db06-46ec-903c-c33dd5ad1606</guid>
      <link>http://www.gregcons.com/KateBlog/BeautifulC30CoreGuidelinesForWritingCleanSafeAndFastCode.aspx</link>
      <pubDate>Fri, 05 Nov 2021 18:40:38 GMT</pubDate>
      <description>&lt;p&gt;
It's true! I helped to write a book! Another book! (Do not ask me what this brings
the total to, I truly do not know.) This one is about some of the &lt;a href="https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines"&gt;C++
Core Guidelines&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.gregcons.com/KateBlog/content/binary/ShowCover.jpeg" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
Opinions vary on when it will be available: maybe the last week of 2021, maybe early
2022. You can &lt;a href="https://www.informit.com/store/beautiful-c-plus-plus-30-core-guidelines-for-writing-9780137647842"&gt;pre-order
from the publisher&lt;/a&gt; if you can't wait. There will be both an ebook and a paper
version.
&lt;/p&gt;
&lt;p&gt;
It's Guy Davidson who wrote it really; I have been a sort of editor and suggester
and inspirer most of the time. If you liked my CppCon 2017 talk, &lt;a href="https://youtu.be/XkDEzfpdcSg"&gt;10
Core Guidelines You Need to Start Using Now&lt;/a&gt;, you will love this book, and not
just because it's three times as many guidelines. Guy has included explanations of
the 30 guidelines we chose, along with plenty of examples, the occasional diagram,
and stories that put them into context and show you why it matters how you write certain
constructs and why you should avoid some aspects of the language entirely. We are
delighted that both Bjarne Stroustrup and Herb Sutter, who edit the Core Guidelines,
reviewed the book, gave us helpful comments on the text, and wrote a foreword and
an afterword for us as well.
&lt;/p&gt;
&lt;p&gt;
I learned things writing this. You will learn things reading it. It may well change
the way you approach code. That is one of our goals. The other is to get you trusting
the guidelines and dipping into them when you have decisions to make about how to
implement something. If these 30 are useful and good (and they are!) then imagine
what else is waiting for you when you're ready!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;Please spread the word far and wide.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;p&gt;
ps: the full title is quite a mouthful. We're thinking of RainbowFlower as a nickname
for the book. What do you think?&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=e4ea85f9-db06-46ec-903c-c33dd5ad1606" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=62e5d4bd-baa2-4005-8507-9b22fb61c231</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=62e5d4bd-baa2-4005-8507-9b22fb61c231</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My <a href="http://www.pluralsight.com/courses/cpp-updating-legacy-code">latest Pluralsight
course</a> is live!
</p>
        <p>
          <a href="http://www.pluralsight.com/courses/cpp-updating-legacy-code">
            <img src="http://www.gregcons.com/KateBlog/content/binary/teaser[1][2][3][4][5][6][7][8][9][10][11][12][13].jpg" width="800" border="0" />
          </a>
        </p>
        <p>
I start by talking about strategy - what parts to update, what general approach to
take, and so on. Then I present a number of specific tactics, like using the preprocessor
less and the compiler more, actually using C++ instead of just C, and using C++ features
that were added in C++ 11, C++ 14, and C++ 17. I show you code examples for the changes
I am suggesting, and explain why specific changes produce code that is more readable,
understandable, and maintainable.
</p>
        <p>
As always, if you don't already have a Pluralsight subscription, feel free to click
the large white box in the margin and start a free trial. I hope you like the course,
and tell your friends about it too!
</p>
        <p>
Kate
</p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=62e5d4bd-baa2-4005-8507-9b22fb61c231" />
      </body>
      <title>New Pluralsight Course: "Beautiful C++: Updating Legacy Code"</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=62e5d4bd-baa2-4005-8507-9b22fb61c231</guid>
      <link>http://www.gregcons.com/KateBlog/NewPluralsightCourseBeautifulCUpdatingLegacyCode.aspx</link>
      <pubDate>Tue, 20 Nov 2018 16:39:33 GMT</pubDate>
      <description>&lt;p&gt;
My &lt;a href="http://www.pluralsight.com/courses/cpp-updating-legacy-code"&gt;latest Pluralsight
course&lt;/a&gt; is live!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.pluralsight.com/courses/cpp-updating-legacy-code"&gt;&lt;img src="http://www.gregcons.com/KateBlog/content/binary/teaser[1][2][3][4][5][6][7][8][9][10][11][12][13].jpg" width="800" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I start by talking about strategy - what parts to update, what general approach to
take, and so on. Then I present a number of specific tactics, like using the preprocessor
less and the compiler more, actually using C++ instead of just C, and using C++ features
that were added in C++ 11, C++ 14, and C++ 17. I show you code examples for the changes
I am suggesting, and explain why specific changes produce code that is more readable,
understandable, and maintainable.
&lt;/p&gt;
&lt;p&gt;
As always, if you don't already have a Pluralsight subscription, feel free to click
the large white box in the margin and start a free trial. I hope you like the course,
and tell your friends about it too!
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=62e5d4bd-baa2-4005-8507-9b22fb61c231" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Seen and Recommended</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=f28a820a-8245-4928-89da-25db827708bb</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=f28a820a-8245-4928-89da-25db827708bb</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a very busy March and April, with travel and with preparing for those trips.
So I forgot to mention that my latest Pluralsight course is now live! It's called <a href="https://www.pluralsight.com/courses/cplusplus-fundamentals-c17">C++
Fundamentals Including C++ 17</a> and it's an update of my C++ Fundamentals course.
Here's what I changed:
</p>
        <ul>
          <li>
I made most of the demos a lot smaller, by breaking them into pieces or by putting
some of the material on slides instead</li>
          <li>
I made the slides less text-heavy, again mostly by splitting them up</li>
          <li>
I added diagrams to explain things that needed them</li>
          <li>
I added some C++ 14 and 17 content</li>
          <li>
I switched to a consistent "const after" style (aka east const)</li>
          <li>
I double checked every line of code for good style and consistency</li>
        </ul>
        <p>
I'm really pleased with the result. If you've already taken C++ Fundamentals you probably
don't need to take it again, but I hope you'll recommend to others that they take
the new one. I think it makes learning C++ less daunting than some other approaches
do.
</p>
        <p>
Kate
</p>
        <p>
ps: don't have a Pluralsight subscription? There's a link over there -------&gt; 
for a free trial.<br /></p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=f28a820a-8245-4928-89da-25db827708bb" />
      </body>
      <title>Updated C++ Fundamentals course at Pluralsight</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=f28a820a-8245-4928-89da-25db827708bb</guid>
      <link>http://www.gregcons.com/KateBlog/UpdatedCFundamentalsCourseAtPluralsight.aspx</link>
      <pubDate>Tue, 08 May 2018 21:27:06 GMT</pubDate>
      <description>&lt;p&gt;
I had a very busy March and April, with travel and with preparing for those trips.
So I forgot to mention that my latest Pluralsight course is now live! It's called &lt;a href="https://www.pluralsight.com/courses/cplusplus-fundamentals-c17"&gt;C++
Fundamentals Including C++ 17&lt;/a&gt; and it's an update of my C++ Fundamentals course.
Here's what I changed:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I made most of the demos a lot smaller, by breaking them into pieces or by putting
some of the material on slides instead&lt;/li&gt;
&lt;li&gt;
I made the slides less text-heavy, again mostly by splitting them up&lt;/li&gt;
&lt;li&gt;
I added diagrams to explain things that needed them&lt;/li&gt;
&lt;li&gt;
I added some C++ 14 and 17 content&lt;/li&gt;
&lt;li&gt;
I switched to a consistent "const after" style (aka east const)&lt;/li&gt;
&lt;li&gt;
I double checked every line of code for good style and consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I'm really pleased with the result. If you've already taken C++ Fundamentals you probably
don't need to take it again, but I hope you'll recommend to others that they take
the new one. I think it makes learning C++ less daunting than some other approaches
do.
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;p&gt;
ps: don't have a Pluralsight subscription? There's a link over there -------&amp;gt;&amp;nbsp;
for a free trial.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=f28a820a-8245-4928-89da-25db827708bb" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=b03d858d-231f-4a87-8cf8-1395d84c5b6e</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=b03d858d-231f-4a87-8cf8-1395d84c5b6e</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The <a href="https://conference.accu.org/2018/schedule.html">schedule for ACCU</a> has
now been released, and the Feb 20th early bird <a href="http://www.cvent.com/d/6tqq15">registration </a>deadline
is approaching, so I thought it was a good idea to mention my session there.
</p>
        <p>
          <img src="http://www.gregcons.com/KateBlog/content/binary/accu2018_369x124.png" width="247" height="83" border="0" />
        </p>
        <p>
          <a href="https://conference.accu.org/2018/sessions.html#XSimplicitynotjustforbeginners">Simplicity:
not just for beginners</a>
        </p>
        <blockquote>
          <p>
Many people say that simple code is better code, but fewer put it into practice. In
this talk I’ll spend a little time on why simpler is better, and why we resist simplicity.
Then I’ll provide some specific approaches that are likely to make your code simpler,
and discuss what you need to know and do in order to consistently write simpler code
and reap the benefits of that simplicity. Code samples will be in C++ and some material
will be C++-specific.
</p>
        </blockquote>
        <p>
I'll be joined by dozens of amazing speakers and the topics will be wide-ranging.
It's not all C++, and I'm looking forward to a little mind-expanding from some session
I didn't expect to do so. The pub quiz and lightning talks will also be good fun.
April 11th to 14th in Bristol - will I see you there?
</p>
        <p>
Kate<br /></p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=b03d858d-231f-4a87-8cf8-1395d84c5b6e" />
      </body>
      <title>Speaking at ACCU in April</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=b03d858d-231f-4a87-8cf8-1395d84c5b6e</guid>
      <link>http://www.gregcons.com/KateBlog/SpeakingAtACCUInApril.aspx</link>
      <pubDate>Wed, 14 Feb 2018 00:07:13 GMT</pubDate>
      <description>&lt;p&gt;
The &lt;a href="https://conference.accu.org/2018/schedule.html"&gt;schedule for ACCU&lt;/a&gt; has
now been released, and the Feb 20th early bird &lt;a href="http://www.cvent.com/d/6tqq15"&gt;registration &lt;/a&gt;deadline
is approaching, so I thought it was a good idea to mention my session there.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.gregcons.com/KateBlog/content/binary/accu2018_369x124.png" width="247" height="83" border="0"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://conference.accu.org/2018/sessions.html#XSimplicitynotjustforbeginners"&gt;Simplicity:
not just for beginners&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Many people say that simple code is better code, but fewer put it into practice. In
this talk I’ll spend a little time on why simpler is better, and why we resist simplicity.
Then I’ll provide some specific approaches that are likely to make your code simpler,
and discuss what you need to know and do in order to consistently write simpler code
and reap the benefits of that simplicity. Code samples will be in C++ and some material
will be C++-specific.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I'll be joined by dozens of amazing speakers and the topics will be wide-ranging.
It's not all C++, and I'm looking forward to a little mind-expanding from some session
I didn't expect to do so. The pub quiz and lightning talks will also be good fun.
April 11th to 14th in Bristol - will I see you there?
&lt;/p&gt;
&lt;p&gt;
Kate&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=b03d858d-231f-4a87-8cf8-1395d84c5b6e" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=6f864c8f-ed04-441b-8b57-0a55bf82fc72</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=6f864c8f-ed04-441b-8b57-0a55bf82fc72</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">In 2016 I didn't speak at conferences because
I was ill. I really enjoyed getting "back in harness" at CppCon this year (<a href="https://www.youtube.com/watch?v=XkDEzfpdcSg">my
Guidelines talk</a> has been uploaded already, if you missed it) and I am happily
looking forward to my next two conferences.<br /><br />
In Berlin I will deliver one of the <a href="http://meetingcpp.com/meetingcpp/news/items/Keynotes-at-Meeting-Cpp-2017.html">keynotes
for Meeting C++</a>. It will be one of those opinionated talks with stories in it,
plus code of course. I love giving those kinds of talks and they're typically well-received,
so I am expecting to have a great time. This will be my first time at Meeting C++
and I know it will be a great conference.<br /><br />
The next week, I will be at the <a href="http://cpp-summit.org/en">2017 C++ and System
Software Summit</a> in Beijing. 8 tracks and over 500 attendees; this is a big conference.
I've never been to Asia before, so I am very excited to meet a lot of new people (and
some I've known for a while, the speaker circuit is like that) as well as seeing new
places and experiencing a new conference. 
<br /><br />
I'm still thinking about what I will <a href="https://cfp.conference.accu.org/">submit
to ACCU</a> for the spring. I prefer to do a new talk for each conference or at least
to update existing talks dramatically. I will need to make up my mind before I leave
for China!<br /><br />
Kate<br /><p></p><img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=6f864c8f-ed04-441b-8b57-0a55bf82fc72" /></body>
      <title>Speaking in November: Berlin and Beijing</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=6f864c8f-ed04-441b-8b57-0a55bf82fc72</guid>
      <link>http://www.gregcons.com/KateBlog/SpeakingInNovemberBerlinAndBeijing.aspx</link>
      <pubDate>Thu, 19 Oct 2017 12:08:43 GMT</pubDate>
      <description>In 2016 I didn't speak at conferences because I was ill. I really enjoyed getting "back in harness" at CppCon this year (&lt;a href="https://www.youtube.com/watch?v=XkDEzfpdcSg"&gt;my
Guidelines talk&lt;/a&gt; has been uploaded already, if you missed it) and I am happily
looking forward to my next two conferences.&lt;br&gt;
&lt;br&gt;
In Berlin I will deliver one of the &lt;a href="http://meetingcpp.com/meetingcpp/news/items/Keynotes-at-Meeting-Cpp-2017.html"&gt;keynotes
for Meeting C++&lt;/a&gt;. It will be one of those opinionated talks with stories in it,
plus code of course. I love giving those kinds of talks and they're typically well-received,
so I am expecting to have a great time. This will be my first time at Meeting C++
and I know it will be a great conference.&lt;br&gt;
&lt;br&gt;
The next week, I will be at the &lt;a href="http://cpp-summit.org/en"&gt;2017 C++ and System
Software Summit&lt;/a&gt; in Beijing. 8 tracks and over 500 attendees; this is a big conference.
I've never been to Asia before, so I am very excited to meet a lot of new people (and
some I've known for a while, the speaker circuit is like that) as well as seeing new
places and experiencing a new conference. 
&lt;br&gt;
&lt;br&gt;
I'm still thinking about what I will &lt;a href="https://cfp.conference.accu.org/"&gt;submit
to ACCU&lt;/a&gt; for the spring. I prefer to do a new talk for each conference or at least
to update existing talks dramatically. I will need to make up my mind before I leave
for China!&lt;br&gt;
&lt;br&gt;
Kate&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=6f864c8f-ed04-441b-8b57-0a55bf82fc72" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Consulting Life</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=a920f1a8-3291-49be-a64f-7cc483e7b95a</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=a920f1a8-3291-49be-a64f-7cc483e7b95a</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am happy to announce that my submission to <a href="https://cppcon.org/">CppCon </a>has
been accepted!
</p>
        <p>
          <img src="http://www.gregcons.com/KateBlog/content/binary/weblogo.jpg" width="600" border="0" />
        </p>
        <blockquote>
          <p>
            <b>10 Core Guidelines You Need to Start Using Now</b>
          </p>
          <p>
The C++ Core Guidelines were announced at CppCon 2015, yet some developers have still
never heard of them. It's time to see what they have to offer for you, no matter how
much C++ experience you have. You don't need to read and learn the whole thing: in
this talk I am pulling out some highlights of the Guidelines to show you why you should
be using these selected guidelines. For each one I'll show some examples, and discuss
the benefit of adopting them for new code or going back into old code to make a change.
</p>
          <p>
Beginners who find the sheer size of the language and library daunting should be able
to rely on the Guidelines to help make sane choices when there are many ways to do
things. Experienced C++ developers may need to leave some of their habits behind.
Developers along this spectrum could benefit from seeing what the Guidelines have
to offer, yet the guidelines themselves are just too big to absorb all at once. My
examples will be chosen to be beginner-friendly and the focus will be on what's in
it for you: faster code, less bugs, and other tangible benefits.
</p>
        </blockquote>
        <p>
I am so looking forward to seeing "my tribe" again in Bellevue this year. I'm going
on the <a href="https://cppcon.org/2017fieldtrip/">field trip</a> too! If you haven't <a href="https://cppcon.org/registration/">registered </a>yet,
get on that!
</p>
        <p>
Kate
</p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=a920f1a8-3291-49be-a64f-7cc483e7b95a" />
      </body>
      <title>My CppCon talk</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=a920f1a8-3291-49be-a64f-7cc483e7b95a</guid>
      <link>http://www.gregcons.com/KateBlog/MyCppConTalk.aspx</link>
      <pubDate>Fri, 21 Jul 2017 17:03:59 GMT</pubDate>
      <description>&lt;p&gt;
I am happy to announce that my submission to &lt;a href="https://cppcon.org/"&gt;CppCon &lt;/a&gt;has
been accepted!
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.gregcons.com/KateBlog/content/binary/weblogo.jpg" width="600" border="0"&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;b&gt;10 Core Guidelines You Need to Start Using Now&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The C++ Core Guidelines were announced at CppCon 2015, yet some developers have still
never heard of them. It's time to see what they have to offer for you, no matter how
much C++ experience you have. You don't need to read and learn the whole thing: in
this talk I am pulling out some highlights of the Guidelines to show you why you should
be using these selected guidelines. For each one I'll show some examples, and discuss
the benefit of adopting them for new code or going back into old code to make a change.
&lt;/p&gt;
&lt;p&gt;
Beginners who find the sheer size of the language and library daunting should be able
to rely on the Guidelines to help make sane choices when there are many ways to do
things. Experienced C++ developers may need to leave some of their habits behind.
Developers along this spectrum could benefit from seeing what the Guidelines have
to offer, yet the guidelines themselves are just too big to absorb all at once. My
examples will be chosen to be beginner-friendly and the focus will be on what's in
it for you: faster code, less bugs, and other tangible benefits.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I am so looking forward to seeing "my tribe" again in Bellevue this year. I'm going
on the &lt;a href="https://cppcon.org/2017fieldtrip/"&gt;field trip&lt;/a&gt; too! If you haven't &lt;a href="https://cppcon.org/registration/"&gt;registered &lt;/a&gt;yet,
get on that!
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=a920f1a8-3291-49be-a64f-7cc483e7b95a" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Speaking</category>
      <category>Travel</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=44ea286b-5d0e-4dca-b4be-e8426a4fa2f8</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=44ea286b-5d0e-4dca-b4be-e8426a4fa2f8</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've started a C++ column in Visual Studio Magazine. I'm sure you've read plenty of
C++ columns in your time - I sure have! I wanted this one to be a little different.
So, here's what I've decided to do. For each column, I choose a guidelines from the
C++ Core Guidelines, and then explain it. But the twist is that I'm not going through
the guidelines from top to bottom - I'm picking guidelines whose explanations require
a little language knowledge.
</p>
        <p>
          <a href="https://visualstudiomagazine.com/articles/2016/04/19/intro-to-cpp-core-guidelines.aspx">The
first column</a> just sets the stage and explains what I'm doing, and gives you a
link to the Guidelines. The second, <a href="https://visualstudiomagazine.com/articles/2016/04/26/dont-cast-away-const-in-cpp.aspx">Don't
Cast Away Const</a>, explains the guideline, but also the consequences of const-correctness,
a typical situation where you might find it hard to stay const-correct when you make
a performance tweak to a running system, and the correct use of the mutable keyword.
Not bad for explaining a four-word guideline!
</p>
        <p>
I have a number of columns already written and plans to write more. Please check them
out and spread the word!
</p>
        <p>
Kate
</p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=44ea286b-5d0e-4dca-b4be-e8426a4fa2f8" />
      </body>
      <title>New Column in Visual Studio Magazine</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=44ea286b-5d0e-4dca-b4be-e8426a4fa2f8</guid>
      <link>http://www.gregcons.com/KateBlog/NewColumnInVisualStudioMagazine.aspx</link>
      <pubDate>Fri, 29 Apr 2016 21:17:26 GMT</pubDate>
      <description>&lt;p&gt;
I've started a C++ column in Visual Studio Magazine. I'm sure you've read plenty of
C++ columns in your time - I sure have! I wanted this one to be a little different.
So, here's what I've decided to do. For each column, I choose a guidelines from the
C++ Core Guidelines, and then explain it. But the twist is that I'm not going through
the guidelines from top to bottom - I'm picking guidelines whose explanations require
a little language knowledge.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://visualstudiomagazine.com/articles/2016/04/19/intro-to-cpp-core-guidelines.aspx"&gt;The
first column&lt;/a&gt; just sets the stage and explains what I'm doing, and gives you a
link to the Guidelines. The second, &lt;a href="https://visualstudiomagazine.com/articles/2016/04/26/dont-cast-away-const-in-cpp.aspx"&gt;Don't
Cast Away Const&lt;/a&gt;, explains the guideline, but also the consequences of const-correctness,
a typical situation where you might find it hard to stay const-correct when you make
a performance tweak to a running system, and the correct use of the mutable keyword.
Not bad for explaining a four-word guideline!
&lt;/p&gt;
&lt;p&gt;
I have a number of columns already written and plans to write more. Please check them
out and spread the word!
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=44ea286b-5d0e-4dca-b4be-e8426a4fa2f8" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Mentoring</category>
      <category>Seen and Recommended</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=defc6bbc-c40d-4b4d-ac69-c46c14482550</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=defc6bbc-c40d-4b4d-ac69-c46c14482550</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">My latest Pluralsight course is live! It's
called <a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look">First
Look: C++ Core Guidelines and the Guideline Support Library</a> and it introduces
the guidelines and why you might want to use them, as well as some preliminary tool
support. As always, if you need a free trial, use the link in the sidebar on the right.<br /><br />
Pluralsight courses now have trailers. This is my first course with one and it turned
out a lot better than I expected. You don't need a subscription to watch the trailer
- just go to the <a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look">course
page, </a>and over on the right side there are these downward pointing triangles next
to time lengths. Click the one for Course Overview which is 1m 49s, and you'll see
one entry under it that also says Course Overview 1m 49s. 
<br /><br /><img src="http://www.gregcons.com/KateBlog/content/binary/overview.jpg" height="177" width="465" border="0" /><br /><br />
Click that and the player will open and play the trailer. I did the voice recording,
and some Pluralsight elves put together visuals (some are excerpts from demos) around
it. I like it! Let me know what you think.<br /><br />
Kate<br /><img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=defc6bbc-c40d-4b4d-ac69-c46c14482550" /></body>
      <title>Quick course (98 minutes) to get you started with the C++ Core Guidelines</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=defc6bbc-c40d-4b4d-ac69-c46c14482550</guid>
      <link>http://www.gregcons.com/KateBlog/QuickCourse98MinutesToGetYouStartedWithTheCCoreGuidelines.aspx</link>
      <pubDate>Thu, 24 Mar 2016 18:10:15 GMT</pubDate>
      <description>My latest Pluralsight course is live! It's called &lt;a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look"&gt;First
Look: C++ Core Guidelines and the Guideline Support Library&lt;/a&gt; and it introduces
the guidelines and why you might want to use them, as well as some preliminary tool
support. As always, if you need a free trial, use the link in the sidebar on the right.&lt;br&gt;
&lt;br&gt;
Pluralsight courses now have trailers. This is my first course with one and it turned
out a lot better than I expected. You don't need a subscription to watch the trailer
- just go to the &lt;a href="https://www.pluralsight.com/courses/cplusplus-core-guidelines-and-support-library-first-look"&gt;course
page, &lt;/a&gt;and over on the right side there are these downward pointing triangles next
to time lengths. Click the one for Course Overview which is 1m 49s, and you'll see
one entry under it that also says Course Overview 1m 49s. 
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.gregcons.com/KateBlog/content/binary/overview.jpg" height="177" width="465" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
Click that and the player will open and play the trailer. I did the voice recording,
and some Pluralsight elves put together visuals (some are excerpts from demos) around
it. I like it! Let me know what you think.&lt;br&gt;
&lt;br&gt;
Kate&lt;br&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=defc6bbc-c40d-4b4d-ac69-c46c14482550" /&gt;</description>
      <category>C++</category>
      <category>C++ Guidelines</category>
      <category>Mentoring</category>
      <category>Speaking</category>
      <category>Visual Studio 2015</category>
    </item>
    <item>
      <trackback:ping>http://www.gregcons.com/KateBlog/Trackback.aspx?guid=f52cd6c4-c8fd-4801-b8d1-71cb980beef6</trackback:ping>
      <pingback:server>http://www.gregcons.com/KateBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=f52cd6c4-c8fd-4801-b8d1-71cb980beef6</pingback:target>
      <dc:creator>Kate Gregory</dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The <a href="https://www.youtube.com/watch?v=1OEu9C51K2A&amp;index=1&amp;list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh">first
keynote</a> at <a href="https://www.youtube.com/playlist?list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh">CppCon </a>this
year was Bjarne Stroustrup (who invented the C++ language) announcing the <a href="https://github.com/isocpp/cppcoreguidelines">C++
Core Guidelines</a>. They are on Github and once he announced them, as Herb Sutter
reported in the <a href="https://www.youtube.com/watch?v=hEx5DNLWGgA&amp;index=2&amp;list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh">second
keynote</a> the very next day, they quickly became a trending topic across all languages.
Here is a description of the guidelines from there:
</p>
        <blockquote>
          <p>
The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much
like the C++ language itself. They are the result of many person-years of discussion
and design across a number of organizations. Their design encourages general applicability
and broad adoption but they can be freely copied and modified to meet your organization's
needs.
</p>
        </blockquote>
        <blockquote>
          <p>
The aim of the guidelines is to help people to use modern C++ effectively. By "modern
C++" we mean C++11 and C++14 (and soon C++17). In other words, what would you like
your code to look like in 5 years' time, given that you can start now? In 10 years'
time?
</p>
        </blockquote>
        <blockquote>
          <p>
The guidelines are focused on relatively higher-level issues, such as interfaces,
resource management, memory management, and concurrency. Such rules affect application
architecture and library design. Following the rules will lead to code that is statically
type safe, has no resource leaks, and catches many more programming logic errors than
is common in code today. And it will run fast - you can afford to do things right.
</p>
        </blockquote>
        <p>
To me, these guidelines are the key to getting across my fundamental message that
C++ does not have to be hard, scary, complicated, or dangerous. The language may still
say “it’s your foot!” but the guidelines, and the tools they can drive, are quite
the opposite.
</p>
        <p>
You probably know that Visual Studio has a static analyser built in. (You should,
anyway, I’ve blogged about it.) It will catch things like this:
</p>
        <p>
    int* p = nullptr;<br />
    *p = 10;   
</p>
        <p>
But it doesn’t mind things like this:
</p>
        <p>
    int arr[10];        <br />
    int* p2 = arr;
</p>
        <p>
Two lines, two violations of the guidelines – I’m not initializing any of the elements
of arr, and then I am using its address as a regular old pointer. Now, there’s nothing
wrong with regular old pointers – some people have got quite a hate on for them with
the rise of genuinely smart pointers, but pointers are fine. Using pointers to control
lifetime isn’t fine, because it’s impossibly difficult. But pointers themselves are
fine. What’s not fine here is the “decay” of an array into a pointer – folks from
other languages don’t expect that at all, and some marvelous bugs have hidden behind
this simple bit of helpfulness from the compiler. So there’s a <a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-bounds-decay">guideline </a>that
says don’t do that. Specifically:<br /><a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-bounds-decay"><img src="http://www.gregcons.com/KateBlog/content/binary/bounds3.jpg" border="0" width="700" /></a></p>
        <p>
(I’m giving you a picture of code because if you want to copy and paste you should
go to the live, always updated, guidelines on github.)
</p>
        <p>
This guideline is part of a “profile” – a particular set of rules that are designed
to be enforced and that are supported by tools. Well, when I say <i>tools </i>I might
be overstating the case a little. There’s just one tool at the moment, but that could
be enough!
</p>
        <p>
This tool, <a href="https://www.nuget.org/packages/Microsoft.CppCoreCheck/">C++ Core
Checker</a>, is on the NuGet Gallery. You don’t have to get it from there though.
You get it, and use it, from inside Visual Studio 2015. Any version will do. If you
don’t use Visual Studio normally, just get and install the Community Edition, which
is free and is ok to use for commercial purposes, from https://www.visualstudio.com/
. (Need the fine print? if you’re using it as a person, you can do whatever you like.
If you work for a company with less than 250 PCs and less than a million dollars US
in revenue, again you and up to 4 of your coworkers can use it for whatever you like.
If you work for an “enterprise” company then any and all of the employees can still
use it for learning purposes or to work on open source.) Note that Visual C++ isn’t
part of the Typical install, so you’ll need to choose Custom and select Visual C++:
</p>
        <p>
          <img src="http://www.gregcons.com/KateBlog/content/binary/custominstall.jpg" border="0" width="230" />
        </p>
        <p>
So once you have Community Edition or some edition of Visual Studio, make a console
application and put in the two bad lines of code. Build it and then also run static
analysis on it (On the Analyze menu, choose Run Code Analysis, On Solution.) You won’t
get any warnings or errors. That’s your pre-guidelines life. You’re doing something
inappropriate and nobody is telling you.
</p>
        <p>
Now, add the checker to your solution. This is solution-by-solution, not a change
to how Visual Studio does static analysis. On the Tools menu, choose NuGet Package
Manager, Package Manager Console. In the console window that appears, type <font face="Courier New">Install-Package
Microsoft.CppCoreCheck<font face="Verdana"> and press enter</font></font>. You will
see output like this:
</p>
        <p>
Attempting to gather dependencies information for package 'Microsoft.CppCoreCheck.14.0.23107.2'
with respect to project 'ConsoleApplication1', targeting 'native,Version=v0.0'<br />
Attempting to resolve dependencies for package 'Microsoft.CppCoreCheck.14.0.23107.2'
with DependencyBehavior 'Lowest'<br />
Resolving actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'<br />
Resolved actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'<br />
Adding package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio
2015\Projects\ConsoleApplication1\packages'<br />
Added package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio
2015\Projects\ConsoleApplication1\packages'<br />
Added package 'Microsoft.Gsl.0.0.1' to 'packages.config'<br />
Successfully installed 'Microsoft.Gsl 0.0.1' to ConsoleApplication1<br />
Adding package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual
studio 2015\Projects\ConsoleApplication1\packages'<br />
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual
studio 2015\Projects\ConsoleApplication1\packages'<br />
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to 'packages.config'<br />
Successfully installed 'Microsoft.CppCoreCheck 14.0.23107.2' to ConsoleApplication1<br />
PM&gt;<br /><br />
This changes your project settings so that analysis runs this Core Checker for you.
Repeat the analysis step and this time the new tool will run and you will get output
like this:<br />
------ Rebuild All started: Project: ConsoleApplication1, Configuration: Debug Win32
------<br />
  stdafx.cpp<br />
  ConsoleApplication1.cpp<br />
  ConsoleApplication1.vcxproj -&gt; c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe<br />
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(9):
warning C26494: Variable 'arr' is uninitialized. Always initialize an object. (type.5:
http://go.microsoft.com/fwlink/p/?LinkID=620421)<br />
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10):
warning C26485: Expression 'arr': No array to pointer decay. (bounds.3: http://go.microsoft.com/fwlink/p/?LinkID=620415)<br />
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
</p>
        <p>
Where it says "type.5" and there's a link, that's to the specific rule in the "type"
profile that this code breaks. And where it says "bounds.3", the same - I showed a
picture of bounds.3 up above.<br /></p>
        <p>
Isn’t that great? Come on, it’s great! The tool will add more rules as we move through
2016. I’m going to have a lot more to say about the Guidelines as well. But this is
a great place to start.Why not point it at some of your own code and see what happens?<br /></p>
        <p>
Kate
</p>
        <img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=f52cd6c4-c8fd-4801-b8d1-71cb980beef6" />
      </body>
      <title>C++ Core Guidelines and Checking Tool</title>
      <guid isPermaLink="false">http://www.gregcons.com/KateBlog/PermaLink.aspx?guid=f52cd6c4-c8fd-4801-b8d1-71cb980beef6</guid>
      <link>http://www.gregcons.com/KateBlog/CCoreGuidelinesAndCheckingTool.aspx</link>
      <pubDate>Mon, 07 Dec 2015 18:54:57 GMT</pubDate>
      <description>&lt;p&gt;
The &lt;a href="https://www.youtube.com/watch?v=1OEu9C51K2A&amp;amp;index=1&amp;amp;list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh"&gt;first
keynote&lt;/a&gt; at &lt;a href="https://www.youtube.com/playlist?list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh"&gt;CppCon &lt;/a&gt;this
year was Bjarne Stroustrup (who invented the C++ language) announcing the &lt;a href="https://github.com/isocpp/cppcoreguidelines"&gt;C++
Core Guidelines&lt;/a&gt;. They are on Github and once he announced them, as Herb Sutter
reported in the &lt;a href="https://www.youtube.com/watch?v=hEx5DNLWGgA&amp;amp;index=2&amp;amp;list=PLHTh1InhhwT75gykhs7pqcR_uSiG601oh"&gt;second
keynote&lt;/a&gt; the very next day, they quickly became a trending topic across all languages.
Here is a description of the guidelines from there:
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much
like the C++ language itself. They are the result of many person-years of discussion
and design across a number of organizations. Their design encourages general applicability
and broad adoption but they can be freely copied and modified to meet your organization's
needs.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;
The aim of the guidelines is to help people to use modern C++ effectively. By "modern
C++" we mean C++11 and C++14 (and soon C++17). In other words, what would you like
your code to look like in 5 years' time, given that you can start now? In 10 years'
time?
&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;
The guidelines are focused on relatively higher-level issues, such as interfaces,
resource management, memory management, and concurrency. Such rules affect application
architecture and library design. Following the rules will lead to code that is statically
type safe, has no resource leaks, and catches many more programming logic errors than
is common in code today. And it will run fast - you can afford to do things right.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
To me, these guidelines are the key to getting across my fundamental message that
C++ does not have to be hard, scary, complicated, or dangerous. The language may still
say “it’s your foot!” but the guidelines, and the tools they can drive, are quite
the opposite.
&lt;/p&gt;
&lt;p&gt;
You probably know that Visual Studio has a static analyser built in. (You should,
anyway, I’ve blogged about it.) It will catch things like this:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;int* p = nullptr;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;*p = 10;&amp;nbsp; &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
But it doesn’t mind things like this:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;int arr[10];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;int* p2 = arr;
&lt;/p&gt;
&lt;p&gt;
Two lines, two violations of the guidelines – I’m not initializing any of the elements
of arr, and then I am using its address as a regular old pointer. Now, there’s nothing
wrong with regular old pointers – some people have got quite a hate on for them with
the rise of genuinely smart pointers, but pointers are fine. Using pointers to control
lifetime isn’t fine, because it’s impossibly difficult. But pointers themselves are
fine. What’s not fine here is the “decay” of an array into a pointer – folks from
other languages don’t expect that at all, and some marvelous bugs have hidden behind
this simple bit of helpfulness from the compiler. So there’s a &lt;a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-bounds-decay"&gt;guideline &lt;/a&gt;that
says don’t do that. Specifically:&lt;br&gt;
&lt;a href="https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-bounds-decay"&gt;&lt;img src="http://www.gregcons.com/KateBlog/content/binary/bounds3.jpg" border="0" width="700"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
(I’m giving you a picture of code because if you want to copy and paste you should
go to the live, always updated, guidelines on github.)
&lt;/p&gt;
&lt;p&gt;
This guideline is part of a “profile” – a particular set of rules that are designed
to be enforced and that are supported by tools. Well, when I say &lt;i&gt;tools &lt;/i&gt;I might
be overstating the case a little. There’s just one tool at the moment, but that could
be enough!
&lt;/p&gt;
&lt;p&gt;
This tool, &lt;a href="https://www.nuget.org/packages/Microsoft.CppCoreCheck/"&gt;C++ Core
Checker&lt;/a&gt;, is on the NuGet Gallery. You don’t have to get it from there though.
You get it, and use it, from inside Visual Studio 2015. Any version will do. If you
don’t use Visual Studio normally, just get and install the Community Edition, which
is free and is ok to use for commercial purposes, from https://www.visualstudio.com/
. (Need the fine print? if you’re using it as a person, you can do whatever you like.
If you work for a company with less than 250 PCs and less than a million dollars US
in revenue, again you and up to 4 of your coworkers can use it for whatever you like.
If you work for an “enterprise” company then any and all of the employees can still
use it for learning purposes or to work on open source.) Note that Visual C++ isn’t
part of the Typical install, so you’ll need to choose Custom and select Visual C++:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.gregcons.com/KateBlog/content/binary/custominstall.jpg" border="0" width="230"&gt;
&lt;/p&gt;
&lt;p&gt;
So once you have Community Edition or some edition of Visual Studio, make a console
application and put in the two bad lines of code. Build it and then also run static
analysis on it (On the Analyze menu, choose Run Code Analysis, On Solution.) You won’t
get any warnings or errors. That’s your pre-guidelines life. You’re doing something
inappropriate and nobody is telling you.
&lt;/p&gt;
&lt;p&gt;
Now, add the checker to your solution. This is solution-by-solution, not a change
to how Visual Studio does static analysis. On the Tools menu, choose NuGet Package
Manager, Package Manager Console. In the console window that appears, type &lt;font face="Courier New"&gt;Install-Package
Microsoft.CppCoreCheck&lt;font face="Verdana"&gt; and press enter&lt;/font&gt;&lt;/font&gt;. You will
see output like this:
&lt;/p&gt;
&lt;p&gt;
Attempting to gather dependencies information for package 'Microsoft.CppCoreCheck.14.0.23107.2'
with respect to project 'ConsoleApplication1', targeting 'native,Version=v0.0'&lt;br&gt;
Attempting to resolve dependencies for package 'Microsoft.CppCoreCheck.14.0.23107.2'
with DependencyBehavior 'Lowest'&lt;br&gt;
Resolving actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'&lt;br&gt;
Resolved actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'&lt;br&gt;
Adding package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio
2015\Projects\ConsoleApplication1\packages'&lt;br&gt;
Added package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio
2015\Projects\ConsoleApplication1\packages'&lt;br&gt;
Added package 'Microsoft.Gsl.0.0.1' to 'packages.config'&lt;br&gt;
Successfully installed 'Microsoft.Gsl 0.0.1' to ConsoleApplication1&lt;br&gt;
Adding package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual
studio 2015\Projects\ConsoleApplication1\packages'&lt;br&gt;
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual
studio 2015\Projects\ConsoleApplication1\packages'&lt;br&gt;
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to 'packages.config'&lt;br&gt;
Successfully installed 'Microsoft.CppCoreCheck 14.0.23107.2' to ConsoleApplication1&lt;br&gt;
PM&amp;gt;&lt;br&gt;
&lt;br&gt;
This changes your project settings so that analysis runs this Core Checker for you.
Repeat the analysis step and this time the new tool will run and you will get output
like this:&lt;br&gt;
------ Rebuild All started: Project: ConsoleApplication1, Configuration: Debug Win32
------&lt;br&gt;
&amp;nbsp; stdafx.cpp&lt;br&gt;
&amp;nbsp; ConsoleApplication1.cpp&lt;br&gt;
&amp;nbsp; ConsoleApplication1.vcxproj -&amp;gt; c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe&lt;br&gt;
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(9):
warning C26494: Variable 'arr' is uninitialized. Always initialize an object. (type.5:
http://go.microsoft.com/fwlink/p/?LinkID=620421)&lt;br&gt;
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10):
warning C26485: Expression 'arr': No array to pointer decay. (bounds.3: http://go.microsoft.com/fwlink/p/?LinkID=620415)&lt;br&gt;
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
&lt;/p&gt;
&lt;p&gt;
Where it says "type.5" and there's a link, that's to the specific rule in the "type"
profile that this code breaks. And where it says "bounds.3", the same - I showed a
picture of bounds.3 up above.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Isn’t that great? Come on, it’s great! The tool will add more rules as we move through
2016. I’m going to have a lot more to say about the Guidelines as well. But this is
a great place to start.Why not point it at some of your own code and see what happens?&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Kate
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.gregcons.com/KateBlog/aggbug.ashx?id=f52cd6c4-c8fd-4801-b8d1-71cb980beef6" /&gt;</description>
      <category>C++</category>
      <category>Consulting Life</category>
      <category>Seen and Recommended</category>
      <category>Visual Studio 2015</category>
      <category>C++ Guidelines</category>
    </item>
  </channel>
</rss>