<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Bryan St. Amour's Blog</title>
 <link href="http://bryanstamour.com/feed/" rel="self"/>
 <link href="http://bryanstamour.com/"/>
 <updated>2012-05-17T22:18:50-04:00</updated>
 <id>http://bryanstamour.com</id>
 <author>
   <name>Bryan St. Amour</name>
   <email>bryan.stamour@gmail.com</email>
 </author>

 
 <entry>
   <title>Coffee Drinkers Have Lower Risk of Death</title>
   <link href="http://bryanstamour.com/2012/05/17/coffee-drinkers-have-lower-risk-of-death.html"/>
   <updated>2012-05-17T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/17/coffee-drinkers-have-lower-risk-of-death</id>
   <content type="html">&lt;p&gt;I found this article over at &lt;a href='http://science.slashdot.org/story/12/05/17/1625203/nih-study-finds-that-coffee-drinkers-have-lower-risk-of-death'&gt;Slashdot&lt;/a&gt;: it seems a NIH study has found that coffee drinkers have a lower risk of death! Sweet! With the amount of coffee I injest in a day, I&amp;#8217;m probably immortal by now!&lt;/p&gt;

&lt;p&gt;The full article can be read &lt;a href='http://www.nih.gov/news/health/may2012/nci-16.htm'&gt;here&lt;/a&gt;, (NIH) but the actual published paper is behind a paywall (the New England Journal of Medicine.)&lt;/p&gt;

&lt;p&gt;From the NIH:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Coffee drinkers were less likely to die from heart disease, respiratory disease, stroke, injuries and accidents, diabetes, and infections, although the association was not seen for cancer. These results from a large study of older adults were observed after adjustment for the effects of other risk factors on mortality, such as smoking and alcohol consumption. Researchers caution, however, that they can&amp;#8217;t be sure whether these associations mean that drinking coffee actually makes people live longer. The results of the study were published in the May 17, 2012 edition of the New England Journal of Medicine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So it seems like I&amp;#8217;m good up to cancer. And also:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The researchers found that the association between coffee and reduction in risk of death increased with the amount of coffee consumed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jackpot! Long live the brew.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Timing Functions with Chrono</title>
   <link href="http://bryanstamour.com/2012/05/13/timing-functions-with-chrono.html"/>
   <updated>2012-05-13T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/13/timing-functions-with-chrono</id>
   <content type="html">&lt;p&gt;I use IBM&amp;#8217;s Cplex Linear Optimizer a lot for the work I do, and though it has great built-in facilities to track how much time is spent solving a linear (or integer) program, sometimes I need to compare the runtimes of Cplex vs. some hand-rolled heuristics written in plain C++. In these cases I&amp;#8217;m glad that C++11 brought the chrono library over from boost. Chrono gives me access to lots of great tools for tracking durations, and in this blog post I will share with you some code I wrote to track the length of time an arbitrary function takes to run using chrono!&lt;/p&gt;

&lt;p&gt;Chrono has three clocks available for use in your code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// the wall clock from your system.
std::chrono::system_clock

// a monotonic clock.
std::chrono::steady_clock

// the clock with the shortest tick period on the system.
std::chrono::high_resolution_clock&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There are plenty of features for the clocks, but for the sake of timing functions we really need only two things: a point in time, and a duration. To access the current time point from a clock, we call the static member function &lt;code&gt;now()&lt;/code&gt;. For example, if we wanted to get the current time from the system clock, we would use the following code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// The resulting type is something like
// std::chrono::system_clock::time_point,
// which is itself a type alias to
// std::chrono::time_point&amp;lt;
//   std::chrono::system_clock
// &amp;gt;, so you see why we use &amp;#39;auto&amp;#39; here.
auto current_time = std::chrono::system_clock::now();&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Time points have the binary minus operator overload defined, and the result of the operation is a duration of time. So if you want to track how long a block of code takes to run, you can do the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;auto start_time = std::chrono::system_clock::now();

//
// ... code here.
//

// Actual type:
// std::chrono::duration&amp;lt;
//   std::chrono::system_clock::rep
// &amp;gt;
auto time_taken =
  start_time - std::chrono::system_clock::now();&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;God bless the &lt;code&gt;auto&lt;/code&gt; keyword :-)&lt;/p&gt;

&lt;p&gt;And now combining that together with tuples, we create a generic function to measure the run time of other functions using the clock of the user&amp;#8217;s choice:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;template &amp;lt;typename Clock, typename Func&amp;gt;
inline auto time_function(Func&amp;amp;&amp;amp; f)
  -&amp;gt; typename std::enable_if&amp;lt;
       !is_void&amp;lt;decltype(f())&amp;gt;::value,
       std::tuple&amp;lt;
         decltype(f()),
         typename Clock::duration
       &amp;gt;
     &amp;gt;::type
{
    auto start_time = Clock::now();
    auto result = f();
    auto time_taken = start_time - Clock::now();
    return std::make_tuple(result, time_taken);
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The reason for using &lt;code&gt;enable_if&lt;/code&gt; is that when we&amp;#8217;re given a function that returns void, we don&amp;#8217;t worry about wrapping up the result in a tuple because there&amp;#8217;s no result to wrap! We&amp;#8217;ll write another definition of &lt;code&gt;time_function&lt;/code&gt; to work with void functions, and the &lt;code&gt;enable_if&lt;/code&gt; will guarantee that when it comes time to pick which version of the function to call, only one definition will be legal (recall that C++ functions cal only be overloaded based on the types and number of parameters, NOT the return type - without &lt;code&gt;enable_if&lt;/code&gt; my code would violate the one definition rule.) The void version is as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;template &amp;lt;typename Clock, typename Func&amp;gt;
inline auto time_function(Func&amp;amp;&amp;amp; f)
  -&amp;gt; typename std::enable_if&amp;lt;
       is_void&amp;lt;decltype(f())&amp;gt;::value,
       typename Clock::duration
     &amp;gt;::type
{
    auto start_time = Clock::now();
    f();
    auto time_taken = start_time - Clock::now();
    return time_taken;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now we can use the code like the following to track how long IBM&amp;#8217;s Cplex takes to solve a problem.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;IloCplex instance;

// ... more code here

using clock_type = std::high_resolution_clock;
auto time_taken_1 =
  time_function&amp;lt;clock_type&amp;gt;([&amp;amp;] { instance.solve(); });&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And for instance if I have some code to solve the same problem using native C++, I can access both the result and the time taken:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;double result;
clock_type::duration time_taken_2;
// std::tie makes a tuple of references.
// Assume compute_result is a function defined elsewhere to
// return a double.
std::tie(result, time_taken_2) =
  time_function&amp;lt;clock_type&amp;gt;(compute_result);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, std::chrono makes timing code exection easy as 1 2 3. I use it at work a lot where I need to measure the times taken to solve large problems, and it&amp;#8217;s useful to have such a powerful library built right in to the C++ SL, so I don&amp;#8217;t have to reach for boost. Using the same timing functions for both Cplex and my own code also rules out the possibility that they are implemented differently - while Cplex may use the system time, I may want to use something else. Chrono removes that kind of doubt and lets me use the same clock for all timing tasks :-)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Billiards</title>
   <link href="http://bryanstamour.com/2012/05/13/billiards.html"/>
   <updated>2012-05-13T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/13/billiards</id>
   <content type="html">&lt;p&gt;I&amp;#8217;ve come to the conclusion that I need to play more pool. I&amp;#8217;ve always enjoyed it and there&amp;#8217;s no reason for my game to be this rusty: tonight my angle shots were all over the map. I just read up on a technique that may help out my game involving envisioning a phantom ball in front of the one I want to hit and aiming directly for it. Hey, at this point anything can help my game.&lt;/p&gt;

&lt;p&gt;So, sort of like my &amp;#8220;one with the frisbee&amp;#8221; experiment I tried a few years ago (a topic for another blog post) I think it&amp;#8217;s time for me to get good at pool.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Apache Domain Redirects</title>
   <link href="http://bryanstamour.com/2012/05/12/apache-domain-redirects.html"/>
   <updated>2012-05-12T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/12/apache-domain-redirects</id>
   <content type="html">&lt;p&gt;I tried the whole .ca thing for a bit, but I missed my old bryanstamour.com domain. That thing was with me for years and years, and it just felt weird not using it for my blog. So I got it back! However recently I&amp;#8217;ve been doing some C++ blogging and have been getting some small Reddit traffic, so I didn&amp;#8217;t want those links to suddenly turn dead. What I set up was an apache redirect that takes any visitor to bstamour.ca and magically whisks them to bryanstamour.com instead.&lt;/p&gt;

&lt;p&gt;Since I host several domains on my server, I placed the following snippet inside the virtual host block for the bstamour.ca domain:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Redirect permanent / http://bryanstamour.com/&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That trailing slash at the end of bryanstamour.com is very important! Without it, visiting bstamour.ca/about/ would take you to the non-existant domain bryanstamour.comabout&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Express your ownership</title>
   <link href="http://bryanstamour.com/2012/05/11/express-your-ownership.html"/>
   <updated>2012-05-11T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/11/express-your-ownership</id>
   <content type="html">&lt;p&gt;With the new C++11 standard out in the wild, I really hope that programming shops will start using the new features sooner rather than later. Some of these features were added for efficiency, such as move semantics, but other features allow you to better express your &lt;em&gt;intent&lt;/em&gt;. One such addition to C++ are the new smart pointers: they allow you to directly express who owns your objects (who gets to clean your objects up.)&lt;/p&gt;

&lt;h3 id='smart_pointers_use_them'&gt;Smart pointers: use them&lt;/h3&gt;

&lt;p&gt;C++11 introduces two new smart pointers for you to utilize: &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; and &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt;. There also exists &lt;code&gt;weak_ptr&lt;/code&gt; in the standard now, but it doesn&amp;#8217;t really convey any meaning, it just exists to break dependency cycles, and so I won&amp;#8217;t be talking about it today. As you probably already know, &lt;code&gt;shared_ptr&amp;lt;T&amp;gt;&lt;/code&gt; is a reference-counted pointer to an object of type &lt;code&gt;T&lt;/code&gt;, and &lt;code&gt;unique_ptr&amp;lt;T&amp;gt;&lt;/code&gt; is a pointer to type &lt;code&gt;T&lt;/code&gt; that is move-only, in other words there can be only one owner of the pointer.&lt;/p&gt;

&lt;p&gt;Aside from the benefit of not having to manually delete your pointers, another reason why you should use these constructs is that they tell you, the programmer, tons more about the pointer. When you see a &lt;code&gt;shared_ptr&lt;/code&gt; you know that at any given time there can be many different objects that have access to the underlying data, but it&amp;#8217;s okay. When you see a &lt;code&gt;unique_ptr&lt;/code&gt; lying around you know that if you have access to it you &lt;em&gt;own&lt;/em&gt; it, as nobody else can see it unless you give it away. When you see a raw pointer, you know nothing about it at all, except that it&amp;#8217;s a pointer. Are you responsible for deleting this raw pointer? Or does it belong to some other object?&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s an example of what I mean by &lt;em&gt;owning&lt;/em&gt; a pointer:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;struct tree_node
{
    unique_ptr&amp;lt;tree_node&amp;gt; left_child;
    unique_ptr&amp;lt;tree_node&amp;gt; right_child;
    int payload;
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Every &lt;code&gt;tree_node&lt;/code&gt; has two children. It &lt;strong&gt;owns&lt;/strong&gt; those children, and thus it is responsible for cleaning them up when the rapture comes. If I were to show this code to another C++ developer, he or she would immediately know that a &lt;code&gt;tree_node&lt;/code&gt; owns its kids and will make sure they&amp;#8217;re deleted. Contrast this with a &lt;code&gt;tree_node&lt;/code&gt; that uses raw pointers instead: do I really own the child nodes? Probably, but I can&amp;#8217;t be certain. With &lt;code&gt;unique_ptr&lt;/code&gt; that ownership is a guarantee, not just a hunch. Similarily if I need to share something between several possible owners, using &lt;code&gt;shared_ptr&lt;/code&gt; expresses this, instead of having the programmer guess if that raw pointer is a one-off or if it is shared all over the place.&lt;/p&gt;

&lt;p&gt;Now what if I don&amp;#8217;t own the pointer at all, but still need it? For example, what if we added a pointer to the parent inside each &lt;code&gt;tree_node&lt;/code&gt; for quick traversal? I don&amp;#8217;t want a &lt;code&gt;shared_ptr&lt;/code&gt; because I&amp;#8217;m not sharing my parent, and I don&amp;#8217;t want to be responsible to clean it up. I don&amp;#8217;t want a &lt;code&gt;unique_ptr&lt;/code&gt; either because I don&amp;#8217;t &lt;em&gt;own&lt;/em&gt; my parent. So? Raw pointer!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;struct tree_node
{
    // ... same as above.
    tree_node* parent;
};&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It expresses that yes I need to keep a pointer to something, yet I&amp;#8217;m not in any way responsible for cleaning that pointer up - I&amp;#8217;m looking at it, but I don&amp;#8217;t own it. If you restrict your use of raw pointers for these instances, then between &lt;code&gt;shared_ptr&lt;/code&gt;, &lt;code&gt;unique_ptr&lt;/code&gt;, and raw pointers, the next programmer who has to look at your code will know immediately the ownership semantics of your objects.&lt;/p&gt;

&lt;p&gt;To summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you actually own the object, and you are the only owner, use &lt;code&gt;unique_ptr&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;If you plan to share the object, &lt;del&gt;or the object has to outlive
the current scope (e.g. you want to return it from a function)&lt;/del&gt; use &lt;code&gt;shared_ptr&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;If you are just looking at the object, use a raw pointer.&lt;/li&gt;
&lt;/ul&gt;</content>
 </entry>
 
 <entry>
   <title>New Blog</title>
   <link href="http://bryanstamour.com/2012/05/10/new-blog.html"/>
   <updated>2012-05-10T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/05/10/new-blog</id>
   <content type="html">&lt;p&gt;I decided to start a new blog, this time using Jekyll instead of Wordpress. Jekyll isn&amp;#8217;t really a blog engine per se, it&amp;#8217;s just a simple ruby script that generates static pages from markdown files. I kind of like how simple it is, plus I can now edit my blog posts in emacs, the best editor in the universe, because they&amp;#8217;re all plain text. No more having to run mysql on my server either.&lt;/p&gt;

&lt;p&gt;So what can you expect from this blog in the future? Well honestly about the same kinds of content as before: a mixture of personal ramblings and technical posts for my fellow programmer geeks. Nothing&amp;#8217;s changed, really :-) Oh, but you won&amp;#8217;t be able to comment on posts until I get disqus set up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; Disqus is now working, comment away!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>(Almost) functional programming tips for C++</title>
   <link href="http://bryanstamour.com/2012/04/28/almost-functional-programming-tips-for-c.html"/>
   <updated>2012-04-28T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2012/04/28/almost-functional-programming-tips-for-c</id>
   <content type="html">&lt;p&gt;There&amp;#8217;s been a bit of interest on reddit recently about functional programming in C++, and since I haven&amp;#8217;t blogged in a while, I thought I&amp;#8217;d toss in my two cents. This post isn&amp;#8217;t a detailed novel of functional programming style in C++: it won&amp;#8217;t tell you how to implement graph reduction nor will it proclaim that every function should be a pure constexpr function. What this post will be is a small set of tips that will let you write safer more expressive code today (or tomorrow.)&lt;/p&gt;

&lt;h3 id='use_const_everywhere'&gt;Use const everywhere&lt;/h3&gt;

&lt;p&gt;All of your variables should be declared const unless you really need to modify them. Modern C++ compilers can perform some really aggressive optimizations to variables that they know will not be modified. I won&amp;#8217;t go into the argument of physical const vs. logical const here, that&amp;#8217;s a subject for another blog post.&lt;/p&gt;

&lt;h3 id='prefer_to_use_small_functions_that_do_one_thing_well'&gt;Prefer to use small functions that do one thing well&lt;/h3&gt;

&lt;p&gt;This is a pretty obvious point, but I&amp;#8217;ll go over it anyways. In programming in any language, you should always say what you mean and mean what you say. If your function is called euclidian_distance, it had better compute the euclidian distance of a range and nothing more! If it did something more than that then it shouldn&amp;#8217;t be called euclidian_distance. Do one thing and one thing only in your functions, and give them good names, there should be no surprise &amp;#8220;whoops, the distance function wrote some crap to a file&amp;#8221; scenarios.&lt;/p&gt;

&lt;h3 id='avoid_global_variables_like_the_plague_unless_you_really_need_them'&gt;Avoid global variables like the plague (unless you really need them)&lt;/h3&gt;

&lt;p&gt;This sort of goes hand-in-hand with the point above. Your functions will be so much easier to reason about if they only rely on the parameters passed in, not global variables. Why? Because you can verify that your function is correct by only making assumptions on the input parameters, instead of assumptions on the whole world.&lt;/p&gt;

&lt;h3 id='prefer_stl_algorithms_over_handrolled_loops'&gt;Prefer STL algorithms over hand-rolled loops&lt;/h3&gt;

&lt;p&gt;Sometimes a for or a while loop is just what the doctor ordered, but in most cases you should prefer to use std::for_each, std::transform, or std::accumulate to perform your looping operation. Why? These higher-order functions have well-defined meanings, and they convey much more information about what your code is doing than a hand-rolled loop. When you see a for loop in somebody&amp;#8217;s code, you need to pay attention to the stopping-condition, the upkeep, and the initialization to ensure that you fully understand what is going on. Also the loop body: are there any breaks or continues? With for_each, you know that whatever operation is supplied it is guaranteed to touch every element in the range once and only once, and you know in which order! No hunting for breaks or continues is required, you can understand how the loop behaves just by knowing for_each. Similar arguments hold for transform, and accumulate: they&amp;#8217;re well-defined actions. Now if your loop doesn&amp;#8217;t fall into something that can be represented by for_each, transform, or accumulate, then by all means use the loop that does the job! But prefer using them over your own loops when you can.&lt;/p&gt;

&lt;h3 id='conclusion'&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Some may argue that nothing that I brought forth is &amp;#8220;functional&amp;#8221; programming, but some of the benefits of functional programming, I think, are at least being shown. In functional programming everything is represented by mathematical functions and their compositions. Not every function in C++ can be a one-line return statement, but we can at least take some of the benefits of representing everything as small well-defined functions. Furthermore if we utilize some of the higher-order functions in the STL such as for_each, transform, and accumulate; and use const where we can to avoid accidental mutations, we can go a long way toward writing safer, more understandable code. One of these days I&amp;#8217;ll have to put together a more detailed blog post about real functional programming in C++, but this should at least help some people begin to think a little bit more functionally in their day jobs without rewriting their code bases in ML.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Building GCC 4.6.1 on Mac OS X Lion</title>
   <link href="http://bryanstamour.com/2011/07/25/building-gcc-4-6-1-on-mac-os-x-lion.html"/>
   <updated>2011-07-25T00:00:00-04:00</updated>
   <id>http://bstamour.ca/2011/07/25/building-gcc-4-6-1-on-mac-os-x-lion</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; It seems more recent versions of gcc will build without issue using the default compilers that ship with XCode. Building a snapshot of gcc 4.7 works without setting any environment variables.&lt;/p&gt;

&lt;p&gt;I installed OS X 10.7 Lion a few days ago on my laptop and tried to compile GCC 4.6.1 from source, and I kept running into errors with the compiler that ships with XCode. It turns out that gcc, g++, etc are all symbolic links to the llvm compilers, but gcc-4.2 is still there in /usr/bin, so I wasn&amp;#8217;t completely left high and dry. Here are the steps I followed to build GCC 4.6.1:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get and install the prerequisite libraries: GCC 4.6.1 relies on three libraries (and a few more if you want to enable certain kinds of code optimizations). They are: &lt;a href='http://gmplib.org/'&gt;GMP&lt;/a&gt;, &lt;a href='http://www.mpfr.org/'&gt;MPFR&lt;/a&gt;, and &lt;a href='http://www.multiprecision.org/index.php?prog=mpc&amp;amp;page=platforms'&gt;MPC&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Get the &lt;a href='http://gcc.gnu.org/mirrors.html'&gt;GCC source&lt;/a&gt; and untar it on your system.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Before running the configure script, set your environment variables to use gcc-4.2, not clang:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; $ export CC=/usr/bin/gcc-4.2
 $ export CXX=/usr/bin/g++-4.2
 $ export CPP=/usr/bin/cpp-4.2
 $ export LD=/usr/bin/ld&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Configure, make, and make install just like normal.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make sure you read the &lt;a href='http://gcc.gnu.org/install/'&gt;documentation for building GCC&lt;/a&gt; for when it comes to configuring your build - there are a ton of options!&lt;/p&gt;

&lt;p&gt;If all goes well, you should have a working version of GCC 4.6.1 on your system. Now it&amp;#8217;s time to compile some C++11 code! (I hear they support &lt;em&gt;constexpr&lt;/em&gt; now ;))&lt;/p&gt;</content>
 </entry>
 

</feed>
