1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 3<title>Result returning constructors - Boost.Outcome documentation</title> 4<link rel="stylesheet" href="../../css/boost.css" type="text/css"> 5<meta name="generator" content="Hugo 0.52 with Boostdoc theme"> 6<meta name="viewport" content="width=device-width,initial-scale=1.0"/> 7 8<link rel="icon" href="../../images/favicon.ico" type="image/ico"/> 9<body><div class="spirit-nav"> 10<a accesskey="p" href="../../tutorial/advanced/payload/copy_file3.html"><img src="../../images/prev.png" alt="Prev"></a> 11 <a accesskey="u" href="../../tutorial/advanced.html"><img src="../../images/up.png" alt="Up"></a> 12 <a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="../../tutorial/advanced/constructors/two-phase-init.html"><img src="../../images/next.png" alt="Next"></a></div><div id="content"> 13 14 <div class="titlepage"><div><div><h1 style="clear: both">Result returning constructors</h1></div></div></div> 15<p>An oft-asked question during conference talks on Expected/Outcome is how to 16exclusively use <code>result</code> to implement constructor failure. This is asked because 17whilst almost every member function in a class can return a <code>result</code>, constructors 18do not return values and thus cannot return a <code>result</code>. The implication is 19that one cannot avoid throwing C++ exceptions to abort a construction.</p> 20 21<p>As with most things in C++, one can achieve zero-exception-throw object 22construction using a lot of 23extra typing of boilerplate, and a little bit of simple C++ metaprogramming. This section 24shows you how to implement these for those who are absolutely adverse to ever throwing an exception, 25or cannot because C++ exceptions have been globally disabled.</p> 26 27<p>The technique described here is not suitable for non-copyable and non-movable 28types. There is also an assumption that moving your type is cheap.</p> 29 30 31 32 </div><p><small>Last revised: June 24, 2019 at 21:48:18 +0100</small></p> 33<hr> 34<div class="spirit-nav"> 35<a accesskey="p" href="../../tutorial/advanced/payload/copy_file3.html"><img src="../../images/prev.png" alt="Prev"></a> 36 <a accesskey="u" href="../../tutorial/advanced.html"><img src="../../images/up.png" alt="Up"></a> 37 <a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="../../tutorial/advanced/constructors/two-phase-init.html"><img src="../../images/next.png" alt="Next"></a></div></body> 38</html> 39