From 3ec8cfc5cce24be8e5cfb783746b518fd86a13c4 Mon Sep 17 00:00:00 2001 From: Bjarne Stroustrup Date: Sun, 28 Aug 2016 14:49:47 -0400 Subject: [PATCH] Issue 660 Note added --- CppCoreGuidelines.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index 3c8d730..847fbb7 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -2229,7 +2229,8 @@ The (in)famous factorial: return x; } -This is C++14. For C++11, use a recursive formulation of `fac()`. +This is C++14. +For C++11, use a recursive formulation of `fac()`. ##### Note @@ -2259,6 +2260,12 @@ it just guarantees that the function can be evaluated at compile time for consta This is usually a very good thing. +When given a non-constant argument, a `constexpr` function can throw. +If you consider exiting by throwing a side-effect, a `constexpr` function isn't completely pure; +if not, this is not an issue. +??? A question for the committe: can a constructor for an exception thrown by a `constexpr` function modify state? +"No" would be a nice answer that matches most practice. + ##### Note Don't try to make all functions `constexpr`. @@ -2439,6 +2446,12 @@ Pure functions are easier to reason about, sometimes easier to optimize (and eve `constexpr` functions are pure. +When given a non-constant argument, a `constexpr` function can throw. +If you consider exiting by throwing a side-effect, a `constexpr` function isn't completely pure; +if not, this is not an issue. +??? A question for the committe: can a constructor for an exception thrown by a `constexpr` function modify state? +"No" would be a nice answer that matches most practice. + ##### Enforcement Not possible.