# We are now using C++14

**URL:** <https://www.rubin.community/t/we-are-now-using-c-14/2496>\
**Category:** DM Notifications\
**Tags:** stack-install\
**Created:** [December 8, 2017, 3:25pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496 "2017-12-08T15:25:01Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![pschella](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/pschella/32/655_2.png) [@pschella](https://www.rubin.community/u/pschella)\
**Post date:** [December 8, 2017, 3:25pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/1 "2017-12-08T15:25:01Z")

</div>

As of today we are using the C++14 standard.  
Our new reference compilers are:

- GCC 6.3.1 (Linux)
- Clang 800.0.42.1 (macOS)

On CentOS (6&7) please use `devtoolset-6` to get the proper compiler.

See [https://developer.lsst.io/services/lsst-dev.html#lsst-dev-tools](https://developer.lsst.io/services/lsst-dev.html#lsst-dev-tools) for updated instructions on compiling on `lsst-dev`, and [https://developer.lsst.io/coding/cpp\_style\_guide.html#we-are-writing-c-14](https://developer.lsst.io/coding/cpp_style_guide.html#we-are-writing-c-14) for the new style rule.

---

<div class="post-metadata">

**Author:** ![FabioHernandez](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/fabiohernandez/32/82_2.png) [@FabioHernandez](https://www.rubin.community/u/FabioHernandez)\
**Post date:** [December 8, 2017, 4:08pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/2 "2017-12-08T16:08:03Z")

</div>

I guess this means that for installing the stack from source we will need GCC 6.3.1 from now on.

Does this also mean that for **using** the stack on CentOS 7 we need the runtime libraries of GCC 6.3.1 available on the execution machine?

A clarification would be welcome: the section of the documentation related to the [RedHat / CentOS system prerequisites](https://pipelines.lsst.io/install/prereqs/centos.html) does not mention any particular version of the GCC compiler, so `yum install gcc-c++` installs GCC 4.8.5.

---

<div class="post-metadata">

**Author:** ![timj](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/timj/32/10_2.png) [@timj](https://www.rubin.community/u/timj)\
**Post date:** [December 8, 2017, 4:23pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/3 "2017-12-08T16:23:08Z")

</div>

You will need a compiler that supports C++14. devtoolset-5 might work but we aren’t testing it. Base gcc for CentOS-7 definitely won’t work. We are testing with devtoolset-6 so that is the compiler we recommend for building the stack now.

@jsick should @pschella have updated the pipelines docs as well as the dev guide? Or is someone else going to fix that?

---

<div class="post-metadata">

**Author:** ![timj](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/timj/32/10_2.png) [@timj](https://www.rubin.community/u/timj)\
**Post date:** [December 8, 2017, 4:23pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/4 "2017-12-08T16:23:56Z")

</div>

P.S. This was discussed in [RFC-332](https://jira.lsstcorp.org/browse/RFC-332).

---

<div class="post-metadata">

**Author:** ![FabioHernandez](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/fabiohernandez/32/82_2.png) [@FabioHernandez](https://www.rubin.community/u/FabioHernandez)\
**Post date:** [December 8, 2017, 4:26pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/5 "2017-12-08T16:26:27Z")

</div>

> [@timj](#):
>
> We are testing with devtoolset-6 so that is the compiler we recommend for building the stack now.

Will `w_2017_49` be built using devtoolset-6?

---

<div class="post-metadata">

**Author:** ![jsick](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/jsick/32/672_2.png) [@jsick](https://www.rubin.community/u/jsick)\
**Post date:** [December 8, 2017, 4:39pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/6 "2017-12-08T16:39:50Z")

</div>

> [@timj](#):
>
> @jsick should @pschella have updated the pipelines docs as well as the dev guide? Or is someone else going to fix that?

Yes, we’ll need to update [https://pipelines.lsst.io/install/prereqs/index.html](https://pipelines.lsst.io/install/prereqs/index.html) ([https://github.com/lsst/pipelines\_lsst\_io/blob/master/install/prereqs/index.rst](https://github.com/lsst/pipelines_lsst_io/blob/master/install/prereqs/index.rst)) and more specifically, the linked pages for each platform. I’d prefer having @pschella, @timj, or @josh do the documentation update so that it’s accurate and tested. I can review.

Alternatively, if someone can pass me notes on how to configure compilers for each platform I can draft the actual documentation.

One thing to note is that [pipelines.lsst.io](http://pipelines.lsst.io) is formally tied to the `v14_0` release still, and so it needs to continue documenting the old compilers. That said, folks do use [pipelines.lsst.io](http://pipelines.lsst.io) to install newer versions of the stack. So I think the new compilers need to be documented in a conditional note.

---

<div class="post-metadata">

**Author:** ![timj](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/timj/32/10_2.png) [@timj](https://www.rubin.community/u/timj)\
**Post date:** [December 8, 2017, 4:46pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/7 "2017-12-08T16:46:10Z")

</div>

> [@jsick](#):
>
> One thing to note is that [pipelines.lsst.io](http://pipelines.lsst.io) is formally tied to the v14\_0 release still

I was wondering about that. It seems to me that pipelines needs a 14.0 install section and a “install the most recent weekly” type section that will evolve into the 15.0 install section.

---

<div class="post-metadata">

**Author:** ![jsick](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/jsick/32/672_2.png) [@jsick](https://www.rubin.community/u/jsick)\
**Post date:** [December 8, 2017, 4:56pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/8 "2017-12-08T16:56:13Z")

</div>

That could work. I need to design a way to do that find of in-place fork without duplicating content.

Perhaps at this point someone involved in the technical implementation could create a documentation ticket for me on JIRA that specifies the changes needed to the current docs and I can figure out the implementation.

This sort of issue will go away once @josh and I sit down and start building [pipelines.lsst.io](http://pipelines.lsst.io) on Jenkins so that different `/v/` editions are tied directly to the code bases’s `master` and release tags.

---

<div class="post-metadata">

**Author:** ![pschella](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/pschella/32/655_2.png) [@pschella](https://www.rubin.community/u/pschella)\
**Post date:** [December 8, 2017, 5:09pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/9 "2017-12-08T17:09:23Z")

</div>

This is why that wasn’t updated. Instead there is a note in the dev-guide saying: “But note that installation instructions for stack versions 14.0 and below refer to our older baseline compilers. These are now superseded by the minimum required compiler versions listed above.”

---

<div class="post-metadata">

**Author:** ![pschella](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/pschella/32/655_2.png) [@pschella](https://www.rubin.community/u/pschella)\
**Post date:** [December 8, 2017, 5:10pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/10 "2017-12-08T17:10:39Z")

</div>

It would be good if we had versioned installation instructions indeed.

---

<div class="post-metadata">

**Author:** ![parejkoj](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/parejkoj/32/138_2.png) [@parejkoj](https://www.rubin.community/u/parejkoj)\
**Post date:** [December 8, 2017, 6:38pm UTC](https://www.rubin.community/t/we-are-now-using-c-14/2496/11 "2017-12-08T18:38:37Z")

</div>

Woo-hoo! `std::make_unique()` here I come!
