Micro template library A library for building device drivers
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

724 lignes
3.1 MiB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <meta name="generator" content="Doxygen 1.8.14"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>uTL: test/eclipse-cygwin/lib/gtest/gtest.h Source File</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <link href="navtree.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="resize.js"></script>
  14. <script type="text/javascript" src="navtreedata.js"></script>
  15. <script type="text/javascript" src="navtree.js"></script>
  16. <script type="text/javascript">
  17. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  18. $(document).ready(initResizable);
  19. /* @license-end */</script>
  20. <link href="search/search.css" rel="stylesheet" type="text/css"/>
  21. <script type="text/javascript" src="search/searchdata.js"></script>
  22. <script type="text/javascript" src="search/search.js"></script>
  23. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  24. </head>
  25. <body>
  26. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  27. <div id="titlearea">
  28. <table cellspacing="0" cellpadding="0">
  29. <tbody>
  30. <tr style="height: 56px;">
  31. <td id="projectalign" style="padding-left: 0.5em;">
  32. <div id="projectname">uTL
  33. </div>
  34. <div id="projectbrief">micro Template library</div>
  35. </td>
  36. </tr>
  37. </tbody>
  38. </table>
  39. </div>
  40. <!-- end header part -->
  41. <!-- Generated by Doxygen 1.8.14 -->
  42. <script type="text/javascript">
  43. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  44. var searchBox = new SearchBox("searchBox", "search",false,'Search');
  45. /* @license-end */
  46. </script>
  47. <script type="text/javascript" src="menudata.js"></script>
  48. <script type="text/javascript" src="menu.js"></script>
  49. <script type="text/javascript">
  50. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  51. $(function() {
  52. initMenu('',true,false,'search.php','Search');
  53. $(document).ready(function() { init_search(); });
  54. });
  55. /* @license-end */</script>
  56. <div id="main-nav"></div>
  57. </div><!-- top -->
  58. <div id="side-nav" class="ui-resizable side-nav-resizable">
  59. <div id="nav-tree">
  60. <div id="nav-tree-contents">
  61. <div id="nav-sync" class="sync"></div>
  62. </div>
  63. </div>
  64. <div id="splitbar" style="-moz-user-select:none;"
  65. class="ui-resizable-handle">
  66. </div>
  67. </div>
  68. <script type="text/javascript">
  69. /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  70. $(document).ready(function(){initNavTree('gtest_8h_source.html','');});
  71. /* @license-end */
  72. </script>
  73. <div id="doc-content">
  74. <!-- window showing the filter options -->
  75. <div id="MSearchSelectWindow"
  76. onmouseover="return searchBox.OnSearchSelectShow()"
  77. onmouseout="return searchBox.OnSearchSelectHide()"
  78. onkeydown="return searchBox.OnSearchSelectKey(event)">
  79. </div>
  80. <!-- iframe showing the search results (closed by default) -->
  81. <div id="MSearchResultsWindow">
  82. <iframe src="javascript:void(0)" frameborder="0"
  83. name="MSearchResults" id="MSearchResults">
  84. </iframe>
  85. </div>
  86. <div class="header">
  87. <div class="headertitle">
  88. <div class="title">gtest.h</div> </div>
  89. </div><!--header-->
  90. <div class="contents">
  91. <a href="gtest_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// This header file defines the public API for Google Test. It should be</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">// included by any test program that uses Google Test.</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">// IMPORTANT NOTE: Due to limitation of the C++ language, we have to</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// leave some internal implementation details in this header file.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// They are clearly marked by comments like this:</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">// Such code is NOT meant to be used by a user directly, and is subject</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// program!</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// Acknowledgment: Google Test borrowed the idea of automatic test</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">// registration from Barthelemy Dagenais&#39; (barthelemy@prologique.com)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">// easyUnit framework.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_H_</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_H_</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">// This header file declares functions and macros used internally by</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">// Google Test. They are subject to change without notice.</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_</span></div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="gtest_8h.html#a508d33581439542ea940eacbf306ad2a"> 97</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment">// Low-level types and utilities for porting Google Test to various</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">// platforms. All macros ending with _ and symbols defined in an</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment">// internal namespace are subject to change without notice. Code</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment">// outside Google Test MUST NOT USE THEM DIRECTLY. Macros that don&#39;t</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">// end with _ are part of Google Test&#39;s public API and can be used by</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment">// code outside Google Test.</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">// This file is fundamental to Google Test. All other Google Test source</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">// files are expected to #include this. Therefore, it cannot #include</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment">// any other Google Test header.</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_</span></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6d13def13619ff1647c90e3354a65732"> 142</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment">// Environment-describing macros</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">// -----------------------------</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// Google Test can be used in many different environments. Macros in</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment">// this section tell Google Test what kind of environment it is being</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">// used in, such that Google Test can provide environment-specific</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment">// features and implementations.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">// Google Test tries to automatically detect the properties of its</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment">// environment, so users usually don&#39;t need to worry about these</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment">// macros. However, the automatic detection is not perfect.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">// Sometimes it&#39;s necessary for a user to define some of the following</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment">// macros in the build script to override Google Test&#39;s decisions.</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment">// If the user doesn&#39;t define a macro in the list, Google Test will</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">// provide a default definition. After this header is #included, all</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">// macros in this list will be defined to either 1 or 0.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">// Notes to maintainers:</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">// - Each macro here is a user-tweakable knob; do not grow the list</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">// lightly.</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">// - Use #if to key off these macros. Don&#39;t use #ifdef or &quot;#if</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">// defined(...)&quot;, which will not work as these macros are ALWAYS</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment">// defined.</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment">// GTEST_HAS_CLONE - Define it to 1/0 to indicate that clone(2)</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">// is/isn&#39;t available.</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// GTEST_HAS_EXCEPTIONS - Define it to 1/0 to indicate that exceptions</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">// are enabled.</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment">// GTEST_HAS_GLOBAL_STRING - Define it to 1/0 to indicate that ::string</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment">// is/isn&#39;t available</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">// GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::wstring</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">// is/isn&#39;t available</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment">// GTEST_HAS_POSIX_RE - Define it to 1/0 to indicate that POSIX regular</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">// expressions are/aren&#39;t available.</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment">// GTEST_HAS_PTHREAD - Define it to 1/0 to indicate that &lt;pthread.h&gt;</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">// is/isn&#39;t available.</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">// GTEST_HAS_RTTI - Define it to 1/0 to indicate that RTTI is/isn&#39;t</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment">// enabled.</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment">// GTEST_HAS_STD_WSTRING - Define it to 1/0 to indicate that</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">// std::wstring does/doesn&#39;t work (Google Test can</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">// be used where std::wstring is unavailable).</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment">// GTEST_HAS_SEH - Define it to 1/0 to indicate whether the</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment">// compiler supports Microsoft&#39;s &quot;Structured</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment">// Exception Handling&quot;.</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment">// GTEST_HAS_STREAM_REDIRECTION</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment">// - Define it to 1/0 to indicate whether the</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">// platform supports I/O stream redirection using</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">// dup() and dup2().</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">// GTEST_LINKED_AS_SHARED_LIBRARY</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment">// - Define to 1 when compiling tests that use</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment">// Google Test as a shared library (known as</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment">// DLL on Windows).</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">// GTEST_CREATE_SHARED_LIBRARY</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment">// - Define to 1 when compiling Google Test itself</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">// as a shared library.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment">// GTEST_DEFAULT_DEATH_TEST_STYLE</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment">// - The default value of --gtest_death_test_style.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">// The legacy default has been &quot;fast&quot; in the open</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment">// source version since 2008. The recommended value</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment">// is &quot;threadsafe&quot;, and can be set in</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment">// custom/gtest-port.h.</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment">// Platform-indicating macros</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment">// --------------------------</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">// Macros indicating the platform on which Google Test is being used</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment">// (a macro is defined to 1 if compiled on the given platform;</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment">// otherwise UNDEFINED -- it&#39;s never defined to 0.). Google Test</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">// defines these macros automatically. Code outside Google Test MUST</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment">// NOT define them.</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">// GTEST_OS_AIX - IBM AIX</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">// GTEST_OS_CYGWIN - Cygwin</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// GTEST_OS_FREEBSD - FreeBSD</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">// GTEST_OS_FUCHSIA - Fuchsia</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment">// GTEST_OS_HPUX - HP-UX</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment">// GTEST_OS_LINUX - Linux</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">// GTEST_OS_LINUX_ANDROID - Google Android</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">// GTEST_OS_MAC - Mac OS X</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">// GTEST_OS_IOS - iOS</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">// GTEST_OS_NACL - Google Native Client (NaCl)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment">// GTEST_OS_NETBSD - NetBSD</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">// GTEST_OS_OPENBSD - OpenBSD</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">// GTEST_OS_OS2 - OS/2</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">// GTEST_OS_QNX - QNX</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">// GTEST_OS_SOLARIS - Sun Solaris</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">// GTEST_OS_WINDOWS - Windows (Desktop, MinGW, or Mobile)</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment">// GTEST_OS_WINDOWS_DESKTOP - Windows Desktop</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">// GTEST_OS_WINDOWS_MINGW - MinGW</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// GTEST_OS_WINDOWS_MOBILE - Windows Mobile</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment">// GTEST_OS_WINDOWS_PHONE - Windows Phone</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment">// GTEST_OS_WINDOWS_RT - Windows Store App/WinRT</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">// GTEST_OS_ZOS - z/OS</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment">// most stable support. Since core members of the Google Test project</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment">// don&#39;t have access to other platforms, support for them may be less</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment">// stable. If you notice any problems on your platform, please notify</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment">// googletestframework@googlegroups.com (patches for fixing them are</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment">// even more welcome!).</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="comment">// It is possible that none of the GTEST_OS_* macros are defined.</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment">// Feature-indicating macros</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="comment">// -------------------------</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment">// Macros indicating which Google Test features are available (a macro</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment">// is defined to 1 if the corresponding feature is supported;</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">// otherwise UNDEFINED -- it&#39;s never defined to 0.). Google Test</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment">// defines these macros automatically. Code outside Google Test MUST</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment">// NOT define them.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment">// These macros are public so that portable tests can be written.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment">// Such tests typically surround code using a feature with an #if</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment">// which controls that code. For example:</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment">// #if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment">// EXPECT_DEATH(DoSomethingDeadly());</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment">// #endif</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment">// GTEST_HAS_DEATH_TEST - death tests</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment">// GTEST_HAS_TYPED_TEST - typed tests</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment">// GTEST_HAS_TYPED_TEST_P - type-parameterized tests</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment">// GTEST_IS_THREADSAFE - Google Test is thread-safe.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment">// GOOGLETEST_CM0007 DO NOT DELETE</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment">// GTEST_USES_POSIX_RE - enhanced POSIX regex is used. Do not confuse with</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment">// GTEST_HAS_POSIX_RE (see above) which users can</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment">// define themselves.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment">// GTEST_USES_SIMPLE_RE - our own simple regex is used;</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment">// the above RE\b(s) are mutually exclusive.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment">// Misc public macros</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment">// ------------------</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment">// GTEST_FLAG(flag_name) - references the variable corresponding to</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment">// the given Google Test flag.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment">// Internal utilities</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment">// ------------------</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment">// The following macros and utilities are for Google Test&#39;s INTERNAL</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment">// use only. Code outside Google Test MUST NOT USE THEM DIRECTLY.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment">// Macros for basic C++ coding:</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment">// GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment">// GTEST_ATTRIBUTE_UNUSED_ - declares that a class&#39; instances or a</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment">// variable don&#39;t have to be used.</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">// GTEST_DISALLOW_ASSIGN_ - disables operator=.</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment">// GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment">// GTEST_MUST_USE_RESULT_ - declares that a function&#39;s result must be used.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">// GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment">// suppressed (constant conditional).</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment">// GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment">// is suppressed.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment">// Synchronization:</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment">// Mutex, MutexLock, ThreadLocal, GetThreadCount()</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">// - synchronization primitives.</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment">// Template meta programming:</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment">// IteratorTraits - partial implementation of std::iterator_traits, which</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment">// is not available in libCstd when compiled with Sun C++.</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">// Regular expressions:</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment">// RE - a simple regular expression class using the POSIX</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment">// Extended Regular Expression syntax on UNIX-like platforms</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">// GOOGLETEST_CM0008 DO NOT DELETE</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment">// or a reduced regular exception syntax on other</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment">// platforms, including Windows.</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment">// Logging:</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment">// GTEST_LOG_() - logs messages at the specified severity level.</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="comment">// LogToStderr() - directs all log messages to stderr.</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="comment">// FlushInfoLog() - flushes informational log messages.</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment">// Stdout and stderr capturing:</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment">// CaptureStdout() - starts capturing stdout.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">// GetCapturedStdout() - stops capturing stdout and returns the captured</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">// string.</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment">// CaptureStderr() - starts capturing stderr.</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment">// GetCapturedStderr() - stops capturing stderr and returns the captured</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment">// string.</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment">// Integer types:</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">// TypeWithSize - maps an integer to a int type.</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment">// Int32, UInt32, Int64, UInt64, TimeInMillis</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment">// - integers of known sizes.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment">// BiggestInt - the biggest signed integer type.</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment">// Command-line utilities:</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment">// GTEST_DECLARE_*() - declares a flag.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment">// GTEST_DEFINE_*() - defines a flag.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment">// GetInjectableArgvs() - returns the command line as a vector of strings.</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment">// Environment variable utilities:</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">// GetEnv() - gets the value of an environment variable.</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment">// BoolFromGTestEnv() - parses a bool environment variable.</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment">// Int32FromGTestEnv() - parses an Int32 environment variable.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment">// StringFromGTestEnv() - parses a string environment variable.</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="preprocessor">#include &lt;ctype.h&gt;</span> <span class="comment">// for isspace, etc</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="preprocessor">#include &lt;stddef.h&gt;</span> <span class="comment">// for ptrdiff_t</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="preprocessor">#ifndef _WIN32_WCE</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor"># include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="preprocessor"># include &lt;sys/stat.h&gt;</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="preprocessor">#endif // !_WIN32_WCE</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="preprocessor">#if defined __APPLE__</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="preprocessor"># include &lt;AvailabilityMacros.h&gt;</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="preprocessor"># include &lt;TargetConditionals.h&gt;</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment">// Brings in the definition of HAS_GLOBAL_STRING. This must be done</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment">// BEFORE we test HAS_GLOBAL_STRING.</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment">// Copyright 2015, Google Inc.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="comment">// This header file defines the GTEST_OS_* macro.</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="comment">// It is separate from gtest-port.h so that custom/gtest-port.h can include it.</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_</span></div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="gtest_8h.html#a0392ac662f9547fb26a0d23c26d09fa6"> 408</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="comment">// Determines the platform on which Google Test is compiled.</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="preprocessor">#ifdef __CYGWIN__</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="preprocessor"># define GTEST_OS_CYGWIN 1</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor"># elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_MINGW 1</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS 1</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="preprocessor">#elif defined _WIN32</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS 1</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="preprocessor"># ifdef _WIN32_WCE</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_MOBILE 1</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="preprocessor"># elif defined(WINAPI_FAMILY)</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="preprocessor"># include &lt;winapifamily.h&gt;</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="preprocessor"># if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_DESKTOP 1</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="preprocessor"># elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_PHONE 1</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="preprocessor"># elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_RT 1</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="preprocessor"># elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE)</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_PHONE 1</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_TV_TITLE 1</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// WINAPI_FAMILY defined but no known partition matched.</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// Default to desktop.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_DESKTOP 1</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="preprocessor"># define GTEST_OS_WINDOWS_DESKTOP 1</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="preprocessor"># endif // _WIN32_WCE</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="preprocessor">#elif defined __OS2__</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="preprocessor"># define GTEST_OS_OS2 1</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="preprocessor">#elif defined __APPLE__</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="preprocessor"># define GTEST_OS_MAC 1</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="preprocessor"># if TARGET_OS_IPHONE</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="preprocessor"># define GTEST_OS_IOS 1</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="preprocessor">#elif defined __FreeBSD__</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor"># define GTEST_OS_FREEBSD 1</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor">#elif defined __Fuchsia__</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor"># define GTEST_OS_FUCHSIA 1</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#elif defined __linux__</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="preprocessor"># define GTEST_OS_LINUX 1</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="preprocessor"># if defined __ANDROID__</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="preprocessor"># define GTEST_OS_LINUX_ANDROID 1</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#elif defined __MVS__</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="preprocessor"># define GTEST_OS_ZOS 1</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="preprocessor">#elif defined(__sun) &amp;&amp; defined(__SVR4)</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="preprocessor"># define GTEST_OS_SOLARIS 1</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#elif defined(_AIX)</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor"># define GTEST_OS_AIX 1</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor">#elif defined(__hpux)</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor"># define GTEST_OS_HPUX 1</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor">#elif defined __native_client__</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor"># define GTEST_OS_NACL 1</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#elif defined __NetBSD__</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="preprocessor"># define GTEST_OS_NETBSD 1</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor">#elif defined __OpenBSD__</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="preprocessor"># define GTEST_OS_OPENBSD 1</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="preprocessor">#elif defined __QNX__</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor"># define GTEST_OS_QNX 1</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="preprocessor">#endif // __CYGWIN__</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="comment">// Copyright 2015, Google Inc.</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">// Injection point for custom user configurations. See README for details</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="comment">// ** Custom implementation starts here **</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_</span></div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="gtest_8h.html#aae632b050088c635963f553c4a5157b0"> 508</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#if !defined(GTEST_DEV_EMAIL_)</span></div><div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="gtest_8h.html#a21086d276b1a64d6763ee8a94b12c1b8"> 513</a></span>&#160;<span class="preprocessor"># define GTEST_DEV_EMAIL_ &quot;googletestframework@@googlegroups.com&quot;</span></div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="gtest_8h.html#a088e84784c589ba9b1fc48602ad8eabf"> 514</a></span>&#160;<span class="preprocessor"># define GTEST_FLAG_PREFIX_ &quot;gtest_&quot;</span></div><div class="line"><a name="l00515"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4251ff898f9f94ec6b8b9402c3436759"> 515</a></span>&#160;<span class="preprocessor"># define GTEST_FLAG_PREFIX_DASH_ &quot;gtest-&quot;</span></div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4018b7f288f974d022df397e2730633a"> 516</a></span>&#160;<span class="preprocessor"># define GTEST_FLAG_PREFIX_UPPER_ &quot;GTEST_&quot;</span></div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="gtest_8h.html#a13d98c217176bd8722c395b9225fc19d"> 517</a></span>&#160;<span class="preprocessor"># define GTEST_NAME_ &quot;Google Test&quot;</span></div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="gtest_8h.html#a5aa3c938fc1d049f1d9c5332f6a0b1d4"> 518</a></span>&#160;<span class="preprocessor"># define GTEST_PROJECT_URL_ &quot;https://github.com/google/googletest/&quot;</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_DEV_EMAIL_)</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)</span></div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa5e27ad4f88278501ef71bd9ddbb44c6"> 522</a></span>&#160;<span class="preprocessor"># define GTEST_INIT_GOOGLE_TEST_NAME_ &quot;testing::InitGoogleTest&quot;</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_)</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment">// Determines the version of gcc that is used to compile this.</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment">// 40302 means version 4.3.2.</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="preprocessor"># define GTEST_GCC_VER_ \</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="preprocessor"> (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// Macros for disabling Microsoft Visual C++ warnings.</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">// GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 4385)</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// /* code that triggers warnings C4800 and C4385 */</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// GTEST_DISABLE_MSC_WARNINGS_POP_()</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="preprocessor"> __pragma(warning(push)) \</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="preprocessor"> __pragma(warning(disable: warnings))</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_WARNINGS_POP_() \</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="preprocessor"> __pragma(warning(pop))</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="comment">// Not all compilers are MSVC</span></div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61"> 545</a></span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)</span></div><div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061"> 546</a></span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_WARNINGS_POP_()</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="comment">// Clang on Windows does not understand MSVC&#39;s pragma warning.</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="comment">// We need clang-specific way to disable function deprecation warning.</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor"> _Pragma(&quot;clang diagnostic push&quot;) \</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="preprocessor"> _Pragma(&quot;clang diagnostic ignored \&quot;-Wdeprecated-declarations\&quot;&quot;) \</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="preprocessor"> _Pragma(&quot;clang diagnostic ignored \&quot;-Wdeprecated-implementations\&quot;&quot;)</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="preprocessor">#define GTEST_DISABLE_MSC_DEPRECATED_POP_() \</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="preprocessor"> _Pragma(&quot;clang diagnostic pop&quot;)</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00559"></a><span class="lineno"><a class="line" href="gtest_8h.html#a5b130138db254deaf29dbe3dffa1a2a8"> 559</a></span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="preprocessor"> GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996)</span></div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa0dc86dc9837f1610e91da65458f53b3"> 561</a></span>&#160;<span class="preprocessor"># define GTEST_DISABLE_MSC_DEPRECATED_POP_() \</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="preprocessor"> GTEST_DISABLE_MSC_WARNINGS_POP_()</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="comment">// Brings in definitions for functions used in the testing::internal::posix</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="comment">// namespace (read, write, close, chdir, isatty, stat). We do not currently</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<span class="comment">// use them on Windows Mobile.</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor"># if !GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="preprocessor"># include &lt;direct.h&gt;</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="preprocessor"># include &lt;io.h&gt;</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">// In order to avoid having to include &lt;windows.h&gt;, use forward declaration</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS_MINGW &amp;&amp; !defined(__MINGW64_VERSION_MAJOR)</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="comment">// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="comment">// separate (equivalent) structs, instead of using typedef</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>_CRITICAL_SECTION GTEST_CRITICAL_SECTION;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="comment">// Assume CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="comment">// This assumption is verified by</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="comment">// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>_RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="comment">// This assumes that non-Windows OSes provide unistd.h. For OSes where this</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="comment">// is not the case, we need to include headers that provide the functions</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="comment">// mentioned above.</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="preprocessor"># include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="preprocessor"># include &lt;strings.h&gt;</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="preprocessor">#if GTEST_OS_LINUX_ANDROID</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment">// Used to define __ANDROID_API__ matching the target NDK API level.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="preprocessor"># include &lt;android/api-level.h&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment">// Defines this to true iff Google Test can use POSIX regular expressions.</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_POSIX_RE</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="preprocessor"># if GTEST_OS_LINUX_ANDROID</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment">// On Android, &lt;regex.h&gt; is only available starting with Gingerbread.</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="preprocessor"># define GTEST_HAS_POSIX_RE (__ANDROID_API__ &gt;= 9)</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="gtest_8h.html#af5c4295ea1d76f07f65934f659792431"> 603</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="preprocessor">#if GTEST_USES_PCRE</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment">// The appropriate headers have already been included.</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="preprocessor">#elif GTEST_HAS_POSIX_RE</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment">// On some platforms, &lt;regex.h&gt; needs someone to define size_t, and</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment">// won&#39;t compile otherwise. We can #include it here as we already</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment">// included &lt;stdlib.h&gt;, which is guaranteed to define size_t through</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment">// &lt;stddef.h&gt;.</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="preprocessor"># include &lt;regex.h&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="gtest_8h.html#acecef794eeb09598cd47da764271cb18"> 618</a></span>&#160;<span class="preprocessor"># define GTEST_USES_POSIX_RE 1</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="preprocessor">#elif GTEST_OS_WINDOWS</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment">// &lt;regex.h&gt; is not available on Windows. Use our own simple regex</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="comment">// implementation instead.</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="preprocessor"># define GTEST_USES_SIMPLE_RE 1</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment">// &lt;regex.h&gt; may not be available on this platform. Use our own</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="comment">// simple regex implementation instead.</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="preprocessor"># define GTEST_USES_SIMPLE_RE 1</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;<span class="preprocessor">#endif // GTEST_USES_PCRE</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="comment">// The user didn&#39;t tell us whether exceptions are enabled, so we need</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="comment">// to figure it out.</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="preprocessor"># if defined(_MSC_VER) &amp;&amp; defined(_CPPUNWIND)</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="comment">// MSVC defines _CPPUNWIND to 1 iff exceptions are enabled.</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="preprocessor"># elif defined(__BORLANDC__)</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment">// C++Builder&#39;s implementation of the STL uses the _HAS_EXCEPTIONS</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;<span class="comment">// macro to enable exceptions, so we&#39;ll do the same.</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment">// Assumes that exceptions are enabled by default.</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="preprocessor"># ifndef _HAS_EXCEPTIONS</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="preprocessor"># define _HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<span class="preprocessor"># endif // _HAS_EXCEPTIONS</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;<span class="preprocessor"># elif defined(__clang__)</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;<span class="comment">// clang defines __EXCEPTIONS iff exceptions are enabled before clang 220714,</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;<span class="comment">// but iff cleanups are enabled after that. In Obj-C++ files, there can be</span></div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="comment">// cleanups for ObjC exceptions which also need cleanups, even if C++ exceptions</span></div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="comment">// are disabled. clang has __has_feature(cxx_exceptions) which checks for C++</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;<span class="comment">// exceptions starting at clang r206352, but which checked for cleanups prior to</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="comment">// that. To reliably check for C++ exception availability with clang, check for</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;<span class="comment">// __EXCEPTIONS &amp;&amp; __has_feature(cxx_exceptions).</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS &amp;&amp; __has_feature(cxx_exceptions))</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="preprocessor"># elif defined(__GNUC__) &amp;&amp; __EXCEPTIONS</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;<span class="comment">// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled.</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="preprocessor"># elif defined(__SUNPRO_CC)</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="comment">// Sun Pro CC supports exceptions. However, there is no compile-time way of</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="comment">// detecting whether they are enabled or not. Therefore, we assume that</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment">// they are enabled unless the user tells us otherwise.</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="preprocessor"># elif defined(__IBMCPP__) &amp;&amp; __EXCEPTIONS</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;<span class="comment">// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled.</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;<span class="preprocessor"># elif defined(__HP_aCC)</span></div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;<span class="comment">// Exception handling is in effect by default in HP aCC compiler. It has to</span></div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;<span class="comment">// be turned of by +noeh compiler option if desired.</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 1</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;<span class="comment">// For other compilers, we assume exceptions are disabled to be</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;<span class="comment">// conservative.</span></div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="gtest_8h.html#aedcf220690e6589d0fc2bd3db768ea66"> 675</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_EXCEPTIONS 0</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;<span class="preprocessor"># endif // defined(_MSC_VER) || defined(__BORLANDC__)</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="preprocessor">#if !defined(GTEST_HAS_STD_STRING)</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;<span class="comment">// Even though we don&#39;t use this macro any longer, we keep it in case</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="comment">// some clients still depend on it.</span></div><div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="gtest_8h.html#adba1121430c11cee8ba0c74e8cf6aa40"> 682</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_STD_STRING 1</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;<span class="preprocessor">#elif !GTEST_HAS_STD_STRING</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;<span class="comment">// The user told us that ::std::string isn&#39;t available.</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160;<span class="preprocessor"># error &quot;::std::string isn&#39;t available.&quot;</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_HAS_STD_STRING)</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6ab57c4a17233dd4ed30c2926bb99cc5"> 689</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_GLOBAL_STRING 0</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="comment">// The user didn&#39;t tell us whether ::std::wstring is available, so we need</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="comment">// to figure it out.</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="comment">// Cygwin 1.7 and below doesn&#39;t support ::std::wstring.</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="comment">// Solaris&#39; libc++ doesn&#39;t support it either. Android has</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;<span class="comment">// no support for it at least as recent as Froyo (2.2).</span></div><div class="line"><a name="l00698"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6e087748d8bbd2ca57c487b6ad268670"> 698</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_STD_WSTRING \</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;<span class="preprocessor"> (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS))</span></div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="comment">// The user didn&#39;t tell us whether ::wstring is available, so we need</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="comment">// to figure it out.</span></div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="gtest_8h.html#afca9ecaf5846561187a15b75013aa85b"> 706</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_GLOBAL_WSTRING \</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="preprocessor"> (GTEST_HAS_STD_WSTRING &amp;&amp; GTEST_HAS_GLOBAL_STRING)</span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment">// Determines whether RTTI is available.</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_RTTI</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;<span class="comment">// The user didn&#39;t tell us whether RTTI is enabled, so we need to</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;<span class="comment">// figure it out.</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="preprocessor"># ifdef _MSC_VER</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="preprocessor"># ifdef _CPPRTTI // MSVC defines this macro iff RTTI is enabled.</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 1</span></div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 0</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;<span class="comment">// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled.</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="preprocessor"># elif defined(__GNUC__)</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;<span class="preprocessor"># ifdef __GXX_RTTI</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;<span class="comment">// When building against STLport with the Android NDK and with</span></div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="comment">// -frtti -fno-exceptions, the build fails at link time with undefined</span></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;<span class="comment">// references to __cxa_bad_typeid. Note sure if STL or toolchain bug,</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="comment">// so disable RTTI when detected.</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;<span class="preprocessor"># if GTEST_OS_LINUX_ANDROID &amp;&amp; defined(_STLPORT_MAJOR) &amp;&amp; \</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;<span class="preprocessor"> !defined(__EXCEPTIONS)</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 0</span></div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 1</span></div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;<span class="preprocessor"># endif // GTEST_OS_LINUX_ANDROID &amp;&amp; __STLPORT_MAJOR &amp;&amp; !__EXCEPTIONS</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 0</span></div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="preprocessor"># endif // __GXX_RTTI</span></div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;<span class="comment">// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends</span></div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;<span class="comment">// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the</span></div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;<span class="comment">// first version with C++ support.</span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="preprocessor"># elif defined(__clang__)</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI __has_feature(cxx_rtti)</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;<span class="comment">// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if</span></div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;<span class="comment">// both the typeid and dynamic_cast features are present.</span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="preprocessor"># elif defined(__IBMCPP__) &amp;&amp; (__IBMCPP__ &gt;= 900)</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;<span class="preprocessor"># ifdef __RTTI_ALL__</span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 1</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 0</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;<span class="comment">// For all other compilers, we assume RTTI is enabled.</span></div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9ba781217167f905bff2f1c410a97930"> 761</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_RTTI 1</span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;<span class="preprocessor"># endif // _MSC_VER</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_RTTI</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;<span class="comment">// It&#39;s this header&#39;s responsibility to #include &lt;typeinfo&gt; when RTTI</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;<span class="comment">// is enabled.</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;<span class="preprocessor">#if GTEST_HAS_RTTI</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="preprocessor"># include &lt;typeinfo&gt;</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment">// Determines whether Google Test can use the pthreads library.</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="comment">// The user didn&#39;t tell us explicitly, so we make reasonable assumptions about</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="comment">// which platforms have pthreads support.</span></div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;<span class="comment">// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0</span></div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;<span class="comment">// to your compiler flags.</span></div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3341397e1952de0b9cd88762d4d3ae4b"> 780</a></span>&#160;<span class="preprocessor">#define GTEST_HAS_PTHREAD \</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;<span class="preprocessor"> (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;<span class="preprocessor"> GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA)</span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="preprocessor">#if GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="comment">// gtest-port.h guarantees to #include &lt;pthread.h&gt; when GTEST_HAS_PTHREAD is</span></div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="comment">// true.</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="preprocessor"># include &lt;pthread.h&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="comment">// For timespec and nanosleep, used below.</span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="preprocessor"># include &lt;time.h&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment">// Determines whether clone(2) is supported.</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment">// Usually it will only be available on Linux, excluding</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment">// Linux on the Itanium architecture.</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment">// Also see http://linux.die.net/man/2/clone.</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_CLONE</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="comment">// The user didn&#39;t tell us, so we need to figure it out.</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="preprocessor"># if GTEST_OS_LINUX &amp;&amp; !defined(__ia64__)</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;<span class="preprocessor"># if GTEST_OS_LINUX_ANDROID</span></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;<span class="comment">// On Android, clone() became available at different API levels for each 32-bit</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="comment">// architecture.</span></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;<span class="preprocessor"># if defined(__LP64__) || \</span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;<span class="preprocessor"> (defined(__arm__) &amp;&amp; __ANDROID_API__ &gt;= 9) || \</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;<span class="preprocessor"> (defined(__mips__) &amp;&amp; __ANDROID_API__ &gt;= 12) || \</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;<span class="preprocessor"> (defined(__i386__) &amp;&amp; __ANDROID_API__ &gt;= 17)</span></div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;<span class="preprocessor"># define GTEST_HAS_CLONE 1</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;<span class="preprocessor"># define GTEST_HAS_CLONE 0</span></div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="preprocessor"># define GTEST_HAS_CLONE 1</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00817"></a><span class="lineno"><a class="line" href="gtest_8h.html#a40c075a7f969a694e59532356be59fd5"> 817</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_CLONE 0</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="preprocessor"># endif // GTEST_OS_LINUX &amp;&amp; !defined(__ia64__)</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_CLONE</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="comment">// Determines whether to support stream redirection. This is used to test</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="comment">// output correctness and to implement death tests.</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_STREAM_REDIRECTION</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="comment">// By default, we assume that stream redirection is supported on all</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment">// platforms except known mobile ones.</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="preprocessor"># if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="preprocessor"># define GTEST_HAS_STREAM_REDIRECTION 0</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="gtest_8h.html#add695166eb7b691f93777525d5881062"> 830</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_STREAM_REDIRECTION 1</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;<span class="preprocessor"># endif // !GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STREAM_REDIRECTION</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;<span class="comment">// Determines whether to support death tests.</span></div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;<span class="comment">// pops up a dialog window that cannot be suppressed programmatically.</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;<span class="preprocessor">#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \</span></div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160;<span class="preprocessor"> (GTEST_OS_MAC &amp;&amp; !GTEST_OS_IOS) || \</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="preprocessor"> (GTEST_OS_WINDOWS_DESKTOP &amp;&amp; _MSC_VER) || \</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<span class="preprocessor"> GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;<span class="preprocessor"> GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD || \</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="preprocessor"> GTEST_OS_NETBSD || GTEST_OS_FUCHSIA)</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="preprocessor"># define GTEST_HAS_DEATH_TEST 1</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="comment">// Determines whether to support type-driven tests.</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="comment">// Typed tests need &lt;typeinfo&gt; and variadic macros, which GCC, VC++ 8.0,</span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment">// Sun Pro CC, IBM Visual Age, and HP aCC support.</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="preprocessor"> defined(__IBMCPP__) || defined(__HP_aCC)</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="preprocessor"># define GTEST_HAS_TYPED_TEST 1</span></div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="preprocessor"># define GTEST_HAS_TYPED_TEST_P 1</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment">// Determines whether the system compiler uses UTF-16 for encoding wide strings.</span></div><div class="line"><a name="l00856"></a><span class="lineno"><a class="line" href="gtest_8h.html#a0e3904ca8d62334ab5f29c057dceb6a1"> 856</a></span>&#160;<span class="preprocessor">#define GTEST_WIDE_STRING_USES_UTF16_ \</span></div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="preprocessor"> (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2)</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment">// Determines whether test results can be streamed to a socket.</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="preprocessor">#if GTEST_OS_LINUX</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="preprocessor"># define GTEST_CAN_STREAM_RESULTS_ 1</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment">// Defines some utility macros.</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment">// The GNU compiler emits a warning if nested &quot;if&quot; statements are followed by</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment">// an &quot;else&quot; statement and braces are not used to explicitly disambiguate the</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment">// &quot;else&quot; binding. This leads to problems with code like:</span></div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;<span class="comment">// if (gate)</span></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160;<span class="comment">// ASSERT_*(condition) &lt;&lt; &quot;Some message&quot;;</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment">// The &quot;switch (0) case 0:&quot; idiom is used to suppress this.</span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="preprocessor">#ifdef __INTEL_COMPILER</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="preprocessor"># define GTEST_AMBIGUOUS_ELSE_BLOCKER_</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00877"></a><span class="lineno"><a class="line" href="gtest_8h.html#a00b3684a621ce1422b55a0e7e8a6aecb"> 877</a></span>&#160;<span class="preprocessor"># define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default: // NOLINT</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="comment">// Use this annotation at the end of a struct/class definition to</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="comment">// prevent the compiler from optimizing away instances that are never</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment">// used. This is useful when all interesting logic happens inside the</span></div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="comment">// c&#39;tor and / or d&#39;tor. Example:</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160;<span class="comment">// struct Foo {</span></div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160;<span class="comment">// Foo() { ... }</span></div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;<span class="comment">// } GTEST_ATTRIBUTE_UNUSED_;</span></div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;<span class="comment">// Also use it after a variable or parameter declaration to tell the</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="comment">// compiler the variable/parameter does not have to be used.</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="preprocessor">#if defined(__GNUC__) &amp;&amp; !defined(COMPILER_ICC)</span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="preprocessor">#elif defined(__clang__)</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="preprocessor"># if __has_attribute(unused)</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;<span class="preprocessor">#ifndef GTEST_ATTRIBUTE_UNUSED_</span></div><div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="gtest_8h.html#acdd47601a9376161c349a5881ccc6918"> 899</a></span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_UNUSED_</span></div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment">// Use this annotation before a function that takes a printf format string.</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="preprocessor">#if (defined(__GNUC__) || defined(__clang__)) &amp;&amp; !defined(COMPILER_ICC)</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;<span class="preprocessor"># if defined(__MINGW_PRINTF_FORMAT)</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;<span class="comment">// MinGW has two different printf implementations. Ensure the format macro</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;<span class="comment">// matches the selected implementation. See</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;<span class="comment">// https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/.</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="preprocessor"> __attribute__((__format__(__MINGW_PRINTF_FORMAT, string_index, \</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;<span class="preprocessor"> first_to_check)))</span></div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;<span class="preprocessor"> __attribute__((__format__(__printf__, string_index, first_to_check)))</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00916"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae29b00ca46783509cc900cd03d61ef37"> 916</a></span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check)</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160;</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;<span class="comment">// A macro to disallow operator=</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="comment">// This should be used in the private: declarations for a class.</span></div><div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e"> 922</a></span>&#160;<span class="preprocessor">#define GTEST_DISALLOW_ASSIGN_(type) \</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;<span class="preprocessor"> void operator=(type const &amp;) = delete</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="comment">// A macro to disallow copy constructor and operator=</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;<span class="comment">// This should be used in the private: declarations for a class.</span></div><div class="line"><a name="l00927"></a><span class="lineno"><a class="line" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29"> 927</a></span>&#160;<span class="preprocessor">#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type) \</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;<span class="preprocessor"> type(type const &amp;) = delete; \</span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;<span class="preprocessor"> GTEST_DISALLOW_ASSIGN_(type)</span></div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;<span class="comment">// Tell the compiler to warn about unused return values for functions declared</span></div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;<span class="comment">// with this macro. The macro should be used on function declarations</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;<span class="comment">// following the argument list:</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;<span class="comment">// Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_;</span></div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;<span class="preprocessor">#if defined(__GNUC__) &amp;&amp; !defined(COMPILER_ICC)</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;<span class="preprocessor"># define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))</span></div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8e5aab8276b2645f64f41c9e3021b935"> 939</a></span>&#160;<span class="preprocessor"># define GTEST_MUST_USE_RESULT_</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;<span class="preprocessor">#endif // __GNUC__ &amp;&amp; !COMPILER_ICC</span></div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;<span class="comment">// MS C++ compiler emits warning when a conditional expression is compile time</span></div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;<span class="comment">// constant. In some contexts this warning is false positive and needs to be</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;<span class="comment">// suppressed. Use the following two macros in such cases:</span></div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;<span class="comment">// GTEST_INTENTIONAL_CONST_COND_PUSH_()</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;<span class="comment">// while (true) {</span></div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;<span class="comment">// GTEST_INTENTIONAL_CONST_COND_POP_()</span></div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00950"></a><span class="lineno"><a class="line" href="gtest_8h.html#a69b0cadb05bf2a1ef96151243c6b6241"> 950</a></span>&#160;<span class="preprocessor"># define GTEST_INTENTIONAL_CONST_COND_PUSH_() \</span></div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;<span class="preprocessor"> GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127)</span></div><div class="line"><a name="l00952"></a><span class="lineno"><a class="line" href="gtest_8h.html#ad115e2c466f7e8a32f1cf23ef2e5f220"> 952</a></span>&#160;<span class="preprocessor"># define GTEST_INTENTIONAL_CONST_COND_POP_() \</span></div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;<span class="preprocessor"> GTEST_DISABLE_MSC_WARNINGS_POP_()</span></div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;<span class="comment">// Determine whether the compiler supports Microsoft&#39;s Structured Exception</span></div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;<span class="comment">// Handling. This is supported by several Windows compilers but generally</span></div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160;<span class="comment">// does not exist on any other system.</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160;<span class="preprocessor">#ifndef GTEST_HAS_SEH</span></div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160;<span class="comment">// The user didn&#39;t tell us, so we need to figure it out.</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;<span class="preprocessor"># if defined(_MSC_VER) || defined(__BORLANDC__)</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;<span class="comment">// These two compilers are known to support SEH.</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;<span class="preprocessor"># define GTEST_HAS_SEH 1</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;<span class="comment">// Assume no SEH.</span></div><div class="line"><a name="l00966"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8f6a84e8be3c94cd1f6f46a136df2c62"> 966</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_SEH 0</span></div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_SEH</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;<span class="preprocessor">#ifndef GTEST_IS_THREADSAFE</span></div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;</div><div class="line"><a name="l00973"></a><span class="lineno"><a class="line" href="gtest_8h.html#a727149862f53b2fb21f6d33cd9323886"> 973</a></span>&#160;<span class="preprocessor">#define GTEST_IS_THREADSAFE \</span></div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;<span class="preprocessor"> (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \</span></div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="preprocessor"> (GTEST_OS_WINDOWS &amp;&amp; !GTEST_OS_WINDOWS_PHONE &amp;&amp; !GTEST_OS_WINDOWS_RT) || \</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;<span class="preprocessor"> GTEST_HAS_PTHREAD)</span></div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;<span class="preprocessor">#endif // GTEST_IS_THREADSAFE</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;<span class="comment">// GTEST_API_ qualifies all symbols that must be exported. The definitions below</span></div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;<span class="comment">// are guarded by #ifndef to give embedders a chance to define GTEST_API_ in</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="comment">// gtest/internal/custom/gtest-port.h</span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="preprocessor">#ifndef GTEST_API_</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<span class="preprocessor"># if GTEST_LINKED_AS_SHARED_LIBRARY</span></div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;<span class="preprocessor"># define GTEST_API_ __declspec(dllimport)</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;<span class="preprocessor"># elif GTEST_CREATE_SHARED_LIBRARY</span></div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;<span class="preprocessor"># define GTEST_API_ __declspec(dllexport)</span></div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;<span class="preprocessor">#elif __GNUC__ &gt;= 4 || defined(__clang__)</span></div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160;<span class="preprocessor"># define GTEST_API_ __attribute__((visibility (&quot;default&quot;)))</span></div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="preprocessor">#endif // _MSC_VER</span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;<span class="preprocessor">#endif // GTEST_API_</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="preprocessor">#ifndef GTEST_API_</span></div><div class="line"><a name="l00998"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790"> 998</a></span>&#160;<span class="preprocessor"># define GTEST_API_</span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="preprocessor">#endif // GTEST_API_</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="preprocessor">#ifndef GTEST_DEFAULT_DEATH_TEST_STYLE</span></div><div class="line"><a name="l01002"></a><span class="lineno"><a class="line" href="gtest_8h.html#a491d09ee62f1c9cfeafa3dbf75aaa9e2"> 1002</a></span>&#160;<span class="preprocessor"># define GTEST_DEFAULT_DEATH_TEST_STYLE &quot;fast&quot;</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="preprocessor">#endif // GTEST_DEFAULT_DEATH_TEST_STYLE</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment">// Ask the compiler to never inline a given function.</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="preprocessor"># define GTEST_NO_INLINE_ __attribute__((noinline))</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01009"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9945cbd967fbccb15f8de711f58955c7"> 1009</a></span>&#160;<span class="preprocessor"># define GTEST_NO_INLINE_</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment">// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project.</span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="preprocessor">#if !defined(GTEST_HAS_CXXABI_H_)</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="preprocessor"># if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) &amp;&amp; !defined(_MSC_VER))</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="preprocessor"># define GTEST_HAS_CXXABI_H_ 1</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l01017"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae6239a8ccf4c230008d1db1ea8bd738e"> 1017</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_CXXABI_H_ 0</span></div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="comment">// A function level attribute to disable checking for use of uninitialized</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="comment">// memory when built with MemorySanitizer.</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="preprocessor"># if __has_feature(memory_sanitizer)</span></div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ \</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="preprocessor"> __attribute__((no_sanitize_memory))</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="preprocessor"># endif // __has_feature(memory_sanitizer)</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01031"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2a83dd79037e53814a509cc3f5702650"> 1031</a></span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="preprocessor">#endif // __clang__</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;<span class="comment">// A function level attribute to disable AddressSanitizer instrumentation.</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="preprocessor"># if __has_feature(address_sanitizer)</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="preprocessor"> __attribute__((no_sanitize_address))</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_</span></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;<span class="preprocessor"># endif // __has_feature(address_sanitizer)</span></div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01043"></a><span class="lineno"><a class="line" href="gtest_8h.html#af18b465f4ba6e36eea7a8d2d79521873"> 1043</a></span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="preprocessor">#endif // __clang__</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment">// A function level attribute to disable ThreadSanitizer instrumentation.</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="preprocessor"># if __has_feature(thread_sanitizer)</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ \</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="preprocessor"> __attribute__((no_sanitize_thread))</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_</span></div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="preprocessor"># endif // __has_feature(thread_sanitizer)</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01055"></a><span class="lineno"><a class="line" href="gtest_8h.html#abf30a6b1b3a12ecb2cc1bc1a6f5f9646"> 1055</a></span>&#160;<span class="preprocessor"># define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="preprocessor">#endif // __clang__</span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="keyword">class </span>Message;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="comment">// Legacy imports for backwards compatibility.</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment">// New code should use std:: names directly.</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="keyword">using</span> <a class="code" href="namespaceutl.html#a29057d2e164fe6dd3f3095f0d69c6546">std::get</a>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="keyword">using</span> std::make_tuple;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;<span class="keyword">using</span> std::tuple;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="keyword">using</span> std::tuple_element;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="keyword">using</span> std::tuple_size;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment">// A secret type that Google Test users don&#39;t know about. It has no</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment">// definition on purpose. Therefore it&#39;s impossible to create a</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment">// Secret object, which is what we want.</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="keyword">class </span>Secret;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment">// The GTEST_COMPILE_ASSERT_ is a legacy macro used to verify that a compile</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="comment">// time expression is true (in new code, use static_assert instead). For</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment">// example, you could use it to verify the size of a static array:</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;<span class="comment">// GTEST_COMPILE_ASSERT_(GTEST_ARRAY_SIZE_(names) == NUM_NAMES,</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment">// names_incorrect_size);</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="comment">// The second argument to the macro must be a valid C++ identifier. If the</span></div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="comment">// expression is false, compiler will issue an error containing this identifier.</span></div><div class="line"><a name="l01086"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae1f37dc71d5daa6fb49ca1b6047d4a8c"> 1086</a></span>&#160;<span class="preprocessor">#define GTEST_COMPILE_ASSERT_(expr, msg) static_assert(expr, #msg)</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment">// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h.</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment">// This template is declared, but intentionally undefined.</span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01092"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html"> 1092</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html">StaticAssertTypeEqHelper</a>;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper_3_01_t_00_01_t_01_4.html"> 1095</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html">StaticAssertTypeEqHelper</a>&lt;T, T&gt; {</div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper_3_01_t_00_01_t_01_4.html#a70d7e229f58313a1086e819dd09b652da63c475f543e4e977d43c5093dd2b7f3f"> 1096</a></span>&#160; <span class="keyword">enum</span> { value = <span class="keyword">true</span> };</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;};</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="comment">// Same as std::is_same&lt;&gt;.</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_same.html"> 1101</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_same.html">IsSame</a> {</div><div class="line"><a name="l01102"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_same.html#a4dfd313ccff08905c7c36f990ab52e1ca58968a8c680eff4326a25fab55aa0a5e"> 1102</a></span>&#160; <span class="keyword">enum</span> { <a class="code" href="structtesting_1_1internal_1_1_is_same.html#a4dfd313ccff08905c7c36f990ab52e1ca58968a8c680eff4326a25fab55aa0a5e">value</a> = <span class="keyword">false</span> };</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;};</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01105"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_same_3_01_t_00_01_t_01_4.html"> 1105</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_same.html">IsSame</a>&lt;T, T&gt; {</div><div class="line"><a name="l01106"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_same_3_01_t_00_01_t_01_4.html#a87b00ed787e27293dafab4afac29184ba0bb1c61b491e4e13216a3f9e9cd24c69"> 1106</a></span>&#160; <span class="keyword">enum</span> { <a class="code" href="structtesting_1_1internal_1_1_is_same.html#a4dfd313ccff08905c7c36f990ab52e1ca58968a8c680eff4326a25fab55aa0a5e">value</a> = <span class="keyword">true</span> };</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;};</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment">// Evaluates to the number of elements in &#39;array&#39;.</span></div><div class="line"><a name="l01110"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab71a3e9a908b7b6acc0e8bddc0ecb3fe"> 1110</a></span>&#160;<span class="preprocessor">#define GTEST_ARRAY_SIZE_(array) (sizeof(array) / sizeof(array[0]))</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">typedef ::string</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111"> 1115</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">typedef ::std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">typedef ::wstring</a> <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">wstring</a>;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="preprocessor">#elif GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l01121"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335"> 1121</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">typedef ::std::wstring</a> <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">wstring</a>;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;<span class="comment">// A helper for suppressing warnings on constant condition. It just</span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="comment">// returns &#39;condition&#39;.</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#ab2709373c78eb8b1c22a6ba30cceba52">IsTrue</a>(<span class="keywordtype">bool</span> condition);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;<span class="comment">// Defines RE.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;<span class="preprocessor">#if GTEST_USES_PCRE</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;<span class="comment">// if used, PCRE is injected by custom/gtest-port.h</span></div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;<span class="preprocessor">#elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE</span></div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">// A simple C++ wrapper for &lt;regex.h&gt;. It uses the POSIX Extended</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment">// Regular Expression syntax.</span></div><div class="line"><a name="l01136"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html"> 1136</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a> {</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">// A copy constructor is required by the Standard to initialize object</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="comment">// references from r-values.</span></div><div class="line"><a name="l01140"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#ab215dbc2565fce641e1746ca43e9d68a"> 1140</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_r_e.html#ab215dbc2565fce641e1746ca43e9d68a">RE</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>&amp; other) { Init(other.<a class="code" href="classtesting_1_1internal_1_1_r_e.html#a24236aab3a6b0183a145a6f4c0bb9848">pattern</a>()); }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="comment">// Constructs an RE from a string.</span></div><div class="line"><a name="l01143"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#a8840bd639642f3d4769a94a68ce463c2"> 1143</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_r_e.html#a8840bd639642f3d4769a94a68ce463c2">RE</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; regex) { Init(regex.c_str()); } <span class="comment">// NOLINT</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="preprocessor"># if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; regex) { Init(regex.c_str()); } <span class="comment">// NOLINT</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#a908ea936a5b7a14479a1b292a7189ca6"> 1151</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_r_e.html#a908ea936a5b7a14479a1b292a7189ca6">RE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* regex) { Init(regex); } <span class="comment">// NOLINT</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>();</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="comment">// Returns the string representation of the regex.</span></div><div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#a24236aab3a6b0183a145a6f4c0bb9848"> 1155</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1internal_1_1_r_e.html#a24236aab3a6b0183a145a6f4c0bb9848">pattern</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pattern_; }</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// FullMatch(str, re) returns true iff regular expression re matches</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="comment">// the entire str.</span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="comment">// PartialMatch(str, re) returns true iff regular expression re</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="comment">// matches a substring of str (including str itself).</span></div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#aa79a950758d0f1d62f7762d1e9cefe86"> 1161</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html#aa79a950758d0f1d62f7762d1e9cefe86">FullMatch</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; str, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>&amp; re) {</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">return</span> FullMatch(str.c_str(), re);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; }</div><div class="line"><a name="l01164"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_r_e.html#a1e81f9a87211bdca645e025f8f0236c8"> 1164</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html#a1e81f9a87211bdca645e025f8f0236c8">PartialMatch</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; str, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>&amp; re) {</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">return</span> PartialMatch(str.c_str(), re);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; }</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="preprocessor"># if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> FullMatch(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; str, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_r_e.html">RE</a>&amp; re) {</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">return</span> FullMatch(str.c_str(), re);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; }</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> PartialMatch(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; str, <span class="keyword">const</span> RE&amp; re) {</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">return</span> PartialMatch(str.c_str(), re);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; }</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> FullMatch(<span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keyword">const</span> RE&amp; re);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> PartialMatch(<span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keyword">const</span> RE&amp; re);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordtype">void</span> Init(<span class="keyword">const</span> <span class="keywordtype">char</span>* regex);</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* pattern_;</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordtype">bool</span> is_valid_;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="preprocessor"># if GTEST_USES_POSIX_RE</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; regex_t full_regex_; <span class="comment">// For FullMatch().</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; regex_t partial_regex_; <span class="comment">// For PartialMatch().</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;<span class="preprocessor"># else // GTEST_USES_SIMPLE_RE</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* full_pattern_; <span class="comment">// For FullMatch();</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(RE);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;};</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="preprocessor">#endif // GTEST_USES_PCRE</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment">// Formats a source file path and a line number as they would appear</span></div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment">// in an error message from the compiler used to compile this code.</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">GTEST_API_ ::std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a31b7c3abed4a7c395f42c61e993989f4">FormatFileLocation</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line);</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment">// Formats a file location for compiler-independent XML output.</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment">// Although this function is not platform dependent, we put it next to</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment">// FormatFileLocation in order to contrast the two functions.</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">GTEST_API_ ::std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a1ee4cde97868c53e442d3182496a9f3c">FormatCompilerIndependentFileLocation</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordtype">int</span> line);</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment">// Defines logging utilities:</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment">// GTEST_LOG_(severity) - logs messages at the specified severity level. The</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="comment">// message itself is streamed into the macro.</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="comment">// LogToStderr() - directs all log messages to stderr.</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="comment">// FlushInfoLog() - flushes informational log messages.</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;</div><div class="line"><a name="l01219"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977"> 1219</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977">GTestLogSeverity</a> {</div><div class="line"><a name="l01220"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977aff315e0913fcda86fe4de882bf5e33e9"> 1220</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977aff315e0913fcda86fe4de882bf5e33e9">GTEST_INFO</a>,</div><div class="line"><a name="l01221"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a7a051bc2794f15a4bf0eab40562a304c"> 1221</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a7a051bc2794f15a4bf0eab40562a304c">GTEST_WARNING</a>,</div><div class="line"><a name="l01222"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a651e9cd2a904e0c8210536271b875f75"> 1222</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a651e9cd2a904e0c8210536271b875f75">GTEST_ERROR</a>,</div><div class="line"><a name="l01223"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a75063567740f6bf7da419b1b9197b12e"> 1223</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a75063567740f6bf7da419b1b9197b12e">GTEST_FATAL</a></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;};</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment">// Formats log entry severity, provides a stream object for streaming the</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment">// log message, and terminates the message with a newline when going out of</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment">// scope.</span></div><div class="line"><a name="l01229"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_g_test_log.html"> 1229</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1internal_1_1_g_test_log.html">GTestLog</a> {</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_g_test_log.html">GTestLog</a>(<a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977">GTestLogSeverity</a> severity, <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line);</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="comment">// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_g_test_log.html">GTestLog</a>();</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div><div class="line"><a name="l01236"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_g_test_log.html#aebb92e67d98eca69f0347d5121dab27a"> 1236</a></span>&#160; ::std::ostream&amp; <a class="code" href="classtesting_1_1internal_1_1_g_test_log.html#aebb92e67d98eca69f0347d5121dab27a">GetStream</a>() { return ::std::cerr; }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977">GTestLogSeverity</a> severity_;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_g_test_log.html">GTestLog</a>);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;};</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="preprocessor">#if !defined(GTEST_LOG_)</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8ef4cb4c465db8c15464aecc6d9510ef"> 1246</a></span>&#160;<span class="preprocessor"># define GTEST_LOG_(severity) \</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="preprocessor"> ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="preprocessor"> __FILE__, __LINE__).GetStream()</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a06b1b20029fbd1dbeb59752f914fab84"> 1250</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a06b1b20029fbd1dbeb59752f914fab84">LogToStderr</a>() {}</div><div class="line"><a name="l01251"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a2135f223bf6b527729aeaa651115183b"> 1251</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a2135f223bf6b527729aeaa651115183b">FlushInfoLog</a>() { fflush(<span class="keyword">nullptr</span>); }</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_LOG_)</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="preprocessor">#if !defined(GTEST_CHECK_)</span></div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE.</span></div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;<span class="comment">// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition</span></div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="comment">// is not satisfied.</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;<span class="comment">// Synopsys:</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;<span class="comment">// GTEST_CHECK_(boolean_condition);</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;<span class="comment">// or</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="comment">// GTEST_CHECK_(boolean_condition) &lt;&lt; &quot;Additional message&quot;;</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="comment">// This checks the condition and if the condition is not satisfied</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="comment">// it prints message about the condition violation, including the</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;<span class="comment">// condition itself, plus additional message streamed into it, if any,</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;<span class="comment">// and then it aborts the program. It aborts the program irrespective of</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;<span class="comment">// whether it is built in the debug mode or not.</span></div><div class="line"><a name="l01270"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8"> 1270</a></span>&#160;<span class="preprocessor"># define GTEST_CHECK_(condition) \</span></div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;<span class="preprocessor"> if (::testing::internal::IsTrue(condition)) \</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;<span class="preprocessor"> ; \</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;<span class="preprocessor"> else \</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="preprocessor"> GTEST_LOG_(FATAL) &lt;&lt; &quot;Condition &quot; #condition &quot; failed. &quot;</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_CHECK_)</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;<span class="comment">// An all-mode assert to verify that the given POSIX-style function</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;<span class="comment">// call returns 0 (indicating success). Known limitation: this</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="comment">// doesn&#39;t expand to a balanced &#39;if&#39; statement, so enclose the macro</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;<span class="comment">// in {} if you need to use it as the only statement in an &#39;if&#39;</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;<span class="comment">// branch.</span></div><div class="line"><a name="l01283"></a><span class="lineno"><a class="line" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af"> 1283</a></span>&#160;<span class="preprocessor">#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \</span></div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;<span class="preprocessor"> if (const int gtest_error = (posix_call)) \</span></div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;<span class="preprocessor"> GTEST_LOG_(FATAL) &lt;&lt; #posix_call &lt;&lt; &quot;failed with error &quot; \</span></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;<span class="preprocessor"> &lt;&lt; gtest_error</span></div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;<span class="comment">// Adds reference to a type if it is not a reference type,</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;<span class="comment">// otherwise leaves it unchanged. This is the same as</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;<span class="comment">// tr1::add_reference, which is not widely available yet.</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01292"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_add_reference.html#a2df8dd7c4e41f6390e6e66b1a9a67bb4"> 1292</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_add_reference.html">AddReference</a> { <span class="keyword">typedef</span> T&amp; <a class="code" href="structtesting_1_1internal_1_1_add_reference.html#a2df8dd7c4e41f6390e6e66b1a9a67bb4">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01294"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_add_reference_3_01_t_01_6_01_4.html#a93c064cdcdaced0abd167258425e57af"> 1294</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_add_reference.html">AddReference</a>&lt;T&amp;&gt; { <span class="keyword">typedef</span> T&amp; <a class="code" href="structtesting_1_1internal_1_1_add_reference_3_01_t_01_6_01_4.html#a93c064cdcdaced0abd167258425e57af">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;<span class="comment">// A handy wrapper around AddReference that works when the argument T</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;<span class="comment">// depends on template parameters.</span></div><div class="line"><a name="l01298"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab389953fc1f7e4efae30d182a0e0a13b"> 1298</a></span>&#160;<span class="preprocessor">#define GTEST_ADD_REFERENCE_(T) \</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;<span class="preprocessor"> typename ::testing::internal::AddReference&lt;T&gt;::type</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="comment">// Transforms &quot;T&quot; into &quot;const T&amp;&quot; according to standard reference collapsing</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="comment">// rules (this is only needed as a backport for C++98 compilers that do not</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="comment">// support reference collapsing). Specifically, it transforms:</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;<span class="comment">// char ==&gt; const char&amp;</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;<span class="comment">// const char ==&gt; const char&amp;</span></div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;<span class="comment">// char&amp; ==&gt; char&amp;</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;<span class="comment">// const char&amp; ==&gt; const char&amp;</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;<span class="comment">// Note that the non-const reference will not have &quot;const&quot; added. This is</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;<span class="comment">// standard, and necessary so that &quot;T&quot; can always bind to &quot;const T&amp;&quot;.</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01313"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_ref.html#a53610a4d0e72958332222b0a85f8937a"> 1313</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_const_ref.html">ConstRef</a> { <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="structtesting_1_1internal_1_1_const_ref.html#a53610a4d0e72958332222b0a85f8937a">type</a>; };</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01315"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_ref_3_01_t_01_6_01_4.html#a9f664dd25649a0d260cfb1f610c7a349"> 1315</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_const_ref.html">ConstRef</a>&lt;T&amp;&gt; { <span class="keyword">typedef</span> T&amp; <a class="code" href="structtesting_1_1internal_1_1_const_ref_3_01_t_01_6_01_4.html#a9f664dd25649a0d260cfb1f610c7a349">type</a>; };</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="comment">// The argument T must depend on some template parameters.</span></div><div class="line"><a name="l01318"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9f91fcd24cae0b48fdaeb19102dac525"> 1318</a></span>&#160;<span class="preprocessor">#define GTEST_REFERENCE_TO_CONST_(T) \</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="preprocessor"> typename ::testing::internal::ConstRef&lt;T&gt;::type</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="comment">// Use ImplicitCast_ as a safe version of static_cast for upcasting in</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="comment">// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<span class="comment">// const Foo*). When you use ImplicitCast_, the compiler checks that</span></div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="comment">// the cast is safe. Such explicit ImplicitCast_s are necessary in</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="comment">// surprisingly many situations where C++ demands an exact type match</span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="comment">// instead of an argument type convertable to a target type.</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment">// The syntax for using ImplicitCast_ is the same as for static_cast:</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment">// ImplicitCast_&lt;ToType&gt;(expr)</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment">// ImplicitCast_ would have been part of the C++ standard library,</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="comment">// but the proposal was submitted too late. It will probably make</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;<span class="comment">// its way into the language in the future.</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment">// This relatively ugly name is intentional. It prevents clashes with</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment">// similar functions users may have (e.g., implicit_cast). The internal</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="comment">// namespace alone is not enough because the function can be found by ADL.</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> To&gt;</div><div class="line"><a name="l01342"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a982df3f369643b175f79cda4048bc3b9"> 1342</a></span>&#160;<span class="keyword">inline</span> To <a class="code" href="namespacetesting_1_1internal.html#a982df3f369643b175f79cda4048bc3b9">ImplicitCast_</a>(To x) { <span class="keywordflow">return</span> x; }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment">// When you upcast (that is, cast a pointer from type Foo to type</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="comment">// SuperclassOfFoo), it&#39;s fine to use ImplicitCast_&lt;&gt;, since upcasts</span></div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;<span class="comment">// always succeed. When you downcast (that is, cast a pointer from</span></div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;<span class="comment">// type Foo to type SubclassOfFoo), static_cast&lt;&gt; isn&#39;t safe, because</span></div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;<span class="comment">// how do you know the pointer is really of type SubclassOfFoo? It</span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="comment">// could be a bare Foo, or of type DifferentSubclassOfFoo. Thus,</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;<span class="comment">// when you downcast, you should use this macro. In debug mode, we</span></div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;<span class="comment">// use dynamic_cast&lt;&gt; to double-check the downcast is legal (we die</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="comment">// if it&#39;s not). In normal mode, we do the efficient static_cast&lt;&gt;</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;<span class="comment">// instead. Thus, it&#39;s important to test in debug mode to make sure</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;<span class="comment">// the cast is legal!</span></div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;<span class="comment">// This is the only place in the code we should use dynamic_cast&lt;&gt;.</span></div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;<span class="comment">// In particular, you SHOULDN&#39;T be using dynamic_cast&lt;&gt; in order to</span></div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;<span class="comment">// do RTTI (eg code like this:</span></div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;<span class="comment">// if (dynamic_cast&lt;Subclass1&gt;(foo)) HandleASubclass1Object(foo);</span></div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;<span class="comment">// if (dynamic_cast&lt;Subclass2&gt;(foo)) HandleASubclass2Object(foo);</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;<span class="comment">// You should design the code some other way not to need this.</span></div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;<span class="comment">// This relatively ugly name is intentional. It prevents clashes with</span></div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;<span class="comment">// similar functions users may have (e.g., down_cast). The internal</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;<span class="comment">// namespace alone is not enough because the function can be found by ADL.</span></div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> To, <span class="keyword">typename</span> From&gt; <span class="comment">// use like this: DownCast_&lt;T*&gt;(foo);</span></div><div class="line"><a name="l01366"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a1a1a1aed3fe00908b8a45d5ab4a33665"> 1366</a></span>&#160;<span class="keyword">inline</span> To <a class="code" href="namespacetesting_1_1internal.html#a1a1a1aed3fe00908b8a45d5ab4a33665">DownCast_</a>(From* f) { <span class="comment">// so we only accept pointers</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="comment">// Ensures that To is a sub-type of From *. This test is here only</span></div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <span class="comment">// for compile-time type checking, and has no overhead in an</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="comment">// optimized build at run-time, as it will be optimized away</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="comment">// completely.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <a class="code" href="gtest_8h.html#a69b0cadb05bf2a1ef96151243c6b6241">GTEST_INTENTIONAL_CONST_COND_PUSH_</a>()</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">false</span>) {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <a class="code" href="gtest_8h.html#ad115e2c466f7e8a32f1cf23ef2e5f220">GTEST_INTENTIONAL_CONST_COND_POP_</a>()</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <span class="keyword">const</span> To to = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; ::testing::internal::ImplicitCast_&lt;From*&gt;(to);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;<span class="preprocessor">#if GTEST_HAS_RTTI</span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="comment">// RTTI: debug mode only!</span></div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(f == <span class="keyword">nullptr</span> || dynamic_cast&lt;To&gt;(f) != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>To<span class="keyword">&gt;</span>(f);</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;}</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;<span class="comment">// Downcasts the pointer of type Base to Derived.</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;<span class="comment">// Derived must be a subclass of Base. The parameter MUST</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;<span class="comment">// point to a class of type Derived, not any subclass of it.</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="comment">// When RTTI is available, the function performs a runtime</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;<span class="comment">// check to enforce this.</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Derived, <span class="keyword">class</span> Base&gt;</div><div class="line"><a name="l01391"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#abfe9bfb020d38aa4e0e12c001911b22b"> 1391</a></span>&#160;Derived* <a class="code" href="namespacetesting_1_1internal.html#abfe9bfb020d38aa4e0e12c001911b22b">CheckedDowncastToActualType</a>(Base* base) {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;<span class="preprocessor">#if GTEST_HAS_RTTI</span></div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(<span class="keyword">typeid</span>(*base) == <span class="keyword">typeid</span>(Derived));</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;<span class="preprocessor">#if GTEST_HAS_DOWNCAST_</span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; return ::down_cast&lt;Derived*&gt;(base);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="preprocessor">#elif GTEST_HAS_RTTI</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <span class="keywordflow">return</span> <span class="keyword">dynamic_cast&lt;</span>Derived*<span class="keyword">&gt;</span>(base); <span class="comment">// NOLINT</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Derived*<span class="keyword">&gt;</span>(base); <span class="comment">// Poor man&#39;s downcast.</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;}</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="preprocessor">#if GTEST_HAS_STREAM_REDIRECTION</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="comment">// Defines the stderr capturer:</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;<span class="comment">// CaptureStdout - starts capturing stdout.</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="comment">// GetCapturedStdout - stops capturing stdout and returns the captured string.</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment">// CaptureStderr - starts capturing stderr.</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="comment">// GetCapturedStderr - stops capturing stderr and returns the captured string.</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#acba06d4f0343dec407738ba5544af990">CaptureStdout</a>();</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#aed657219a9856a8d249a3230de0c54ce">GetCapturedStdout</a>();</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a8ec00d458d0d442bd64af7b5f9c22dda">CaptureStderr</a>();</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a374156401da17704099d0c33fa53adfb">GetCapturedStderr</a>();</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STREAM_REDIRECTION</span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;<span class="comment">// Returns the size (in bytes) of a file.</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">size_t</span> <a class="code" href="namespacetesting_1_1internal.html#a40bcfd87e26aae36e0cc51e5db64fd89">GetFileSize</a>(FILE* file);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment">// Reads the entire content of a file as a string.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#ab81b0af2a0131ea54dc11de00d5e6e51">ReadEntireFile</a>(FILE* file);</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment">// All command line arguments.</span></div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> std::vector&lt;std::string&gt; <a class="code" href="namespacetesting_1_1internal.html#a8d8ed3acadedd9c0db28d35a188973ea">GetArgvs</a>();</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;<span class="preprocessor">#if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;std::vector&lt;std::string&gt; GetInjectableArgvs();</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;<span class="comment">// Deprecated: pass the args vector by value instead.</span></div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="keywordtype">void</span> SetInjectableArgvs(<span class="keyword">const</span> std::vector&lt;std::string&gt;* new_argvs);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="keywordtype">void</span> SetInjectableArgvs(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; new_argvs);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="keywordtype">void</span> SetInjectableArgvs(<span class="keyword">const</span> std::vector&lt; ::string&gt;&amp; new_argvs);</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="keywordtype">void</span> ClearInjectableArgvs();</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;<span class="comment">// Defines synchronization primitives.</span></div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="preprocessor">#if GTEST_IS_THREADSAFE</span></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;<span class="preprocessor"># if GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;<span class="comment">// Sleeps for (roughly) n milliseconds. This function is only for testing</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;<span class="comment">// Google Test&#39;s own constructs. Don&#39;t use it in user tests, either</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;<span class="comment">// directly or indirectly.</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> SleepMilliseconds(<span class="keywordtype">int</span> n) {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; <span class="keyword">const</span> timespec time = {</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; 0, <span class="comment">// 0 seconds.</span></div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; n * 1000L * 1000L, <span class="comment">// And n ms.</span></div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; };</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; nanosleep(&amp;time, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;}</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;<span class="preprocessor"># if GTEST_HAS_NOTIFICATION_</span></div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;<span class="comment">// Notification has already been imported into the namespace.</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;<span class="comment">// Nothing to do here.</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;<span class="preprocessor"># elif GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;<span class="comment">// Allows a controller thread to pause execution of newly created</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="comment">// threads until notified. Instances of this class must be created</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;<span class="comment">// and destroyed in the controller thread.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment">// This class is only for testing Google Test&#39;s own constructs. Do not</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment">// use it in user tests, either directly or indirectly.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;<span class="keyword">class </span>Notification {</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; Notification() : notified_(false) {</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_mutex_init(&amp;mutex_, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; }</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; ~Notification() {</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; pthread_mutex_destroy(&amp;mutex_);</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; }</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <span class="comment">// Notifies all threads created with this notification to start. Must</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <span class="comment">// be called from the controller thread.</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordtype">void</span> Notify() {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; pthread_mutex_lock(&amp;mutex_);</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; notified_ = <span class="keyword">true</span>;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; pthread_mutex_unlock(&amp;mutex_);</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; <span class="comment">// Blocks until the controller thread notifies. Must be called from a test</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <span class="comment">// thread.</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <span class="keywordtype">void</span> WaitForNotification() {</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <span class="keywordflow">for</span> (;;) {</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; pthread_mutex_lock(&amp;mutex_);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> notified = notified_;</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; pthread_mutex_unlock(&amp;mutex_);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordflow">if</span> (notified)</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; SleepMilliseconds(10);</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; }</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; pthread_mutex_t mutex_;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="keywordtype">bool</span> notified_;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(Notification);</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;};</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;<span class="preprocessor"># elif GTEST_OS_WINDOWS &amp;&amp; !GTEST_OS_WINDOWS_PHONE &amp;&amp; !GTEST_OS_WINDOWS_RT</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> SleepMilliseconds(<span class="keywordtype">int</span> n);</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;<span class="comment">// Provides leak-safe Windows kernel handle ownership.</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;<span class="comment">// Used in death tests and in threading support.</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AutoHandle {</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="comment">// Assume that Win32 HANDLE type is equivalent to void*. Doing so allows us to</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="comment">// avoid including &lt;windows.h&gt; in this header file. Including &lt;windows.h&gt; is</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <span class="comment">// undesirable because it defines a lot of symbols and macros that tend to</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="comment">// conflict with client code. This assumption is verified by</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="comment">// WindowsTypesTest.HANDLEIsVoidStar.</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">void</span>* Handle;</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; AutoHandle();</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keyword">explicit</span> AutoHandle(Handle handle);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; ~AutoHandle();</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; Handle Get() <span class="keyword">const</span>;</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="keywordtype">void</span> Reset();</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="keywordtype">void</span> Reset(Handle handle);</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="comment">// Returns true iff the handle is a valid handle object that can be closed.</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keywordtype">bool</span> IsCloseable() <span class="keyword">const</span>;</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; Handle handle_;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(AutoHandle);</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;};</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;<span class="comment">// Allows a controller thread to pause execution of newly created</span></div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;<span class="comment">// threads until notified. Instances of this class must be created</span></div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;<span class="comment">// and destroyed in the controller thread.</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;<span class="comment">// This class is only for testing Google Test&#39;s own constructs. Do not</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;<span class="comment">// use it in user tests, either directly or indirectly.</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Notification {</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; Notification();</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="keywordtype">void</span> Notify();</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <span class="keywordtype">void</span> WaitForNotification();</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; AutoHandle event_;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(Notification);</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;};</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_NOTIFICATION_</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;<span class="comment">// On MinGW, we can have both GTEST_OS_WINDOWS and GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;<span class="comment">// defined, but we don&#39;t want to use MinGW&#39;s pthreads implementation, which</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;<span class="comment">// has conformance problems with some versions of the POSIX standard.</span></div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="preprocessor"># if GTEST_HAS_PTHREAD &amp;&amp; !GTEST_OS_WINDOWS_MINGW</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;<span class="comment">// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.</span></div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="comment">// Consequently, it cannot select a correct instantiation of ThreadWithParam</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment">// in order to call its Run(). Introducing ThreadWithParamBase as a</span></div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;<span class="comment">// non-templated base class for ThreadWithParam allows us to bypass this</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;<span class="comment">// problem.</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;<span class="keyword">class </span>ThreadWithParamBase {</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="keyword">virtual</span> ~ThreadWithParamBase() {}</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Run() = 0;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;};</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;<span class="comment">// pthread_create() accepts a pointer to a function type with the C linkage.</span></div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;<span class="comment">// According to the Standard (7.5/1), function types with different linkages</span></div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;<span class="comment">// are different even if they are otherwise identical. Some compilers (for</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;<span class="comment">// example, SunStudio) treat them as different types. Since class methods</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;<span class="comment">// cannot be defined with C-linkage we need to define a free C-function to</span></div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;<span class="comment">// pass into pthread_create().</span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>* ThreadFuncWithCLinkage(<span class="keywordtype">void</span>* thread) {</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="keyword">static_cast&lt;</span>ThreadWithParamBase*<span class="keyword">&gt;</span>(thread)-&gt;Run();</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;}</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;<span class="comment">// Helper class for testing Google Test&#39;s multi-threading constructs.</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="comment">// To use it, write:</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;<span class="comment">// void ThreadFunc(int param) { /* Do things with param */ }</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;<span class="comment">// Notification thread_can_start;</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;<span class="comment">// // The thread_can_start parameter is optional; you can supply NULL.</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;<span class="comment">// ThreadWithParam&lt;int&gt; thread(&amp;ThreadFunc, 5, &amp;thread_can_start);</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;<span class="comment">// thread_can_start.Notify();</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;<span class="comment">// These classes are only for testing Google Test&#39;s own constructs. Do</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;<span class="comment">// not use them in user tests, either directly or indirectly.</span></div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<span class="keyword">class </span>ThreadWithParam : <span class="keyword">public</span> ThreadWithParamBase {</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">void</span> UserThreadFunc(T);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; : func_(func),</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; param_(param),</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; thread_can_start_(thread_can_start),</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; finished_(false) {</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; ThreadWithParamBase* <span class="keyword">const</span> base = <span class="keyword">this</span>;</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <span class="comment">// The thread can be created only after all fields except thread_</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="comment">// have been initialized.</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; pthread_create(&amp;thread_, <span class="keyword">nullptr</span>, &amp;ThreadFuncWithCLinkage, base));</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; ~ThreadWithParam()<span class="keyword"> override </span>{ Join(); }</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="keywordtype">void</span> Join() {</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordflow">if</span> (!finished_) {</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_join(thread_, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; finished_ = <span class="keyword">true</span>;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; }</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; }</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <span class="keywordtype">void</span> Run()<span class="keyword"> override </span>{</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; <span class="keywordflow">if</span> (thread_can_start_ != <span class="keyword">nullptr</span>) thread_can_start_-&gt;WaitForNotification();</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; func_(param_);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; }</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; UserThreadFunc* <span class="keyword">const</span> func_; <span class="comment">// User-supplied thread function.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keyword">const</span> T param_; <span class="comment">// User-supplied parameter to the thread function.</span></div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; <span class="comment">// When non-NULL, used to block execution until the controller thread</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="comment">// notifies.</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; Notification* <span class="keyword">const</span> thread_can_start_;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <span class="keywordtype">bool</span> finished_; <span class="comment">// true iff we know that the thread function has finished.</span></div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; pthread_t thread_; <span class="comment">// The native thread object.</span></div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ThreadWithParam);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;};</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;<span class="preprocessor"># endif // !GTEST_OS_WINDOWS &amp;&amp; GTEST_HAS_PTHREAD ||</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="comment">// GTEST_HAS_MUTEX_AND_THREAD_LOCAL_</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;<span class="preprocessor"># if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;<span class="comment">// Mutex and ThreadLocal have already been imported into the namespace.</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;<span class="comment">// Nothing to do here.</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="preprocessor"># elif GTEST_OS_WINDOWS &amp;&amp; !GTEST_OS_WINDOWS_PHONE &amp;&amp; !GTEST_OS_WINDOWS_RT</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="comment">// Mutex implements mutex on Windows platforms. It is used in conjunction</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;<span class="comment">// with class MutexLock:</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment">// Mutex mutex;</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment">// MutexLock lock(&amp;mutex); // Acquires the mutex and releases it at the</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="comment">// // end of the current scope.</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;<span class="comment">// A static Mutex *must* be defined or declared using one of the following</span></div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;<span class="comment">// macros:</span></div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;<span class="comment">// GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex);</span></div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;<span class="comment">// GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex);</span></div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="comment">// (A non-static Mutex is defined/declared in the usual way).</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Mutex {</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keyword">enum</span> MutexType { kStatic = 0, kDynamic = 1 };</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="comment">// We rely on kStaticMutex being 0 as it is to what the linker initializes</span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="comment">// type_ in static mutexes. critical_section_ will be initialized lazily</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <span class="comment">// in ThreadSafeLazyInit().</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <span class="keyword">enum</span> StaticConstructorSelector { kStaticMutex = 0 };</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <span class="comment">// This constructor intentionally does nothing. It relies on type_ being</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="comment">// statically initialized to 0 (effectively setting it to kStatic) and on</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; <span class="comment">// ThreadSafeLazyInit() to lazily initialize the rest of the members.</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keyword">explicit</span> Mutex(StaticConstructorSelector <span class="comment">/*dummy*/</span>) {}</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; Mutex();</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; ~Mutex();</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keywordtype">void</span> Lock();</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="keywordtype">void</span> Unlock();</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="comment">// Does nothing if the current thread holds the mutex. Otherwise, crashes</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="comment">// with high probability.</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="keywordtype">void</span> AssertHeld();</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="comment">// Initializes owner_thread_id_ and critical_section_ in static mutexes.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <span class="keywordtype">void</span> ThreadSafeLazyInit();</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="comment">// Per https://blogs.msdn.microsoft.com/oldnewthing/20040223-00/?p=40503,</span></div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <span class="comment">// we assume that 0 is an invalid value for thread IDs.</span></div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> owner_thread_id_;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; <span class="comment">// For static mutexes, we rely on these members being initialized to zeros</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; <span class="comment">// by the linker.</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; MutexType type_;</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; <span class="keywordtype">long</span> critical_section_init_phase_; <span class="comment">// NOLINT</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; GTEST_CRITICAL_SECTION* critical_section_;</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(Mutex);</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;};</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;<span class="preprocessor"># define GTEST_DECLARE_STATIC_MUTEX_(mutex) \</span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;<span class="preprocessor"> extern ::testing::internal::Mutex mutex</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="preprocessor"># define GTEST_DEFINE_STATIC_MUTEX_(mutex) \</span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="preprocessor"> ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex)</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;<span class="comment">// We cannot name this class MutexLock because the ctor declaration would</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;<span class="comment">// conflict with a macro named MutexLock, which is defined on some</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;<span class="comment">// platforms. That macro is used as a defensive measure to prevent against</span></div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="comment">// inadvertent misuses of MutexLock like &quot;MutexLock(&amp;mu)&quot; rather than</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment">// &quot;MutexLock l(&amp;mu)&quot;. Hence the typedef trick below.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="keyword">class </span>GTestMutexLock {</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>(Mutex* mutex)</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; : mutex_(mutex) { mutex_-&gt;Lock(); }</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>() { mutex_-&gt;Unlock(); }</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; Mutex* <span class="keyword">const</span> mutex_;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>);</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;};</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;<span class="keyword">typedef</span> GTestMutexLock <a class="code" href="namespacetesting_1_1internal.html#a08b187c6cc4e28400aadf9a32fccc8de">MutexLock</a>;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;<span class="comment">// Base class for ValueHolder&lt;T&gt;. Allows a caller to hold and delete a value</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;<span class="comment">// without knowing its type.</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;<span class="keyword">class </span>ThreadLocalValueHolderBase {</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <span class="keyword">virtual</span> ~ThreadLocalValueHolderBase() {}</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;};</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;<span class="comment">// Provides a way for a thread to send notifications to a ThreadLocal</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;<span class="comment">// regardless of its parameter type.</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;<span class="keyword">class </span>ThreadLocalBase {</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="comment">// Creates a new ValueHolder&lt;T&gt; object holding a default value passed to</span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; <span class="comment">// this ThreadLocal&lt;T&gt;&#39;s constructor and returns it. It is the caller&#39;s</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; <span class="comment">// responsibility not to call this when the ThreadLocal&lt;T&gt; instance already</span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; <span class="comment">// has a value on the current thread.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <span class="keyword">virtual</span> ThreadLocalValueHolderBase* NewValueForCurrentThread() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; ThreadLocalBase() {}</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keyword">virtual</span> ~ThreadLocalBase() {}</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ThreadLocalBase);</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;};</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment">// Maps a thread to a set of ThreadLocals that have values instantiated on that</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment">// thread and notifies them when the thread exits. A ThreadLocal instance is</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment">// expected to persist until all threads it has values on have terminated.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> ThreadLocalRegistry {</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="comment">// Registers thread_local_instance as having value on the current thread.</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="comment">// Returns a value that can be used to identify the thread from other threads.</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <span class="keyword">static</span> ThreadLocalValueHolderBase* GetValueOnCurrentThread(</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <span class="keyword">const</span> ThreadLocalBase* thread_local_instance);</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="comment">// Invoked when a ThreadLocal instance is destroyed.</span></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> OnThreadLocalDestroyed(</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="keyword">const</span> ThreadLocalBase* thread_local_instance);</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;};</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> ThreadWithParamBase {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="keywordtype">void</span> Join();</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keyword">class </span>Runnable {</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; <span class="keyword">virtual</span> ~Runnable() {}</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Run() = 0;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; };</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160; ThreadWithParamBase(Runnable *runnable, Notification* thread_can_start);</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <span class="keyword">virtual</span> ~ThreadWithParamBase();</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; AutoHandle thread_;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;};</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;<span class="comment">// Helper class for testing Google Test&#39;s multi-threading constructs.</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<span class="keyword">class </span>ThreadWithParam : <span class="keyword">public</span> ThreadWithParamBase {</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">void</span> UserThreadFunc(T);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) {</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; }</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <span class="keyword">virtual</span> ~ThreadWithParam() {}</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; <span class="keyword">class </span>RunnableImpl : <span class="keyword">public</span> Runnable {</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; RunnableImpl(UserThreadFunc* func, T param)</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; : func_(func),</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; param_(param) {</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; }</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <span class="keyword">virtual</span> ~RunnableImpl() {}</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Run() {</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; func_(param_);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; }</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160; UserThreadFunc* <span class="keyword">const</span> func_;</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160; <span class="keyword">const</span> T param_;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(RunnableImpl);</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; };</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ThreadWithParam);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;};</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment">// Implements thread-local storage on Windows systems.</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="comment">// // Thread 1</span></div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;<span class="comment">// ThreadLocal&lt;int&gt; tl(100); // 100 is the default value for each thread.</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment">// // Thread 2</span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;<span class="comment">// tl.set(150); // Changes the value for thread 2 only.</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="comment">// EXPECT_EQ(150, tl.get());</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;<span class="comment">// // Thread 1</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;<span class="comment">// EXPECT_EQ(100, tl.get()); // In thread 1, tl has the original value.</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment">// tl.set(200);</span></div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;<span class="comment">// EXPECT_EQ(200, tl.get());</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="comment">// The template type argument T must have a public copy constructor.</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;<span class="comment">// In addition, the default ThreadLocal constructor requires T to have</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;<span class="comment">// a public default constructor.</span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;<span class="comment">// The users of a TheadLocal instance have to make sure that all but one</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="comment">// threads (including the main one) using that instance have exited before</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment">// destroying it. Otherwise, the per-thread objects managed for them by the</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<span class="comment">// ThreadLocal instance are not guaranteed to be destroyed on all platforms.</span></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;<span class="comment">// Google Test only uses global ThreadLocal objects. That means they</span></div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;<span class="comment">// will die after main() has returned. Therefore, no per-thread</span></div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;<span class="comment">// object managed by Google Test will be leaked as long as all threads</span></div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;<span class="comment">// using Google Test have exited when main() returns.</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;<span class="keyword">class </span>ThreadLocal : <span class="keyword">public</span> ThreadLocalBase {</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">ThreadLocal</a>() : default_factory_(new DefaultValueHolderFactory()) {}</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">ThreadLocal</a>(<span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; : default_factory_(new InstanceValueHolderFactory(value)) {}</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">ThreadLocal</a>() { ThreadLocalRegistry::OnThreadLocalDestroyed(<span class="keyword">this</span>); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; T* <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>() { <span class="keywordflow">return</span> GetOrCreateValue(); }</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <span class="keyword">const</span> T* <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> GetOrCreateValue(); }</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keyword">const</span> T&amp; <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> *<a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>(); }</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keyword">const</span> T&amp; value) { *<a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>() = value; }</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; <span class="comment">// Holds a value of T. Can be deleted via its base class without the caller</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; <span class="comment">// knowing the type of T.</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; <span class="keyword">class </span>ValueHolder : <span class="keyword">public</span> ThreadLocalValueHolderBase {</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; ValueHolder() : value_() {}</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="keyword">explicit</span> ValueHolder(<span class="keyword">const</span> T&amp; value) : value_(value) {}</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; T* <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>() { <span class="keywordflow">return</span> &amp;value_; }</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; T value_;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ValueHolder);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; };</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; T* GetOrCreateValue()<span class="keyword"> const </span>{</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>ValueHolder*<span class="keyword">&gt;</span>(</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; ThreadLocalRegistry::GetValueOnCurrentThread(<span class="keyword">this</span>))-&gt;<a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>();</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; }</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keyword">virtual</span> ThreadLocalValueHolderBase* NewValueForCurrentThread()<span class="keyword"> const </span>{</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; <span class="keywordflow">return</span> default_factory_-&gt;MakeNewHolder();</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; }</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; <span class="keyword">class </span>ValueHolderFactory {</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; ValueHolderFactory() {}</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="keyword">virtual</span> ~ValueHolderFactory() {}</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ValueHolderFactory);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; };</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <span class="keyword">class </span>DefaultValueHolderFactory : <span class="keyword">public</span> ValueHolderFactory {</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; DefaultValueHolderFactory() {}</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> ValueHolder(); }</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(DefaultValueHolderFactory);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; };</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; <span class="keyword">class </span>InstanceValueHolderFactory : <span class="keyword">public</span> ValueHolderFactory {</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; <span class="keyword">explicit</span> InstanceValueHolderFactory(<span class="keyword">const</span> T&amp; value) : value_(value) {}</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder()<span class="keyword"> const </span>{</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> ValueHolder(value_);</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; }</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; <span class="keyword">const</span> T value_; <span class="comment">// The value for each thread.</span></div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(InstanceValueHolderFactory);</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; };</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; std::unique_ptr&lt;ValueHolderFactory&gt; default_factory_;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">ThreadLocal</a>);</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;};</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;<span class="preprocessor"># elif GTEST_HAS_PTHREAD</span></div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;<span class="comment">// MutexBase and Mutex implement mutex on pthreads-based platforms.</span></div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;<span class="keyword">class </span>MutexBase {</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; <span class="comment">// Acquires this mutex.</span></div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; <span class="keywordtype">void</span> Lock() {</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_mutex_lock(&amp;mutex_));</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; owner_ = pthread_self();</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; has_owner_ = <span class="keyword">true</span>;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; }</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; <span class="comment">// Releases this mutex.</span></div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; <span class="keywordtype">void</span> Unlock() {</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; <span class="comment">// Since the lock is being released the owner_ field should no longer be</span></div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="comment">// considered valid. We don&#39;t protect writing to has_owner_ here, as it&#39;s</span></div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; <span class="comment">// the caller&#39;s responsibility to ensure that the current thread holds the</span></div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="comment">// mutex when this is called.</span></div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; has_owner_ = <span class="keyword">false</span>;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_mutex_unlock(&amp;mutex_));</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; }</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <span class="comment">// Does nothing if the current thread holds the mutex. Otherwise, crashes</span></div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="comment">// with high probability.</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordtype">void</span> AssertHeld()<span class="keyword"> const </span>{</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(has_owner_ &amp;&amp; pthread_equal(owner_, pthread_self()))</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The current thread is not holding the mutex @&quot;</span> &lt;&lt; <span class="keyword">this</span>;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; }</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="comment">// A static mutex may be used before main() is entered. It may even</span></div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; <span class="comment">// be used before the dynamic initialization stage. Therefore we</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; <span class="comment">// must be able to initialize a static mutex object at link time.</span></div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; <span class="comment">// This means MutexBase has to be a POD and its member variables</span></div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <span class="comment">// have to be public.</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; pthread_mutex_t mutex_; <span class="comment">// The underlying pthread mutex.</span></div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <span class="comment">// has_owner_ indicates whether the owner_ field below contains a valid thread</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; <span class="comment">// ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All</span></div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; <span class="comment">// accesses to the owner_ field should be protected by a check of this field.</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="comment">// An alternative might be to memset() owner_ to all zeros, but there&#39;s no</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <span class="comment">// guarantee that a zero&#39;d pthread_t is necessarily invalid or even different</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; <span class="comment">// from pthread_self().</span></div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="keywordtype">bool</span> has_owner_;</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; pthread_t owner_; <span class="comment">// The thread holding the mutex.</span></div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;};</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;<span class="comment">// Forward-declares a static mutex.</span></div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;<span class="preprocessor"># define GTEST_DECLARE_STATIC_MUTEX_(mutex) \</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;<span class="preprocessor"> extern ::testing::internal::MutexBase mutex</span></div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;<span class="comment">// Defines and statically (i.e. at link time) initializes a static mutex.</span></div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;<span class="comment">// The initialization list here does not explicitly initialize each field,</span></div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;<span class="comment">// instead relying on default initialization for the unspecified fields. In</span></div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;<span class="comment">// particular, the owner_ field (a pthread_t) is not explicitly initialized.</span></div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;<span class="comment">// This allows initialization to work whether pthread_t is a scalar or struct.</span></div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;<span class="comment">// The flag -Wmissing-field-initializers must not be specified for this to work.</span></div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;<span class="preprocessor">#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \</span></div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;<span class="preprocessor"> ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0}</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;<span class="comment">// The Mutex class can only be used for mutexes created at runtime. It</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;<span class="comment">// shares its API with MutexBase otherwise.</span></div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;<span class="keyword">class </span>Mutex : <span class="keyword">public</span> MutexBase {</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e">Mutex</a>() {</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_mutex_init(&amp;mutex_, <span class="keyword">nullptr</span>));</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; has_owner_ = <span class="keyword">false</span>;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; }</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e">Mutex</a>() {</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_mutex_destroy(&amp;mutex_));</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; }</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e">Mutex</a>);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;};</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;<span class="comment">// We cannot name this class MutexLock because the ctor declaration would</span></div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;<span class="comment">// conflict with a macro named MutexLock, which is defined on some</span></div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;<span class="comment">// platforms. That macro is used as a defensive measure to prevent against</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;<span class="comment">// inadvertent misuses of MutexLock like &quot;MutexLock(&amp;mu)&quot; rather than</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;<span class="comment">// &quot;MutexLock l(&amp;mu)&quot;. Hence the typedef trick below.</span></div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;<span class="keyword">class </span>GTestMutexLock {</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>(MutexBase* mutex)</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; : mutex_(mutex) { mutex_-&gt;Lock(); }</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>() { mutex_-&gt;Unlock(); }</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; MutexBase* <span class="keyword">const</span> mutex_;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>);</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;};</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;<span class="keyword">typedef</span> GTestMutexLock <a class="code" href="namespacetesting_1_1internal.html#a08b187c6cc4e28400aadf9a32fccc8de">MutexLock</a>;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;<span class="comment">// Helpers for ThreadLocal.</span></div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;<span class="comment">// pthread_key_create() requires DeleteThreadLocalValue() to have</span></div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;<span class="comment">// C-linkage. Therefore it cannot be templatized to access</span></div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;<span class="comment">// ThreadLocal&lt;T&gt;. Hence the need for class</span></div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;<span class="comment">// ThreadLocalValueHolderBase.</span></div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;<span class="keyword">class </span>ThreadLocalValueHolderBase {</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keyword">virtual</span> ~ThreadLocalValueHolderBase() {}</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;};</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;<span class="comment">// Called by pthread to delete thread-local data stored by</span></div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;<span class="comment">// pthread_setspecific().</span></div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> DeleteThreadLocalValue(<span class="keywordtype">void</span>* value_holder) {</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="keyword">delete</span> <span class="keyword">static_cast&lt;</span>ThreadLocalValueHolderBase*<span class="keyword">&gt;</span>(value_holder);</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;}</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;<span class="comment">// Implements thread-local storage on pthreads-based systems.</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> ThreadLocal {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; ThreadLocal()</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; : key_(CreateKey()), default_factory_(new DefaultValueHolderFactory()) {}</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; <span class="keyword">explicit</span> ThreadLocal(<span class="keyword">const</span> T&amp; value)</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; : key_(CreateKey()),</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; default_factory_(new InstanceValueHolderFactory(value)) {}</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; ~ThreadLocal() {</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <span class="comment">// Destroys the managed object for the current thread, if any.</span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; DeleteThreadLocalValue(pthread_getspecific(key_));</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; <span class="comment">// Releases resources associated with the key. This will *not*</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <span class="comment">// delete managed objects for other threads.</span></div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_key_delete(key_));</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; }</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; T* pointer() { <span class="keywordflow">return</span> GetOrCreateValue(); }</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; <span class="keyword">const</span> T* pointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> GetOrCreateValue(); }</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; <span class="keyword">const</span> T&amp; <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> *pointer(); }</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keyword">const</span> T&amp; value) { *pointer() = value; }</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; <span class="comment">// Holds a value of type T.</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; <span class="keyword">class </span>ValueHolder : <span class="keyword">public</span> ThreadLocalValueHolderBase {</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; ValueHolder() : value_() {}</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; <span class="keyword">explicit</span> ValueHolder(<span class="keyword">const</span> T&amp; value) : value_(value) {}</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; T* pointer() { <span class="keywordflow">return</span> &amp;value_; }</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; T value_;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ValueHolder);</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; };</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; <span class="keyword">static</span> pthread_key_t CreateKey() {</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; pthread_key_t key;</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; <span class="comment">// When a thread exits, DeleteThreadLocalValue() will be called on</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; <span class="comment">// the object managed for that thread.</span></div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; pthread_key_create(&amp;key, &amp;DeleteThreadLocalValue));</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; <span class="keywordflow">return</span> key;</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; }</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; T* GetOrCreateValue()<span class="keyword"> const </span>{</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; ThreadLocalValueHolderBase* <span class="keyword">const</span> holder =</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <span class="keyword">static_cast&lt;</span>ThreadLocalValueHolderBase*<span class="keyword">&gt;</span>(pthread_getspecific(key_));</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; <span class="keywordflow">if</span> (holder != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; <span class="keywordflow">return</span> CheckedDowncastToActualType&lt;ValueHolder&gt;(holder)-&gt;pointer();</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; }</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; ValueHolder* <span class="keyword">const</span> new_holder = default_factory_-&gt;MakeNewHolder();</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; ThreadLocalValueHolderBase* <span class="keyword">const</span> holder_base = new_holder;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <a class="code" href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a>(pthread_setspecific(key_, holder_base));</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; <span class="keywordflow">return</span> new_holder-&gt;pointer();</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; }</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; <span class="keyword">class </span>ValueHolderFactory {</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; ValueHolderFactory() {}</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <span class="keyword">virtual</span> ~ValueHolderFactory() {}</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ValueHolderFactory);</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; };</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keyword">class </span>DefaultValueHolderFactory : <span class="keyword">public</span> ValueHolderFactory {</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; DefaultValueHolderFactory() {}</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> ValueHolder(); }</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(DefaultValueHolderFactory);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; };</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; <span class="keyword">class </span>InstanceValueHolderFactory : <span class="keyword">public</span> ValueHolderFactory {</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; <span class="keyword">explicit</span> InstanceValueHolderFactory(<span class="keyword">const</span> T&amp; value) : value_(value) {}</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; <span class="keyword">virtual</span> ValueHolder* MakeNewHolder()<span class="keyword"> const </span>{</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> ValueHolder(value_);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; }</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; <span class="keyword">const</span> T value_; <span class="comment">// The value for each thread.</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(InstanceValueHolderFactory);</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; };</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; <span class="comment">// A key pthreads uses for looking up per-thread values.</span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="keyword">const</span> pthread_key_t key_;</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; std::unique_ptr&lt;ValueHolderFactory&gt; default_factory_;</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ThreadLocal);</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;};</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="preprocessor">#else // GTEST_IS_THREADSAFE</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;<span class="comment">// A dummy implementation of synchronization primitives (mutex, lock,</span></div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;<span class="comment">// and thread-local variable). Necessary for compiling Google Test where</span></div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;<span class="comment">// mutex is not supported - using Google Test in multiple threads is not</span></div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;<span class="comment">// supported on such platforms.</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;</div><div class="line"><a name="l02139"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_mutex.html"> 2139</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_mutex.html">Mutex</a> {</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02141"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e"> 2141</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e">Mutex</a>() {}</div><div class="line"><a name="l02142"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_mutex.html#ae7e2191886c00182176b23c4f4d049f8"> 2142</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_mutex.html#ae7e2191886c00182176b23c4f4d049f8">Lock</a>() {}</div><div class="line"><a name="l02143"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_mutex.html#a315188055de1be98884519ad84eff2e6"> 2143</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_mutex.html#a315188055de1be98884519ad84eff2e6">Unlock</a>() {}</div><div class="line"><a name="l02144"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_mutex.html#af45bf1660ac4110338a02a8680b2f486"> 2144</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_mutex.html#af45bf1660ac4110338a02a8680b2f486">AssertHeld</a>()<span class="keyword"> const </span>{}</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;};</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;</div><div class="line"><a name="l02147"></a><span class="lineno"><a class="line" href="gtest_8h.html#af0970cdea09f16dbb1dbfccdaa693eeb"> 2147</a></span>&#160;<span class="preprocessor"># define GTEST_DECLARE_STATIC_MUTEX_(mutex) \</span></div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;<span class="preprocessor"> extern ::testing::internal::Mutex mutex</span></div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;</div><div class="line"><a name="l02150"></a><span class="lineno"><a class="line" href="gtest_8h.html#a85d5cd679fdbe87383e7dfd1c6651eaa"> 2150</a></span>&#160;<span class="preprocessor"># define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex</span></div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="comment">// We cannot name this class MutexLock because the ctor declaration would</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;<span class="comment">// conflict with a macro named MutexLock, which is defined on some</span></div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;<span class="comment">// platforms. That macro is used as a defensive measure to prevent against</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="comment">// inadvertent misuses of MutexLock like &quot;MutexLock(&amp;mu)&quot; rather than</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;<span class="comment">// &quot;MutexLock l(&amp;mu)&quot;. Hence the typedef trick below.</span></div><div class="line"><a name="l02157"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html"> 2157</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html">GTestMutexLock</a> {</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02159"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26"> 2159</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">GTestMutexLock</a>(<a class="code" href="classtesting_1_1internal_1_1_mutex.html">Mutex</a>*) {} <span class="comment">// NOLINT</span></div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;};</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;</div><div class="line"><a name="l02162"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a08b187c6cc4e28400aadf9a32fccc8de"> 2162</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_g_test_mutex_lock.html">GTestMutexLock</a> <a class="code" href="namespacetesting_1_1internal.html#a08b187c6cc4e28400aadf9a32fccc8de">MutexLock</a>;</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02165"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html"> 2165</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1internal_1_1_thread_local.html">ThreadLocal</a> {</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02167"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5"> 2167</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">ThreadLocal</a>() : value_() {}</div><div class="line"><a name="l02168"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#a85610bdfdbc93a4c56215e0aad7da870"> 2168</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a85610bdfdbc93a4c56215e0aad7da870">ThreadLocal</a>(<span class="keyword">const</span> T&amp; value) : value_(value) {}</div><div class="line"><a name="l02169"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858"> 2169</a></span>&#160; T* <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">pointer</a>() { <span class="keywordflow">return</span> &amp;value_; }</div><div class="line"><a name="l02170"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#a57e45bb60e3cd94abb04fa449e9f0367"> 2170</a></span>&#160; <span class="keyword">const</span> T* <a class="code" href="classtesting_1_1internal_1_1_thread_local.html#a57e45bb60e3cd94abb04fa449e9f0367">pointer</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;value_; }</div><div class="line"><a name="l02171"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#ac56aeb97991824979bf192c63d1466f8"> 2171</a></span>&#160; <span class="keyword">const</span> T&amp; <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> value_; }</div><div class="line"><a name="l02172"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_thread_local.html#ab5ebc7ba07426cef7167afa2a7707eb4"> 2172</a></span>&#160; <span class="keywordtype">void</span> <span class="keyword">set</span>(<span class="keyword">const</span> T&amp; value) { value_ = value; }</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; T value_;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;};</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;<span class="preprocessor">#endif // GTEST_IS_THREADSAFE</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;<span class="comment">// Returns the number of threads running in the process, or 0 to indicate that</span></div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;<span class="comment">// we cannot detect it.</span></div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">size_t</span> <a class="code" href="namespacetesting_1_1internal.html#a8cbd8bf820517923d7f3c4477b3af5fa">GetThreadCount</a>();</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> <span class="keywordtype">bool</span>_value&gt;</div><div class="line"><a name="l02184"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1bool__constant.html"> 2184</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant</a> {</div><div class="line"><a name="l02185"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1bool__constant.html#aba6d09ecf7eecea6c93480f0d627a167"> 2185</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant&lt;bool_value&gt;</a> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html#aba6d09ecf7eecea6c93480f0d627a167">type</a>;</div><div class="line"><a name="l02186"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1bool__constant.html#a499fba6576296b04d99690a486424b32"> 2186</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html#a499fba6576296b04d99690a486424b32">value</a> = bool_value;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;};</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> <span class="keywordtype">bool</span>_value&gt; <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant&lt;bool_value&gt;::value</a>;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;</div><div class="line"><a name="l02190"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#abb1d0789f19bdde21affccbd1078b525"> 2190</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant&lt;false&gt;</a> <a class="code" href="namespacetesting_1_1internal.html#abb1d0789f19bdde21affccbd1078b525">false_type</a>;</div><div class="line"><a name="l02191"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a62f917c3424d8841de9b49b5ec28edb4"> 2191</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant&lt;true&gt;</a> <a class="code" href="namespacetesting_1_1internal.html#a62f917c3424d8841de9b49b5ec28edb4">true_type</a>;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l02194"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1is__same.html"> 2194</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1is__same.html">is_same</a> : <span class="keyword">public</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">false_type</a> {};</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02197"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1is__same_3_01_t_00_01_t_01_4.html"> 2197</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1is__same.html">is_same</a>&lt;T, T&gt; : <span class="keyword">public</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">true_type</a> {};</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Iterator&gt;</div><div class="line"><a name="l02200"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits.html"> 2200</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_iterator_traits.html">IteratorTraits</a> {</div><div class="line"><a name="l02201"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits.html#a29de4320a9c53ce438d3561b94e515bb"> 2201</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Iterator::value_type <a class="code" href="structtesting_1_1internal_1_1_iterator_traits.html#a29de4320a9c53ce438d3561b94e515bb">value_type</a>;</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;};</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02206"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits_3_01_t_01_5_01_4.html"> 2206</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_iterator_traits.html">IteratorTraits</a>&lt;T*&gt; {</div><div class="line"><a name="l02207"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits_3_01_t_01_5_01_4.html#a7e46869ed36cc5aea898e243d270a8be"> 2207</a></span>&#160; <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_iterator_traits_3_01_t_01_5_01_4.html#a7e46869ed36cc5aea898e243d270a8be">value_type</a>;</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;};</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02211"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits_3_01const_01_t_01_5_01_4.html"> 2211</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_iterator_traits.html">IteratorTraits</a>&lt;const T*&gt; {</div><div class="line"><a name="l02212"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_iterator_traits_3_01const_01_t_01_5_01_4.html#ae7c8867223e106f374b56a7dc4a85547"> 2212</a></span>&#160; <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_iterator_traits_3_01const_01_t_01_5_01_4.html#ae7c8867223e106f374b56a7dc4a85547">value_type</a>;</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;};</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="preprocessor"># define GTEST_PATH_SEP_ &quot;\\&quot;</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<span class="preprocessor"># define GTEST_HAS_ALT_PATH_SEP_ 1</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="comment">// The biggest signed integer type the compiler supports.</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;<span class="keyword">typedef</span> __int64 <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a>;</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02221"></a><span class="lineno"><a class="line" href="gtest_8h.html#afbb636e91bdd50267dbef11a50490b29"> 2221</a></span>&#160;<span class="preprocessor"># define GTEST_PATH_SEP_ &quot;/&quot;</span></div><div class="line"><a name="l02222"></a><span class="lineno"><a class="line" href="gtest_8h.html#acf0ee1851e6d342237bb64806ee1fd27"> 2222</a></span>&#160;<span class="preprocessor"># define GTEST_HAS_ALT_PATH_SEP_ 0</span></div><div class="line"><a name="l02223"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6"> 2223</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a>; <span class="comment">// NOLINT</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="comment">// Utilities for char.</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;<span class="comment">// isspace(int ch) and friends accept an unsigned char or EOF. char</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;<span class="comment">// may be signed, depending on the compiler (or compiler flags).</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="comment">// Therefore we need to cast a char to unsigned char before calling</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;<span class="comment">// isspace(), etc.</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;</div><div class="line"><a name="l02233"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aeb957087fd6bbf9db98ab7cd41b0c129"> 2233</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#aeb957087fd6bbf9db98ab7cd41b0c129">IsAlpha</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; <span class="keywordflow">return</span> isalpha(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;}</div><div class="line"><a name="l02236"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a83802e7f23324cd512232203662e1a98"> 2236</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a83802e7f23324cd512232203662e1a98">IsAlNum</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; <span class="keywordflow">return</span> isalnum(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;}</div><div class="line"><a name="l02239"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a4bd96b7fa6486802d33ddc217af55a39"> 2239</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a4bd96b7fa6486802d33ddc217af55a39">IsDigit</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; <span class="keywordflow">return</span> isdigit(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;}</div><div class="line"><a name="l02242"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ac26ce3883bc8919c27074975e958f3b7"> 2242</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#ac26ce3883bc8919c27074975e958f3b7">IsLower</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; <span class="keywordflow">return</span> islower(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;}</div><div class="line"><a name="l02245"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#af429e04f70f9c10f6aa76a5d1ccd389f"> 2245</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#af429e04f70f9c10f6aa76a5d1ccd389f">IsSpace</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; <span class="keywordflow">return</span> isspace(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;}</div><div class="line"><a name="l02248"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a84f3baa379fec6bf5947cb5165aa8cc9"> 2248</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a84f3baa379fec6bf5947cb5165aa8cc9">IsUpper</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; <span class="keywordflow">return</span> isupper(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;}</div><div class="line"><a name="l02251"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa234ef141278263fb143b616c74c86e7"> 2251</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#aa234ef141278263fb143b616c74c86e7">IsXDigit</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; <span class="keywordflow">return</span> isxdigit(static_cast&lt;unsigned char&gt;(ch)) != 0;</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;}</div><div class="line"><a name="l02254"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a6ab68a30f8291c09b2289c132bbe3b16"> 2254</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#aa234ef141278263fb143b616c74c86e7">IsXDigit</a>(<span class="keywordtype">wchar_t</span> ch) {</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> low_byte = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>(ch);</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; <span class="keywordflow">return</span> ch == low_byte &amp;&amp; isxdigit(low_byte) != 0;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;}</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;</div><div class="line"><a name="l02259"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ad9c627ef2a94245e3fd69e7ab3d49b42"> 2259</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">char</span> <a class="code" href="namespacetesting_1_1internal.html#ad9c627ef2a94245e3fd69e7ab3d49b42">ToLower</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(tolower(static_cast&lt;unsigned char&gt;(ch)));</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;}</div><div class="line"><a name="l02262"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ac1b876a8133895bd553d4780ecaa1e3a"> 2262</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">char</span> <a class="code" href="namespacetesting_1_1internal.html#ac1b876a8133895bd553d4780ecaa1e3a">ToUpper</a>(<span class="keywordtype">char</span> ch) {</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(toupper(static_cast&lt;unsigned char&gt;(ch)));</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;}</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;</div><div class="line"><a name="l02266"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6afda12e567c353e2e9b9c2e8cae14f"> 2266</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#aa6afda12e567c353e2e9b9c2e8cae14f">StripTrailingSpaces</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> str) {</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160; std::string::iterator it = str.end();</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160; <span class="keywordflow">while</span> (it != str.begin() &amp;&amp; <a class="code" href="namespacetesting_1_1internal.html#af429e04f70f9c10f6aa76a5d1ccd389f">IsSpace</a>(*--it))</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; it = str.erase(it);</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; <span class="keywordflow">return</span> str;</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;}</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;<span class="comment">// The testing::internal::posix namespace holds wrappers for common</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;<span class="comment">// POSIX functions. These wrappers hide the differences between</span></div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;<span class="comment">// Windows/MSVC and POSIX systems. Since some compilers define these</span></div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;<span class="comment">// standard functions as macros, the wrapper cannot have the same name</span></div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;<span class="comment">// as the wrapped function.</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;</div><div class="line"><a name="l02279"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html"> 2279</a></span>&#160;<span class="keyword">namespace </span>posix {</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;<span class="comment">// Functions with a different name on Windows.</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>_stat <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>;</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;<span class="preprocessor"># ifdef __BORLANDC__</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27">IsATTY</a>(<span class="keywordtype">int</span> fd) { <span class="keywordflow">return</span> isatty(fd); }</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a1ef2385a7f8e4c706054da35967e76bd">StrCaseCmp</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1, <span class="keyword">const</span> <span class="keywordtype">char</span>* s2) {</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; <span class="keywordflow">return</span> stricmp(s1, s2);</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;}</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8e352884793a65ae8be144676f1a9136">StrDup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* src) { <span class="keywordflow">return</span> strdup(src); }</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;<span class="preprocessor"># else // !__BORLANDC__</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;<span class="preprocessor"># if GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27">IsATTY</a>(<span class="keywordtype">int</span> <span class="comment">/* fd */</span>) { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27">IsATTY</a>(<span class="keywordtype">int</span> fd) { <span class="keywordflow">return</span> _isatty(fd); }</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;<span class="preprocessor"># endif // GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a1ef2385a7f8e4c706054da35967e76bd">StrCaseCmp</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1, <span class="keyword">const</span> <span class="keywordtype">char</span>* s2) {</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <span class="keywordflow">return</span> _stricmp(s1, s2);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;}</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8e352884793a65ae8be144676f1a9136">StrDup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* src) { <span class="keywordflow">return</span> _strdup(src); }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;<span class="preprocessor"># endif // __BORLANDC__</span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;<span class="preprocessor"># if GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a3117b067e1f942a2031e666953120ccc">FileNo</a>(FILE* file) { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(_fileno(file)); }</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;<span class="comment">// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this</span></div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;<span class="comment">// time and thus not defined there.</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a3117b067e1f942a2031e666953120ccc">FileNo</a>(FILE* file) { <span class="keywordflow">return</span> _fileno(file); }</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a2b87b7ff647a128614daf50667eb9304">Stat</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* path, <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>* buf) { <span class="keywordflow">return</span> _stat(path, buf); }</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#acbad5d4ea5b73fd1765f5f760642932a">RmDir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* dir) { <span class="keywordflow">return</span> _rmdir(dir); }</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#af0d04ed5baeed28353fa38742748a421">IsDir</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>&amp; st) {</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; <span class="keywordflow">return</span> (_S_IFDIR &amp; st.st_mode) != 0;</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;}</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<span class="preprocessor"># endif // GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;</div><div class="line"><a name="l02320"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb"> 2320</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>stat <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>;</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;</div><div class="line"><a name="l02322"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a3117b067e1f942a2031e666953120ccc"> 2322</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a3117b067e1f942a2031e666953120ccc">FileNo</a>(FILE* file) { <span class="keywordflow">return</span> fileno(file); }</div><div class="line"><a name="l02323"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27"> 2323</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27">IsATTY</a>(<span class="keywordtype">int</span> fd) { <span class="keywordflow">return</span> isatty(fd); }</div><div class="line"><a name="l02324"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a2b87b7ff647a128614daf50667eb9304"> 2324</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a2b87b7ff647a128614daf50667eb9304">Stat</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* path, <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>* buf) { <span class="keywordflow">return</span> stat(path, buf); }</div><div class="line"><a name="l02325"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a1ef2385a7f8e4c706054da35967e76bd"> 2325</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a1ef2385a7f8e4c706054da35967e76bd">StrCaseCmp</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1, <span class="keyword">const</span> <span class="keywordtype">char</span>* s2) {</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; <span class="keywordflow">return</span> strcasecmp(s1, s2);</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;}</div><div class="line"><a name="l02328"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a8e352884793a65ae8be144676f1a9136"> 2328</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8e352884793a65ae8be144676f1a9136">StrDup</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* src) { <span class="keywordflow">return</span> strdup(src); }</div><div class="line"><a name="l02329"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#acbad5d4ea5b73fd1765f5f760642932a"> 2329</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#acbad5d4ea5b73fd1765f5f760642932a">RmDir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* dir) { <span class="keywordflow">return</span> rmdir(dir); }</div><div class="line"><a name="l02330"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#af0d04ed5baeed28353fa38742748a421"> 2330</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#af0d04ed5baeed28353fa38742748a421">IsDir</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">StatStruct</a>&amp; st) { <span class="keywordflow">return</span> S_ISDIR(st.st_mode); }</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;<span class="comment">// Functions deprecated by MSVC 8.0.</span></div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<a class="code" href="gtest_8h.html#a5b130138db254deaf29dbe3dffa1a2a8">GTEST_DISABLE_MSC_DEPRECATED_PUSH_</a>()</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;</div><div class="line"><a name="l02338"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a36fca815713332e5c6dc92c98b6b2574"> 2338</a></span>&#160;inline const <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a36fca815713332e5c6dc92c98b6b2574">StrNCpy</a>(<span class="keywordtype">char</span>* dest, const <span class="keywordtype">char</span>* src, <span class="keywordtype">size_t</span> n) {</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; <span class="keywordflow">return</span> strncpy(dest, src, n);</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;}</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;<span class="comment">// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and</span></div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;<span class="comment">// StrError() aren&#39;t needed on Windows CE at this time and thus not</span></div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;<span class="comment">// defined there.</span></div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;<span class="preprocessor">#if !GTEST_OS_WINDOWS_MOBILE &amp;&amp; !GTEST_OS_WINDOWS_PHONE &amp;&amp; !GTEST_OS_WINDOWS_RT</span></div><div class="line"><a name="l02347"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a1ddc8a4fc6bb21da372307485591a212"> 2347</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a1ddc8a4fc6bb21da372307485591a212">ChDir</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* dir) { <span class="keywordflow">return</span> chdir(dir); }</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02349"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a4042201dcc4932641d484e7ddf94de7d"> 2349</a></span>&#160;<span class="keyword">inline</span> FILE* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a4042201dcc4932641d484e7ddf94de7d">FOpen</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* path, <span class="keyword">const</span> <span class="keywordtype">char</span>* mode) {</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; <span class="keywordflow">return</span> fopen(path, mode);</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;}</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;<span class="preprocessor">#if !GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02353"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a9ef6d089cdae03f9d9e0e6d379c40703"> 2353</a></span>&#160;<span class="keyword">inline</span> FILE *<a class="code" href="namespacetesting_1_1internal_1_1posix.html#a9ef6d089cdae03f9d9e0e6d379c40703">FReopen</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* path, <span class="keyword">const</span> <span class="keywordtype">char</span>* mode, FILE* stream) {</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; <span class="keywordflow">return</span> freopen(path, mode, stream);</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;}</div><div class="line"><a name="l02356"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#af7c268eba32d5a718b36b6b3801302e0"> 2356</a></span>&#160;<span class="keyword">inline</span> FILE* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#af7c268eba32d5a718b36b6b3801302e0">FDOpen</a>(<span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span>* mode) { <span class="keywordflow">return</span> fdopen(fd, mode); }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02358"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#af4beeaaa8d62916d5e3b644a1ddfbd6b"> 2358</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#af4beeaaa8d62916d5e3b644a1ddfbd6b">FClose</a>(FILE* fp) { <span class="keywordflow">return</span> fclose(fp); }</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;<span class="preprocessor">#if !GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02360"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a3c6ab13e581a56f1b02f3eb7536c97fd"> 2360</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a3c6ab13e581a56f1b02f3eb7536c97fd">Read</a>(<span class="keywordtype">int</span> fd, <span class="keywordtype">void</span>* buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>) {</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(read(fd, buf, <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>));</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;}</div><div class="line"><a name="l02363"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#af4acf9f78d55f815a18b43786511abef"> 2363</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#af4acf9f78d55f815a18b43786511abef">Write</a>(<span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">void</span>* buf, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>) {</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(write(fd, buf, <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>));</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;}</div><div class="line"><a name="l02366"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a15e5b8f2a535ef1b2529b85b861e4846"> 2366</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a15e5b8f2a535ef1b2529b85b861e4846">Close</a>(<span class="keywordtype">int</span> fd) { <span class="keywordflow">return</span> close(fd); }</div><div class="line"><a name="l02367"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a4b77b14af6f4d18f83d303b98e9349c4"> 2367</a></span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a4b77b14af6f4d18f83d303b98e9349c4">StrError</a>(<span class="keywordtype">int</span> errnum) { <span class="keywordflow">return</span> strerror(errnum); }</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02369"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a1d5e3da5a27eed25986859fa83cafe95"> 2369</a></span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a1d5e3da5a27eed25986859fa83cafe95">GetEnv</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) {</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT</span></div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <span class="comment">// We are on Windows CE, which has no environment variables.</span></div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span><span class="keyword">&gt;</span>(name); <span class="comment">// To prevent &#39;unused argument&#39; warning.</span></div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;<span class="preprocessor">#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)</span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; <span class="comment">// Environment variables which we programmatically clear will be set to the</span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; <span class="comment">// empty string rather than unset (NULL). Handle that case.</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> env = getenv(name);</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; <span class="keywordflow">return</span> (env != <span class="keyword">nullptr</span> &amp;&amp; env[0] != <span class="charliteral">&#39;\0&#39;</span>) ? env : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; <span class="keywordflow">return</span> getenv(name);</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;}</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<a class="code" href="gtest_8h.html#aa0dc86dc9837f1610e91da65458f53b3">GTEST_DISABLE_MSC_DEPRECATED_POP_</a>()</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;<span class="comment">// Windows CE has no C library. The abort() function is used in</span></div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;<span class="comment">// several places in Google Test. This implementation provides a reasonable</span></div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="comment">// imitation of standard behaviour.</span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;[[noreturn]] <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">Abort</a>();</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02392"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb"> 2392</a></span>&#160;[[noreturn]] <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">Abort</a>() { abort(); }</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;} <span class="comment">// namespace posix</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;<span class="comment">// MSVC &quot;deprecates&quot; snprintf and issues warnings wherever it is used. In</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;<span class="comment">// order to avoid these warnings, we need to use _snprintf or _snprintf_s on</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;<span class="comment">// MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;<span class="comment">// function in order to achieve that. We use macro definition here because</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;<span class="comment">// snprintf is a variadic function.</span></div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;<span class="preprocessor">#if _MSC_VER &amp;&amp; !GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;<span class="comment">// MSVC 2005 and above support variadic macros.</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;<span class="preprocessor"># define GTEST_SNPRINTF_(buffer, size, format, ...) \</span></div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;<span class="preprocessor"> _snprintf_s(buffer, size, size, format, __VA_ARGS__)</span></div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;<span class="comment">// Windows CE does not define _snprintf_s</span></div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;<span class="preprocessor"># define GTEST_SNPRINTF_ _snprintf</span></div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02410"></a><span class="lineno"><a class="line" href="gtest_8h.html#aed1cc8143222d7a845a1269448ec203e"> 2410</a></span>&#160;<span class="preprocessor"># define GTEST_SNPRINTF_ snprintf</span></div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;<span class="comment">// The maximum number a BiggestInt can represent. This definition</span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<span class="comment">// works no matter BiggestInt is represented in one&#39;s complement or</span></div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;<span class="comment">// two&#39;s complement.</span></div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;<span class="comment">// We cannot rely on numeric_limits in STL, as __int64 and long long</span></div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;<span class="comment">// are not part of standard C++ and numeric_limits doesn&#39;t need to be</span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;<span class="comment">// defined for them.</span></div><div class="line"><a name="l02420"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ad901880198832bc166d2493096b451f7"> 2420</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a> <a class="code" href="namespacetesting_1_1internal.html#ad901880198832bc166d2493096b451f7">kMaxBiggestInt</a> =</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; ~(<span class="keyword">static_cast&lt;</span><a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a><span class="keyword">&gt;</span>(1) &lt;&lt; (8*<span class="keyword">sizeof</span>(<a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a>) - 1));</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;<span class="comment">// This template class serves as a compile-time function from size to</span></div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;<span class="comment">// type. It maps a size in bytes to a primitive type with that</span></div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;<span class="comment">// size. e.g.</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;<span class="comment">// TypeWithSize&lt;4&gt;::UInt</span></div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;<span class="comment">// is typedef-ed to be unsigned int (unsigned integer made up of 4</span></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;<span class="comment">// bytes).</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;<span class="comment">// Such functionality should belong to STL, but I cannot find it</span></div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;<span class="comment">// there.</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;<span class="comment">// Google Test uses this class in the implementation of floating-point</span></div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;<span class="comment">// comparison.</span></div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;<span class="comment">// For now it only handles UInt (unsigned int) as that&#39;s all Google Test</span></div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;<span class="comment">// needs. Other types can be easily added in the future if need</span></div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;<span class="comment">// arises.</span></div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> size&gt;</div><div class="line"><a name="l02442"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size.html"> 2442</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize</a> {</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="comment">// This prevents the user from using TypeWithSize&lt;N&gt; with incorrect</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; <span class="comment">// values of N.</span></div><div class="line"><a name="l02446"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b"> 2446</a></span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b">UInt</a>;</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;};</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;<span class="comment">// The specialization for size 4.</span></div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l02451"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html"> 2451</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize</a>&lt;4&gt; {</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; <span class="comment">// unsigned int has size 4 in both gcc and MSVC.</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="comment">// As base/basictypes.h doesn&#39;t compile on Windows, we cannot use</span></div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; <span class="comment">// uint32, uint64, and etc here.</span></div><div class="line"><a name="l02457"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a80351860c00ed665e73f952143f4484a"> 2457</a></span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a80351860c00ed665e73f952143f4484a">Int</a>;</div><div class="line"><a name="l02458"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a7d559570f830bf35d095eeb94d98de58"> 2458</a></span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a7d559570f830bf35d095eeb94d98de58">UInt</a>;</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;};</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;<span class="comment">// The specialization for size 8.</span></div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l02463"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html"> 2463</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize</a>&lt;8&gt; {</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; <span class="keyword">typedef</span> __int64 <a class="code" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a36d5697e5f5254b0495f13c97d747e36">Int</a>;</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int64 <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b">UInt</a>;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02469"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a36d5697e5f5254b0495f13c97d747e36"> 2469</a></span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a36d5697e5f5254b0495f13c97d747e36">Int</a>; <span class="comment">// NOLINT</span></div><div class="line"><a name="l02470"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a747e21c5aee8faf07ec65cd4c3d1ca62"> 2470</a></span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a747e21c5aee8faf07ec65cd4c3d1ca62">UInt</a>; <span class="comment">// NOLINT</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;};</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;<span class="comment">// Integer types of known sizes.</span></div><div class="line"><a name="l02475"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec"> 2475</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize&lt;4&gt;::Int</a> <a class="code" href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec">Int32</a>;</div><div class="line"><a name="l02476"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3"> 2476</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b">TypeWithSize&lt;4&gt;::UInt</a> <a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a>;</div><div class="line"><a name="l02477"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a271c563fec38b804ddab0677f51f70a8"> 2477</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize&lt;8&gt;::Int</a> <a class="code" href="namespacetesting_1_1internal.html#a271c563fec38b804ddab0677f51f70a8">Int64</a>;</div><div class="line"><a name="l02478"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aa6a1ac454e6d7e550fa4925c62c35caa"> 2478</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b">TypeWithSize&lt;8&gt;::UInt</a> <a class="code" href="namespacetesting_1_1internal.html#aa6a1ac454e6d7e550fa4925c62c35caa">UInt64</a>;</div><div class="line"><a name="l02479"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a66a845df404b38fe85c5e14a069f255a"> 2479</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize&lt;8&gt;::Int</a> <a class="code" href="namespacetesting_1_1internal.html#a66a845df404b38fe85c5e14a069f255a">TimeInMillis</a>; <span class="comment">// Represents time in milliseconds.</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;<span class="comment">// Utilities for command line flags and environment variables.</span></div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;<span class="comment">// Macro for referencing flags.</span></div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;<span class="preprocessor">#if !defined(GTEST_FLAG)</span></div><div class="line"><a name="l02485"></a><span class="lineno"><a class="line" href="gtest_8h.html#a828f4e34a1c4b510da50ec1563e3562a"> 2485</a></span>&#160;<span class="preprocessor"># define GTEST_FLAG(name) FLAGS_gtest_##name</span></div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_FLAG)</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;<span class="preprocessor">#if !defined(GTEST_USE_OWN_FLAGFILE_FLAG_)</span></div><div class="line"><a name="l02489"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa2315948dda8dba4fc516575657f193c"> 2489</a></span>&#160;<span class="preprocessor"># define GTEST_USE_OWN_FLAGFILE_FLAG_ 1</span></div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_USE_OWN_FLAGFILE_FLAG_)</span></div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;<span class="preprocessor">#if !defined(GTEST_DECLARE_bool_)</span></div><div class="line"><a name="l02493"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3749ef4fba6b3c3993609b336031644d"> 2493</a></span>&#160;<span class="preprocessor"># define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver</span></div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;<span class="comment">// Macros for declaring flags.</span></div><div class="line"><a name="l02496"></a><span class="lineno"><a class="line" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14"> 2496</a></span>&#160;<span class="preprocessor"># define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)</span></div><div class="line"><a name="l02497"></a><span class="lineno"><a class="line" href="gtest_8h.html#aab2ee98cb616054b1d3a7dc71efe81fc"> 2497</a></span>&#160;<span class="preprocessor"># define GTEST_DECLARE_int32_(name) \</span></div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;<span class="preprocessor"> GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)</span></div><div class="line"><a name="l02499"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd"> 2499</a></span>&#160;<span class="preprocessor"># define GTEST_DECLARE_string_(name) \</span></div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;<span class="preprocessor"> GTEST_API_ extern ::std::string GTEST_FLAG(name)</span></div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;<span class="comment">// Macros for defining flags.</span></div><div class="line"><a name="l02503"></a><span class="lineno"><a class="line" href="gtest_8h.html#a48e05814779e5a2f432b06a12618a760"> 2503</a></span>&#160;<span class="preprocessor"># define GTEST_DEFINE_bool_(name, default_val, doc) \</span></div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;<span class="preprocessor"> GTEST_API_ bool GTEST_FLAG(name) = (default_val)</span></div><div class="line"><a name="l02505"></a><span class="lineno"><a class="line" href="gtest_8h.html#a88ee2f19589ffff86ca742fd33611358"> 2505</a></span>&#160;<span class="preprocessor"># define GTEST_DEFINE_int32_(name, default_val, doc) \</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;<span class="preprocessor"> GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)</span></div><div class="line"><a name="l02507"></a><span class="lineno"><a class="line" href="gtest_8h.html#a885e18fe217a6e85553d408b99252c12"> 2507</a></span>&#160;<span class="preprocessor"># define GTEST_DEFINE_string_(name, default_val, doc) \</span></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;<span class="preprocessor"> GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val)</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_DECLARE_bool_)</span></div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;<span class="comment">// Thread annotations</span></div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;<span class="preprocessor">#if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)</span></div><div class="line"><a name="l02514"></a><span class="lineno"><a class="line" href="gtest_8h.html#a149f693bd59fa1bc937af54c0cdcb32f"> 2514</a></span>&#160;<span class="preprocessor"># define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)</span></div><div class="line"><a name="l02515"></a><span class="lineno"><a class="line" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06"> 2515</a></span>&#160;<span class="preprocessor"># define GTEST_LOCK_EXCLUDED_(locks)</span></div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;<span class="preprocessor">#endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)</span></div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;<span class="comment">// Parses &#39;str&#39; for a 32-bit signed integer. If successful, writes the result</span></div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;<span class="comment">// to *value and returns true; otherwise leaves *value unchanged and returns</span></div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;<span class="comment">// false.</span></div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#ac06fc81336a3d80755f4020d34321766">ParseInt32</a>(<span class="keyword">const</span> Message&amp; src_text, <span class="keyword">const</span> <span class="keywordtype">char</span>* str, <a class="code" href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec">Int32</a>* value);</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;<span class="comment">// Parses a bool/Int32/string from the environment variable</span></div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;<span class="comment">// corresponding to the given Google Test flag.</span></div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a1055088bb9b867e1b7b8f096f519d7c5">BoolFromGTestEnv</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* flag, <span class="keywordtype">bool</span> default_val);</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec">Int32</a> <a class="code" href="namespacetesting_1_1internal.html#a2196f070b2d28bceb45c7ad3b565b9ba">Int32FromGTestEnv</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* flag, <a class="code" href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec">Int32</a> default_val);</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a0c793c6d84760d900299916c077a1af4">OutputFlagAlsoCheckEnvVar</a>();</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal.html#a0967cbf18fb1594f82512d8d822aba21">StringFromGTestEnv</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* flag, <span class="keyword">const</span> <span class="keywordtype">char</span>* default_val);</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_</span></div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;<span class="preprocessor">#if GTEST_OS_LINUX</span></div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;<span class="preprocessor"># include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;<span class="preprocessor"># include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;<span class="preprocessor"># include &lt;sys/wait.h&gt;</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;<span class="preprocessor"># include &lt;unistd.h&gt;</span></div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;<span class="preprocessor">#endif // GTEST_OS_LINUX</span></div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;<span class="preprocessor">#if GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;<span class="preprocessor"># include &lt;stdexcept&gt;</span></div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;<span class="preprocessor">#include &lt;ctype.h&gt;</span></div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;<span class="preprocessor">#include &lt;float.h&gt;</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;<span class="comment">// This header file defines the Message class.</span></div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;<span class="comment">// IMPORTANT NOTE: Due to limitation of the C++ language, we have to</span></div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;<span class="comment">// leave some internal implementation details in this header file.</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;<span class="comment">// They are clearly marked by comments like this:</span></div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;<span class="comment">// // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;<span class="comment">// Such code is NOT meant to be used by a user directly, and is subject</span></div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;<span class="comment">// to CHANGE WITHOUT NOTICE. Therefore DO NOT DEPEND ON IT in a user</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;<span class="comment">// program!</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_</span></div><div class="line"><a name="l02603"></a><span class="lineno"><a class="line" href="gtest_8h.html#a5c2d86823d7f9ffac3e3766da17091dd"> 2603</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_</span></div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;<span class="comment">// Ensures that there is at least one operator&lt;&lt; in the global namespace.</span></div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;<span class="comment">// See Message&amp; operator&lt;&lt;(...) below for why.</span></div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;void operator&lt;&lt;(const <a class="code" href="namespacetesting.html">testing</a>::internal::Secret&amp;, <span class="keywordtype">int</span>);</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;namespace <a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;<span class="comment">// The Message class works like an ostream repeater.</span></div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;<span class="comment">// Typical usage:</span></div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;<span class="comment">// 1. You stream a bunch of values to a Message object.</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;<span class="comment">// It will remember the text in a stringstream.</span></div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;<span class="comment">// 2. Then you stream the Message object to an ostream.</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;<span class="comment">// This causes the text in the Message to be streamed</span></div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;<span class="comment">// to the ostream.</span></div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;<span class="comment">// For example;</span></div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;<span class="comment">// testing::Message foo;</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;<span class="comment">// foo &lt;&lt; 1 &lt;&lt; &quot; != &quot; &lt;&lt; 2;</span></div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;<span class="comment">// std::cout &lt;&lt; foo;</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;<span class="comment">// will print &quot;1 != 2&quot;.</span></div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;<span class="comment">// Message is not intended to be inherited from. In particular, its</span></div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;<span class="comment">// destructor is not virtual.</span></div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;<span class="comment">// Note that stringstream behaves differently in gcc and in MSVC. You</span></div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;<span class="comment">// can stream a NULL char pointer to it in the former, but not in the</span></div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;<span class="comment">// latter (it causes an access violation if you do). The Message</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;<span class="comment">// class hides this difference by treating a NULL char pointer as</span></div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;<span class="comment">// &quot;(null)&quot;.</span></div><div class="line"><a name="l02644"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html"> 2644</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_message.html">Message</a> {</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160; <span class="comment">// The type of basic IO manipulators (endl, ends, and flush) for</span></div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160; <span class="comment">// narrow streams.</span></div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160; <span class="keyword">typedef</span> std::ostream&amp; (*BasicNarrowIoManip)(std::ostream&amp;);</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <span class="comment">// Constructs an empty Message.</span></div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>();</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <span class="comment">// Copy constructor.</span></div><div class="line"><a name="l02655"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#ac126e24804817a053bebba0920d94a11"> 2655</a></span>&#160; <a class="code" href="classtesting_1_1_message.html#ac126e24804817a053bebba0920d94a11">Message</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; msg) : ss_(new ::std::stringstream) { <span class="comment">// NOLINT</span></div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; *ss_ &lt;&lt; msg.<a class="code" href="classtesting_1_1_message.html#a2cdc4df62bdcc9df37651a1cf527704e">GetString</a>();</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160; }</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; <span class="comment">// Constructs a Message from a C-string.</span></div><div class="line"><a name="l02660"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#a9de694ca239486809fc99fbbea8ac21d"> 2660</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1_message.html#a9de694ca239486809fc99fbbea8ac21d">Message</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) : ss_(new ::std::stringstream) {</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160; *ss_ &lt;&lt; str;</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160; }</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160; <span class="comment">// Streams a non-pointer value to this object.</span></div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02666"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#a2e0e71be52d54c20a75a55fca812721f"> 2666</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<span class="keyword">const</span> T&amp; val) {</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; <span class="comment">// Some libraries overload &lt;&lt; for STL containers. These</span></div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; <span class="comment">// overloads are defined in the global namespace instead of ::std.</span></div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <span class="comment">// C++&#39;s symbol lookup rule (i.e. Koenig lookup) says that these</span></div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; <span class="comment">// overloads are visible in either the std namespace or the global</span></div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; <span class="comment">// namespace, but not other namespaces, including the testing</span></div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; <span class="comment">// namespace which Google Test&#39;s Message class is in.</span></div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; <span class="comment">// To allow STL containers (and other types that has a &lt;&lt; operator</span></div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <span class="comment">// defined in the global namespace) to be used in Google Test</span></div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; <span class="comment">// assertions, testing::Message must access the custom &lt;&lt; operator</span></div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <span class="comment">// from the global namespace. With this using declaration,</span></div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160; <span class="comment">// overloads of &lt;&lt; defined in the global namespace and those</span></div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; <span class="comment">// visible via Koenig lookup are both exposed in this function.</span></div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; using ::operator &lt;&lt;;</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160; *ss_ &lt;&lt; val;</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; }</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; <span class="comment">// Streams a pointer value to this object.</span></div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; <span class="comment">// This function is an overload of the previous one. When you</span></div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; <span class="comment">// stream a pointer to a Message, this definition will be used as it</span></div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; <span class="comment">// is more specialized. (The C++ Standard, section</span></div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; <span class="comment">// [temp.func.order].) If you stream a non-pointer, then the</span></div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160; <span class="comment">// previous definition will be used.</span></div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; <span class="comment">// The reason for this overload is that streaming a NULL pointer to</span></div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; <span class="comment">// ostream is undefined behavior. Depending on the compiler, you</span></div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; <span class="comment">// may get &quot;0&quot;, &quot;(nil)&quot;, &quot;(null)&quot;, or an access violation. To</span></div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160; <span class="comment">// ensure consistent result across compilers, we always treat NULL</span></div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160; <span class="comment">// as &quot;(null)&quot;.</span></div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02700"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#aa3ab685879958f90d2d8cd5b68d10c34"> 2700</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(T* <span class="keyword">const</span>&amp; pointer) { <span class="comment">// NOLINT</span></div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; <span class="keywordflow">if</span> (pointer == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; *ss_ &lt;&lt; <span class="stringliteral">&quot;(null)&quot;</span>;</div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; *ss_ &lt;&lt; pointer;</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; }</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160; }</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <span class="comment">// Since the basic IO manipulators are overloaded for both narrow</span></div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; <span class="comment">// and wide streams, we have to provide this specialized definition</span></div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; <span class="comment">// of operator &lt;&lt;, even though its body is the same as the</span></div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160; <span class="comment">// templatized version above. Without this definition, streaming</span></div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <span class="comment">// endl or other basic IO manipulators to Message will confuse the</span></div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160; <span class="comment">// compiler.</span></div><div class="line"><a name="l02715"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#a3a71a1c1c8ea52de5852d75483d41453"> 2715</a></span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(BasicNarrowIoManip val) {</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; *ss_ &lt;&lt; val;</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; }</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160; <span class="comment">// Instead of 1/0, we want to see true/false for bool values.</span></div><div class="line"><a name="l02721"></a><span class="lineno"><a class="line" href="classtesting_1_1_message.html#a3e1e04f23b1bdfe18adfd59928296346"> 2721</a></span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<span class="keywordtype">bool</span> b) {</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> &lt;&lt; (b ? <span class="stringliteral">&quot;true&quot;</span> : <span class="stringliteral">&quot;false&quot;</span>);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; }</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <span class="comment">// These two overloads allow streaming a wide C string to a Message</span></div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; <span class="comment">// using the UTF-8 encoding.</span></div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* wide_c_str);</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<span class="keywordtype">wchar_t</span>* wide_c_str);</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;<span class="preprocessor">#if GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; <span class="comment">// Converts the given wide string to a narrow string using the UTF-8</span></div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; <span class="comment">// encoding, and streams the result to this Message object.</span></div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; wstr);</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; <span class="comment">// Converts the given wide string to a narrow string using the UTF-8</span></div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160; <span class="comment">// encoding, and streams the result to this Message object.</span></div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::wstring</a>&amp; wstr);</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160; <span class="comment">// Gets the text streamed to this object so far as an std::string.</span></div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160; <span class="comment">// Each &#39;\0&#39; character in the buffer is replaced with &quot;\\0&quot;.</span></div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>&#160; <span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> GetString() <span class="keyword">const</span>;</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160;</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; <span class="comment">// We&#39;ll hold the text streamed to this object here.</span></div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt; ::std::stringstream&gt; ss_;</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; <span class="comment">// We declare (but don&#39;t implement) this to prevent the compiler</span></div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; <span class="comment">// from implementing the assignment operator.</span></div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp;);</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;};</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;<span class="comment">// Streams a Message to an ostream.</span></div><div class="line"><a name="l02758"></a><span class="lineno"><a class="line" href="namespacetesting.html#a7b802e532fd68749765cb7dc156130db"> 2758</a></span>&#160;<span class="keyword">inline</span> std::ostream&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator &lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; sb) {</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; sb.<a class="code" href="classtesting_1_1_message.html#a2cdc4df62bdcc9df37651a1cf527704e">GetString</a>();</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;}</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;<span class="comment">// Converts a streamable value to an std::string. A NULL pointer is</span></div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;<span class="comment">// converted to &quot;(null)&quot;. When the input value is a ::string,</span></div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;<span class="comment">// ::std::string, ::wstring, or ::std::wstring object, each NUL</span></div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;<span class="comment">// character in it is replaced with &quot;\\0&quot;.</span></div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l02769"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aad4beed95d0846e6ffc5da0978ef3bb9"> 2769</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#aad4beed95d0846e6ffc5da0978ef3bb9">StreamableToString</a>(<span class="keyword">const</span> T&amp; streamable) {</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classtesting_1_1_message.html">Message</a>() &lt;&lt; streamable).GetString();</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;}</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_</span></div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;<span class="comment">// Copyright 2008, Google Inc.</span></div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;<span class="comment">// Google Test filepath utilities</span></div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;<span class="comment">// This header file declares classes and functions used internally by</span></div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;<span class="comment">// Google Test. They are subject to change without notice.</span></div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;<span class="comment">// This file is #included in gtest/internal/gtest-internal.h.</span></div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;<span class="comment">// Do not include this header file separately!</span></div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_</span></div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_</span></div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;<span class="comment">// This header file declares the String class and functions used internally by</span></div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;<span class="comment">// Google Test. They are subject to change without notice. They should not used</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;<span class="comment">// by code external to Google Test.</span></div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;<span class="comment">// This header file is #included by gtest-internal.h.</span></div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;<span class="comment">// It should not be #included by other files.</span></div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_</span></div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_</span></div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;<span class="preprocessor">#ifdef __BORLANDC__</span></div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;<span class="comment">// string.h is not guaranteed to provide strcpy on C++ Builder.</span></div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;<span class="preprocessor"># include &lt;mem.h&gt;</span></div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;<span class="comment">// String - an abstract class holding static string utilities.</span></div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> String {</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160; <span class="comment">// Static utility methods</span></div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; <span class="comment">// Clones a 0-terminated C string, allocating memory using new. The</span></div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <span class="comment">// caller is responsible for deleting the return value using</span></div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160; <span class="comment">// delete[]. Returns the cloned string, or NULL if the input is</span></div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; <span class="comment">// NULL.</span></div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160; <span class="comment">// This is different from strdup() in string.h, which allocates</span></div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; <span class="comment">// memory using malloc().</span></div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* CloneCString(<span class="keyword">const</span> <span class="keywordtype">char</span>* c_str);</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;</div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS_MOBILE</span></div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; <span class="comment">// Windows CE does not have the &#39;ANSI&#39; versions of Win32 APIs. To be</span></div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160; <span class="comment">// able to pass strings to Win32 APIs on CE we need to convert them</span></div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; <span class="comment">// to &#39;Unicode&#39;, UTF-16.</span></div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; <span class="comment">// Creates a UTF-16 wide string from the given ANSI string, allocating</span></div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160; <span class="comment">// memory using new. The caller is responsible for deleting the return</span></div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160; <span class="comment">// value using delete[]. Returns the wide string, or NULL if the</span></div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160; <span class="comment">// input is NULL.</span></div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; <span class="comment">// The wide string is created using the ANSI codepage (CP_ACP) to</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; <span class="comment">// match the behaviour of the ANSI versions of Win32 calls and the</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; <span class="comment">// C runtime.</span></div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; <span class="keyword">static</span> LPCWSTR AnsiToUtf16(<span class="keyword">const</span> <span class="keywordtype">char</span>* c_str);</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160; <span class="comment">// Creates an ANSI string from the given wide string, allocating</span></div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160; <span class="comment">// memory using new. The caller is responsible for deleting the return</span></div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160; <span class="comment">// value using delete[]. Returns the ANSI string, or NULL if the</span></div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160; <span class="comment">// input is NULL.</span></div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160; <span class="comment">// The returned string is created using the ANSI codepage (CP_ACP) to</span></div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160; <span class="comment">// match the behaviour of the ANSI versions of Win32 calls and the</span></div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160; <span class="comment">// C runtime.</span></div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Utf16ToAnsi(LPCWSTR utf16_str);</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160; <span class="comment">// Compares two C strings. Returns true iff they have the same content.</span></div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160; <span class="comment">// Unlike strcmp(), this function can handle NULL argument(s). A</span></div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160; <span class="comment">// NULL C string is considered different to any non-NULL C string,</span></div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160; <span class="comment">// including the empty string.</span></div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> CStringEquals(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs, <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs);</div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;</div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160; <span class="comment">// Converts a wide C string to a String using the UTF-8 encoding.</span></div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160; <span class="comment">// NULL will be converted to &quot;(null)&quot;. If an error occurred during</span></div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160; <span class="comment">// the conversion, &quot;(failed to convert from wide string)&quot; is</span></div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160; <span class="comment">// returned.</span></div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> ShowWideCString(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* wide_c_str);</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160; <span class="comment">// Compares two wide C strings. Returns true iff they have the same</span></div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160; <span class="comment">// content.</span></div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160; <span class="comment">// Unlike wcscmp(), this function can handle NULL argument(s). A</span></div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; <span class="comment">// NULL C string is considered different to any non-NULL C string,</span></div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160; <span class="comment">// including the empty string.</span></div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> WideCStringEquals(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* lhs, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* rhs);</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160; <span class="comment">// Compares two C strings, ignoring case. Returns true iff they</span></div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160; <span class="comment">// have the same content.</span></div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160; <span class="comment">// Unlike strcasecmp(), this function can handle NULL argument(s).</span></div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160; <span class="comment">// A NULL C string is considered different to any non-NULL C string,</span></div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; <span class="comment">// including the empty string.</span></div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> CaseInsensitiveCStringEquals(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs,</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs);</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160; <span class="comment">// Compares two wide C strings, ignoring case. Returns true iff they</span></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; <span class="comment">// have the same content.</span></div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; <span class="comment">// Unlike wcscasecmp(), this function can handle NULL argument(s).</span></div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; <span class="comment">// A NULL C string is considered different to any non-NULL wide C string,</span></div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; <span class="comment">// including the empty string.</span></div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160; <span class="comment">// NB: The implementations on different platforms slightly differ.</span></div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160; <span class="comment">// On windows, this method uses _wcsicmp which compares according to LC_CTYPE</span></div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; <span class="comment">// environment variable. On GNU platform this method uses wcscasecmp</span></div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160; <span class="comment">// which compares according to LC_CTYPE category of the current locale.</span></div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; <span class="comment">// On MacOS X, it uses towlower, which also uses LC_CTYPE category of the</span></div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160; <span class="comment">// current locale.</span></div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> CaseInsensitiveWideCStringEquals(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* lhs,</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* rhs);</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160; <span class="comment">// Returns true iff the given string ends with the given suffix, ignoring</span></div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; <span class="comment">// case. Any string is considered to end with an empty suffix.</span></div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> EndsWithCaseInsensitive(</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; str, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; suffix);</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; <span class="comment">// Formats an int value as &quot;%02d&quot;.</span></div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> FormatIntWidth2(<span class="keywordtype">int</span> value); <span class="comment">// &quot;%02d&quot; for width == 2</span></div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160; <span class="comment">// Formats an int value as &quot;%X&quot;.</span></div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> FormatHexInt(<span class="keywordtype">int</span> value);</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160; <span class="comment">// Formats a byte as &quot;%02X&quot;.</span></div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> FormatByte(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> value);</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; String(); <span class="comment">// Not meant to be instantiated.</span></div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;}; <span class="comment">// class String</span></div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;<span class="comment">// Gets the content of the stringstream&#39;s buffer as an std::string. Each &#39;\0&#39;</span></div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;<span class="comment">// character in the buffer is replaced with &quot;\\0&quot;.</span></div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> StringStreamToString(::std::stringstream* stream);</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_</span></div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"><a class="line" href="gtest_8h.html#a88f79832f9d045112a76e9da8611cc13"> 2988</a></span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;namespace <a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;<span class="comment">// FilePath - a class for file and directory pathname manipulation which</span></div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;<span class="comment">// handles platform-specific conventions (like the pathname separator).</span></div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;<span class="comment">// Used for helper functions for naming files in a directory for xml output.</span></div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;<span class="comment">// Except for Set methods, all methods are const or static, which provides an</span></div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;<span class="comment">// &quot;immutable value object&quot; -- useful for peace of mind.</span></div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;<span class="comment">// A FilePath with a value ending in a path separator (&quot;like/this/&quot;) represents</span></div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;<span class="comment">// a directory, otherwise it is assumed to represent a file. In either case,</span></div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;<span class="comment">// it may or may not represent an actual file or directory in the file system.</span></div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;<span class="comment">// Names are NOT checked for syntax correctness -- no checking for illegal</span></div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;<span class="comment">// characters, malformed paths, etc.</span></div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> FilePath {</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; FilePath() : pathname_(<span class="stringliteral">&quot;&quot;</span>) { }</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; FilePath(<span class="keyword">const</span> FilePath&amp; rhs) : pathname_(rhs.pathname_) { }</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; <span class="keyword">explicit</span> FilePath(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; pathname) : pathname_(pathname) {</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; Normalize();</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; }</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; FilePath&amp; operator=(<span class="keyword">const</span> FilePath&amp; rhs) {</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; Set(rhs);</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; }</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160; <span class="keywordtype">void</span> Set(<span class="keyword">const</span> FilePath&amp; rhs) {</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; pathname_ = rhs.pathname_;</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160; }</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pathname_; }</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* c_str()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pathname_.c_str(); }</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; <span class="comment">// Returns the current working directory, or &quot;&quot; if unsuccessful.</span></div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; <span class="keyword">static</span> FilePath GetCurrentDir();</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; <span class="comment">// Given directory = &quot;dir&quot;, base_name = &quot;test&quot;, number = 0,</span></div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; <span class="comment">// extension = &quot;xml&quot;, returns &quot;dir/test.xml&quot;. If number is greater</span></div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160; <span class="comment">// than zero (e.g., 12), returns &quot;dir/test_12.xml&quot;.</span></div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160; <span class="comment">// On Windows platform, uses \ as the separator rather than /.</span></div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160; <span class="keyword">static</span> FilePath MakeFileName(<span class="keyword">const</span> FilePath&amp; directory,</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; <span class="keyword">const</span> FilePath&amp; base_name,</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160; <span class="keywordtype">int</span> number,</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* extension);</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; <span class="comment">// Given directory = &quot;dir&quot;, relative_path = &quot;test.xml&quot;,</span></div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; <span class="comment">// returns &quot;dir/test.xml&quot;.</span></div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; <span class="comment">// On Windows, uses \ as the separator rather than /.</span></div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160; <span class="keyword">static</span> FilePath ConcatPaths(<span class="keyword">const</span> FilePath&amp; directory,</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; <span class="keyword">const</span> FilePath&amp; relative_path);</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; <span class="comment">// Returns a pathname for a file that does not currently exist. The pathname</span></div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160; <span class="comment">// will be directory/base_name.extension or</span></div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160; <span class="comment">// directory/base_name_&lt;number&gt;.extension if directory/base_name.extension</span></div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160; <span class="comment">// already exists. The number will be incremented until a pathname is found</span></div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160; <span class="comment">// that does not already exist.</span></div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160; <span class="comment">// Examples: &#39;dir/foo_test.xml&#39; or &#39;dir/foo_test_1.xml&#39;.</span></div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; <span class="comment">// There could be a race condition if two or more processes are calling this</span></div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; <span class="comment">// function at the same time -- they could both pick the same filename.</span></div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; <span class="keyword">static</span> FilePath GenerateUniqueFileName(<span class="keyword">const</span> FilePath&amp; directory,</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; <span class="keyword">const</span> FilePath&amp; base_name,</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* extension);</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; <span class="comment">// Returns true iff the path is &quot;&quot;.</span></div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; <span class="keywordtype">bool</span> IsEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> pathname_.empty(); }</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; <span class="comment">// If input name has a trailing separator character, removes it and returns</span></div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; <span class="comment">// the name, otherwise return the name string unmodified.</span></div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; <span class="comment">// On Windows platform, uses \ as the separator, other platforms use /.</span></div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160; FilePath RemoveTrailingPathSeparator() <span class="keyword">const</span>;</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; <span class="comment">// Returns a copy of the FilePath with the directory part removed.</span></div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; <span class="comment">// Example: FilePath(&quot;path/to/file&quot;).RemoveDirectoryName() returns</span></div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; <span class="comment">// FilePath(&quot;file&quot;). If there is no directory part (&quot;just_a_file&quot;), it returns</span></div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; <span class="comment">// the FilePath unmodified. If there is no file part (&quot;just_a_dir/&quot;) it</span></div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; <span class="comment">// returns an empty FilePath (&quot;&quot;).</span></div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160; <span class="comment">// On Windows platform, &#39;\&#39; is the path separator, otherwise it is &#39;/&#39;.</span></div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; FilePath RemoveDirectoryName() <span class="keyword">const</span>;</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; <span class="comment">// RemoveFileName returns the directory path with the filename removed.</span></div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; <span class="comment">// Example: FilePath(&quot;path/to/file&quot;).RemoveFileName() returns &quot;path/to/&quot;.</span></div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; <span class="comment">// If the FilePath is &quot;a_file&quot; or &quot;/a_file&quot;, RemoveFileName returns</span></div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; <span class="comment">// FilePath(&quot;./&quot;) or, on Windows, FilePath(&quot;.\\&quot;). If the filepath does</span></div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; <span class="comment">// not have a file, like &quot;just/a/dir/&quot;, it returns the FilePath unmodified.</span></div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160; <span class="comment">// On Windows platform, &#39;\&#39; is the path separator, otherwise it is &#39;/&#39;.</span></div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160; FilePath RemoveFileName() <span class="keyword">const</span>;</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; <span class="comment">// Returns a copy of the FilePath with the case-insensitive extension removed.</span></div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160; <span class="comment">// Example: FilePath(&quot;dir/file.exe&quot;).RemoveExtension(&quot;EXE&quot;) returns</span></div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; <span class="comment">// FilePath(&quot;dir/file&quot;). If a case-insensitive extension is not</span></div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; <span class="comment">// found, returns a copy of the original FilePath.</span></div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160; FilePath RemoveExtension(<span class="keyword">const</span> <span class="keywordtype">char</span>* extension) <span class="keyword">const</span>;</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; <span class="comment">// Creates directories so that path exists. Returns true if successful or if</span></div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; <span class="comment">// the directories already exist; returns false if unable to create</span></div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160; <span class="comment">// directories for any reason. Will also return false if the FilePath does</span></div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160; <span class="comment">// not represent a directory (that is, it doesn&#39;t end with a path separator).</span></div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; <span class="keywordtype">bool</span> CreateDirectoriesRecursively() <span class="keyword">const</span>;</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160; <span class="comment">// Create the directory so that path exists. Returns true if successful or</span></div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160; <span class="comment">// if the directory already exists; returns false if unable to create the</span></div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; <span class="comment">// directory for any reason, including if the parent directory does not</span></div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160; <span class="comment">// exist. Not named &quot;CreateDirectory&quot; because that&#39;s a macro on Windows.</span></div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160; <span class="keywordtype">bool</span> CreateFolder() <span class="keyword">const</span>;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160; <span class="comment">// Returns true if FilePath describes something in the file-system,</span></div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160; <span class="comment">// either a file, directory, or whatever, and that something exists.</span></div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160; <span class="keywordtype">bool</span> FileOrDirectoryExists() <span class="keyword">const</span>;</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160; <span class="comment">// Returns true if pathname describes a directory in the file-system</span></div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; <span class="comment">// that exists.</span></div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; <span class="keywordtype">bool</span> DirectoryExists() <span class="keyword">const</span>;</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; <span class="comment">// Returns true if FilePath ends with a path separator, which indicates that</span></div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160; <span class="comment">// it is intended to represent a directory. Returns false otherwise.</span></div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160; <span class="comment">// This does NOT check that a directory (or file) actually exists.</span></div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; <span class="keywordtype">bool</span> IsDirectory() <span class="keyword">const</span>;</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; <span class="comment">// Returns true if pathname describes a root directory. (Windows has one</span></div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160; <span class="comment">// root directory per disk drive.)</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160; <span class="keywordtype">bool</span> IsRootDirectory() <span class="keyword">const</span>;</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; <span class="comment">// Returns true if pathname describes an absolute path.</span></div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160; <span class="keywordtype">bool</span> IsAbsolutePath() <span class="keyword">const</span>;</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160; <span class="comment">// Replaces multiple consecutive separators with a single separator.</span></div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160; <span class="comment">// For example, &quot;bar///foo&quot; becomes &quot;bar/foo&quot;. Does not eliminate other</span></div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160; <span class="comment">// redundancies that might be in a pathname involving &quot;.&quot; or &quot;..&quot;.</span></div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160; <span class="comment">// A pathname with multiple consecutive separators may occur either through</span></div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160; <span class="comment">// user error or as a result of some scripts or APIs that generate a pathname</span></div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160; <span class="comment">// with a trailing separator. On other platforms the same API or script</span></div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160; <span class="comment">// may NOT generate a pathname with a trailing &quot;/&quot;. Then elsewhere that</span></div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160; <span class="comment">// pathname may have another &quot;/&quot; and pathname components added to it,</span></div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160; <span class="comment">// without checking for the separator already being there.</span></div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160; <span class="comment">// The script language and operating system may allow paths like &quot;foo//bar&quot;</span></div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160; <span class="comment">// but some of the functions in FilePath will not handle that correctly. In</span></div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; <span class="comment">// particular, RemoveTrailingPathSeparator() only removes one separator, and</span></div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; <span class="comment">// it is called in CreateDirectoriesRecursively() assuming that it will change</span></div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; <span class="comment">// a pathname from directory syntax (trailing separator) to filename syntax.</span></div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160; <span class="comment">// On Windows this method also replaces the alternate path separator &#39;/&#39; with</span></div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160; <span class="comment">// the primary path separator &#39;\\&#39;, so that for example &quot;bar\\/\\foo&quot; becomes</span></div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; <span class="comment">// &quot;bar\\foo&quot;.</span></div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160; <span class="keywordtype">void</span> Normalize();</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; <span class="comment">// Returns a pointer to the last occurence of a valid path separator in</span></div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160; <span class="comment">// the FilePath. On Windows, for example, both &#39;/&#39; and &#39;\&#39; are valid path</span></div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; <span class="comment">// separators. Returns NULL if no path separator was found.</span></div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* FindLastPathSeparator() <span class="keyword">const</span>;</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> pathname_;</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;}; <span class="comment">// class FilePath</span></div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_</span></div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;<span class="comment">// This file was GENERATED by command:</span></div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;<span class="comment">// pump.py gtest-type-util.h.pump</span></div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;<span class="comment">// DO NOT EDIT BY HAND!!!</span></div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;<span class="comment">// Copyright 2008 Google Inc.</span></div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;<span class="comment">// All Rights Reserved.</span></div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;<span class="comment">// Type utilities needed for implementing typed and type-parameterized</span></div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;<span class="comment">// tests. This file is generated by a SCRIPT. DO NOT EDIT BY HAND!</span></div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;<span class="comment">// Currently we support at most 50 types in a list, and at most 50</span></div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;<span class="comment">// type-parameterized tests in one type-parameterized test suite.</span></div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;<span class="comment">// Please contact googletestframework@googlegroups.com if you need</span></div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;<span class="comment">// more.</span></div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_</span></div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_</span></div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;<span class="comment">// #ifdef __GNUC__ is too general here. It is possible to use gcc without using</span></div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;<span class="comment">// libstdc++ (which is where cxxabi.h comes from).</span></div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;<span class="preprocessor"># if GTEST_HAS_CXXABI_H_</span></div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;<span class="preprocessor"># include &lt;cxxabi.h&gt;</span></div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;<span class="preprocessor"># elif defined(__HP_aCC)</span></div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;<span class="preprocessor"># include &lt;acxx_demangle.h&gt;</span></div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;<span class="preprocessor"># endif // GTEST_HASH_CXXABI_H_</span></div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;<span class="comment">// Canonicalizes a given name with respect to the Standard C++ Library.</span></div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;<span class="comment">// This handles removing the inline namespace within `std` that is</span></div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;<span class="comment">// used by various standard libraries (e.g., `std::__1`). Names outside</span></div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;<span class="comment">// of namespace std are returned unmodified.</span></div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;<span class="keyword">inline</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> CanonicalizeForStdLibVersioning(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> s) {</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> prefix[] = <span class="stringliteral">&quot;std::__&quot;</span>;</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160; <span class="keywordflow">if</span> (s.compare(0, strlen(prefix), prefix) == 0) {</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160; std::string::size_type end = s.find(<span class="stringliteral">&quot;::&quot;</span>, strlen(prefix));</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160; <span class="keywordflow">if</span> (end != s.npos) {</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160; <span class="comment">// Erase everything between the initial `std` and the second `::`.</span></div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160; s.erase(strlen(<span class="stringliteral">&quot;std&quot;</span>), end - strlen(<span class="stringliteral">&quot;std&quot;</span>));</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160; }</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160; }</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160; <span class="keywordflow">return</span> s;</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;}</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;</div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;<span class="comment">// GetTypeName&lt;T&gt;() returns a human-readable name of type T.</span></div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;<span class="comment">// NB: This function is also used in Google Mock, so don&#39;t move it inside of</span></div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;<span class="comment">// the typed-test-only section below.</span></div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> GetTypeName() {</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;<span class="preprocessor"># if GTEST_HAS_RTTI</span></div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> name = <span class="keyword">typeid</span>(T).name();</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;<span class="preprocessor"># if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)</span></div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160; <span class="keywordtype">int</span> status = 0;</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160; <span class="comment">// gcc&#39;s implementation of typeid(T).name() mangles the type name,</span></div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160; <span class="comment">// so we have to demangle it.</span></div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;<span class="preprocessor"># if GTEST_HAS_CXXABI_H_</span></div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160; <span class="keyword">using</span> abi::__cxa_demangle;</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_CXXABI_H_</span></div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160; <span class="keywordtype">char</span>* <span class="keyword">const</span> readable_name = __cxa_demangle(name, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, &amp;status);</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> name_str(status == 0 ? readable_name : name);</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160; free(readable_name);</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160; <span class="keywordflow">return</span> CanonicalizeForStdLibVersioning(name_str);</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160; <span class="keywordflow">return</span> name;</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_CXXABI_H_ || __HP_aCC</span></div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;type&gt;&quot;</span>;</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;<span class="preprocessor"># endif // GTEST_HAS_RTTI</span></div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;}</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;<span class="preprocessor">#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;<span class="comment">// AssertyTypeEq&lt;T1, T2&gt;::type is defined iff T1 and T2 are the same</span></div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160;<span class="comment">// type. This can be used as a compile-time assertion to ensure that</span></div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;<span class="comment">// two types are equal.</span></div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;<span class="keyword">struct </span>AssertTypeEq;</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;<span class="keyword">struct </span>AssertTypeEq&lt;T, T&gt; {</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">bool</span> type;</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;};</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;<span class="comment">// A unique type used as the default value for the arguments of class</span></div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;<span class="comment">// template Types. This allows us to simulate variadic templates</span></div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;<span class="comment">// (e.g. Types&lt;int&gt;, Type&lt;int, double&gt;, and etc), which C++ doesn&#39;t</span></div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;<span class="comment">// support directly.</span></div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;<span class="keyword">struct </span>None {};</div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;</div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;<span class="comment">// The following family of struct and struct templates are used to</span></div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;<span class="comment">// represent type lists. In particular, TypesN&lt;T1, T2, ..., TN&gt;</span></div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;<span class="comment">// represents a type list with N types (T1, T2, ..., and TN) in it.</span></div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;<span class="comment">// Except for Types0, every struct in the family has two member types:</span></div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;<span class="comment">// Head for the first type in the list, and Tail for the rest of the</span></div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;<span class="comment">// list.</span></div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;<span class="comment">// The empty type list.</span></div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;<span class="keyword">struct </span>Types0 {};</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;<span class="comment">// Type lists of length 1, 2, 3, and so on.</span></div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160;</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1&gt;</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;<span class="keyword">struct </span>Types1 {</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160; <span class="keyword">typedef</span> Types0 Tail;</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;};</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;<span class="keyword">struct </span>Types2 {</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160; <span class="keyword">typedef</span> Types1&lt;T2&gt; Tail;</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;};</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3&gt;</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;<span class="keyword">struct </span>Types3 {</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160; <span class="keyword">typedef</span> Types2&lt;T2, T3&gt; Tail;</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160;};</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160;</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4&gt;</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;<span class="keyword">struct </span>Types4 {</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160; <span class="keyword">typedef</span> Types3&lt;T2, T3, T4&gt; Tail;</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160;};</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5&gt;</div><div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160;<span class="keyword">struct </span>Types5 {</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160; <span class="keyword">typedef</span> Types4&lt;T2, T3, T4, T5&gt; Tail;</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;};</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160; <span class="keyword">typename</span> T6&gt;</div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;<span class="keyword">struct </span>Types6 {</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160; <span class="keyword">typedef</span> Types5&lt;T2, T3, T4, T5, T6&gt; Tail;</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;};</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7&gt;</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;<span class="keyword">struct </span>Types7 {</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160; <span class="keyword">typedef</span> Types6&lt;T2, T3, T4, T5, T6, T7&gt; Tail;</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;};</div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8&gt;</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;<span class="keyword">struct </span>Types8 {</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160; <span class="keyword">typedef</span> Types7&lt;T2, T3, T4, T5, T6, T7, T8&gt; Tail;</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;};</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9&gt;</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;<span class="keyword">struct </span>Types9 {</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160; <span class="keyword">typedef</span> Types8&lt;T2, T3, T4, T5, T6, T7, T8, T9&gt; Tail;</div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;};</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;</div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10&gt;</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;<span class="keyword">struct </span>Types10 {</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160; <span class="keyword">typedef</span> Types9&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10&gt; Tail;</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;};</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160; <span class="keyword">typename</span> T11&gt;</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;<span class="keyword">struct </span>Types11 {</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160; <span class="keyword">typedef</span> Types10&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11&gt; Tail;</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;};</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;</div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12&gt;</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;<span class="keyword">struct </span>Types12 {</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160; <span class="keyword">typedef</span> Types11&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12&gt; Tail;</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;};</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13&gt;</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;<span class="keyword">struct </span>Types13 {</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160; <span class="keyword">typedef</span> Types12&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13&gt; Tail;</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160;};</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14&gt;</div><div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160;<span class="keyword">struct </span>Types14 {</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160; <span class="keyword">typedef</span> Types13&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14&gt; Tail;</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160;};</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15&gt;</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;<span class="keyword">struct </span>Types15 {</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160; <span class="keyword">typedef</span> Types14&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160; T15&gt; Tail;</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;};</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160; <span class="keyword">typename</span> T16&gt;</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;<span class="keyword">struct </span>Types16 {</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160; <span class="keyword">typedef</span> Types15&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160; T16&gt; Tail;</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;};</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17&gt;</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;<span class="keyword">struct </span>Types17 {</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160; <span class="keyword">typedef</span> Types16&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160; T16, T17&gt; Tail;</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;};</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;</div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18&gt;</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;<span class="keyword">struct </span>Types18 {</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160; <span class="keyword">typedef</span> Types17&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160; T16, T17, T18&gt; Tail;</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;};</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19&gt;</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;<span class="keyword">struct </span>Types19 {</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160; <span class="keyword">typedef</span> Types18&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160; T16, T17, T18, T19&gt; Tail;</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160;};</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160;</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20&gt;</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;<span class="keyword">struct </span>Types20 {</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160; <span class="keyword">typedef</span> Types19&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160; T16, T17, T18, T19, T20&gt; Tail;</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;};</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160; <span class="keyword">typename</span> T21&gt;</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;<span class="keyword">struct </span>Types21 {</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160; <span class="keyword">typedef</span> Types20&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160; T16, T17, T18, T19, T20, T21&gt; Tail;</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160;};</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22&gt;</div><div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;<span class="keyword">struct </span>Types22 {</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160; <span class="keyword">typedef</span> Types21&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160; T16, T17, T18, T19, T20, T21, T22&gt; Tail;</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;};</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23&gt;</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;<span class="keyword">struct </span>Types23 {</div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160; <span class="keyword">typedef</span> Types22&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23&gt; Tail;</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;};</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24&gt;</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;<span class="keyword">struct </span>Types24 {</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160; <span class="keyword">typedef</span> Types23&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24&gt; Tail;</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;};</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25&gt;</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;<span class="keyword">struct </span>Types25 {</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160; <span class="keyword">typedef</span> Types24&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25&gt; Tail;</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;};</div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160; <span class="keyword">typename</span> T26&gt;</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160;<span class="keyword">struct </span>Types26 {</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160; <span class="keyword">typedef</span> Types25&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26&gt; Tail;</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;};</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27&gt;</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;<span class="keyword">struct </span>Types27 {</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160; <span class="keyword">typedef</span> Types26&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27&gt; Tail;</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;};</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28&gt;</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;<span class="keyword">struct </span>Types28 {</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160; <span class="keyword">typedef</span> Types27&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28&gt; Tail;</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;};</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160;</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29&gt;</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;<span class="keyword">struct </span>Types29 {</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160; <span class="keyword">typedef</span> Types28&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160; T29&gt; Tail;</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160;};</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160;</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30&gt;</div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;<span class="keyword">struct </span>Types30 {</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160; <span class="keyword">typedef</span> Types29&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160; T30&gt; Tail;</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;};</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160; <span class="keyword">typename</span> T31&gt;</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;<span class="keyword">struct </span>Types31 {</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160; <span class="keyword">typedef</span> Types30&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160; T30, T31&gt; Tail;</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;};</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;</div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32&gt;</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;<span class="keyword">struct </span>Types32 {</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160; <span class="keyword">typedef</span> Types31&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160; T30, T31, T32&gt; Tail;</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;};</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33&gt;</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;<span class="keyword">struct </span>Types33 {</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160; <span class="keyword">typedef</span> Types32&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160; T30, T31, T32, T33&gt; Tail;</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;};</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;</div><div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34&gt;</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;<span class="keyword">struct </span>Types34 {</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160; <span class="keyword">typedef</span> Types33&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160; T30, T31, T32, T33, T34&gt; Tail;</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;};</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35&gt;</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;<span class="keyword">struct </span>Types35 {</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160; <span class="keyword">typedef</span> Types34&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160; T30, T31, T32, T33, T34, T35&gt; Tail;</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160;};</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160; <span class="keyword">typename</span> T36&gt;</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;<span class="keyword">struct </span>Types36 {</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; <span class="keyword">typedef</span> Types35&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160; T30, T31, T32, T33, T34, T35, T36&gt; Tail;</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;};</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37&gt;</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160;<span class="keyword">struct </span>Types37 {</div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160; <span class="keyword">typedef</span> Types36&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37&gt; Tail;</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;};</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160;</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38&gt;</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;<span class="keyword">struct </span>Types38 {</div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160; <span class="keyword">typedef</span> Types37&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38&gt; Tail;</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;};</div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39&gt;</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;<span class="keyword">struct </span>Types39 {</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160; <span class="keyword">typedef</span> Types38&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39&gt; Tail;</div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;};</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;</div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40&gt;</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160;<span class="keyword">struct </span>Types40 {</div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160; <span class="keyword">typedef</span> Types39&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40&gt; Tail;</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160;};</div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;</div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160; <span class="keyword">typename</span> T41&gt;</div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160;<span class="keyword">struct </span>Types41 {</div><div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160; <span class="keyword">typedef</span> Types40&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41&gt; Tail;</div><div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>&#160;};</div><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160;</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42&gt;</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160;<span class="keyword">struct </span>Types42 {</div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160; <span class="keyword">typedef</span> Types41&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42&gt; Tail;</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;};</div><div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>&#160;</div><div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43&gt;</div><div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>&#160;<span class="keyword">struct </span>Types43 {</div><div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>&#160; <span class="keyword">typedef</span> Types42&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>&#160; T43&gt; Tail;</div><div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>&#160;};</div><div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>&#160;</div><div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44&gt;</div><div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>&#160;<span class="keyword">struct </span>Types44 {</div><div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>&#160; <span class="keyword">typedef</span> Types43&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160; T44&gt; Tail;</div><div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>&#160;};</div><div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>&#160;</div><div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45&gt;</div><div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160;<span class="keyword">struct </span>Types45 {</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160; <span class="keyword">typedef</span> Types44&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160; T44, T45&gt; Tail;</div><div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>&#160;};</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160;</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160; <span class="keyword">typename</span> T46&gt;</div><div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>&#160;<span class="keyword">struct </span>Types46 {</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>&#160; <span class="keyword">typedef</span> Types45&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>&#160; T44, T45, T46&gt; Tail;</div><div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>&#160;};</div><div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>&#160;</div><div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47&gt;</div><div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>&#160;<span class="keyword">struct </span>Types47 {</div><div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>&#160; <span class="keyword">typedef</span> Types46&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>&#160; T44, T45, T46, T47&gt; Tail;</div><div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>&#160;};</div><div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>&#160;</div><div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48&gt;</div><div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160;<span class="keyword">struct </span>Types48 {</div><div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160; <span class="keyword">typedef</span> Types47&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>&#160; T44, T45, T46, T47, T48&gt; Tail;</div><div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>&#160;};</div><div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>&#160;</div><div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48, <span class="keyword">typename</span> T49&gt;</div><div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>&#160;<span class="keyword">struct </span>Types49 {</div><div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>&#160; <span class="keyword">typedef</span> Types48&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>&#160; T44, T45, T46, T47, T48, T49&gt; Tail;</div><div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>&#160;};</div><div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>&#160;</div><div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48, <span class="keyword">typename</span> T49, <span class="keyword">typename</span> T50&gt;</div><div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160;<span class="keyword">struct </span>Types50 {</div><div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160; <span class="keyword">typedef</span> T1 Head;</div><div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160; <span class="keyword">typedef</span> Types49&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>&#160; T44, T45, T46, T47, T48, T49, T50&gt; Tail;</div><div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>&#160;};</div><div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>&#160;</div><div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>&#160;</div><div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160;</div><div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160;<span class="comment">// We don&#39;t want to require the users to write TypesN&lt;...&gt; directly,</span></div><div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>&#160;<span class="comment">// as that would require them to count the length. Types&lt;...&gt; is much</span></div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160;<span class="comment">// easier to write, but generates horrible messages when there is a</span></div><div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160;<span class="comment">// compiler error, as gcc insists on printing out each template</span></div><div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>&#160;<span class="comment">// argument, even if it has the default value (this means Types&lt;int&gt;</span></div><div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>&#160;<span class="comment">// will appear as Types&lt;int, None, None, ..., None&gt; in the compiler</span></div><div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>&#160;<span class="comment">// errors).</span></div><div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>&#160;<span class="comment">// Our solution is to combine the best part of the two approaches: a</span></div><div class="line"><a name="l03893"></a><span class="lineno"> 3893</span>&#160;<span class="comment">// user would write Types&lt;T1, ..., TN&gt;, and Google Test will translate</span></div><div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>&#160;<span class="comment">// that to TypesN&lt;T1, ..., TN&gt; internally to make error messages</span></div><div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>&#160;<span class="comment">// readable. The translation is done by the &#39;type&#39; member of the</span></div><div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>&#160;<span class="comment">// Types template.</span></div><div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1 = internal::None, <span class="keyword">typename</span> T2 = internal::None,</div><div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>&#160; <span class="keyword">typename</span> T3 = internal::None, <span class="keyword">typename</span> T4 = internal::None,</div><div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>&#160; <span class="keyword">typename</span> T5 = internal::None, <span class="keyword">typename</span> T6 = internal::None,</div><div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>&#160; <span class="keyword">typename</span> T7 = internal::None, <span class="keyword">typename</span> T8 = internal::None,</div><div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>&#160; <span class="keyword">typename</span> T9 = internal::None, <span class="keyword">typename</span> T10 = internal::None,</div><div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>&#160; <span class="keyword">typename</span> T11 = internal::None, <span class="keyword">typename</span> T12 = internal::None,</div><div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>&#160; <span class="keyword">typename</span> T13 = internal::None, <span class="keyword">typename</span> T14 = internal::None,</div><div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>&#160; <span class="keyword">typename</span> T15 = internal::None, <span class="keyword">typename</span> T16 = internal::None,</div><div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>&#160; <span class="keyword">typename</span> T17 = internal::None, <span class="keyword">typename</span> T18 = internal::None,</div><div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>&#160; <span class="keyword">typename</span> T19 = internal::None, <span class="keyword">typename</span> T20 = internal::None,</div><div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>&#160; <span class="keyword">typename</span> T21 = internal::None, <span class="keyword">typename</span> T22 = internal::None,</div><div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>&#160; <span class="keyword">typename</span> T23 = internal::None, <span class="keyword">typename</span> T24 = internal::None,</div><div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>&#160; <span class="keyword">typename</span> T25 = internal::None, <span class="keyword">typename</span> T26 = internal::None,</div><div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>&#160; <span class="keyword">typename</span> T27 = internal::None, <span class="keyword">typename</span> T28 = internal::None,</div><div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>&#160; <span class="keyword">typename</span> T29 = internal::None, <span class="keyword">typename</span> T30 = internal::None,</div><div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>&#160; <span class="keyword">typename</span> T31 = internal::None, <span class="keyword">typename</span> T32 = internal::None,</div><div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>&#160; <span class="keyword">typename</span> T33 = internal::None, <span class="keyword">typename</span> T34 = internal::None,</div><div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>&#160; <span class="keyword">typename</span> T35 = internal::None, <span class="keyword">typename</span> T36 = internal::None,</div><div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>&#160; <span class="keyword">typename</span> T37 = internal::None, <span class="keyword">typename</span> T38 = internal::None,</div><div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>&#160; <span class="keyword">typename</span> T39 = internal::None, <span class="keyword">typename</span> T40 = internal::None,</div><div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>&#160; <span class="keyword">typename</span> T41 = internal::None, <span class="keyword">typename</span> T42 = internal::None,</div><div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>&#160; <span class="keyword">typename</span> T43 = internal::None, <span class="keyword">typename</span> T44 = internal::None,</div><div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>&#160; <span class="keyword">typename</span> T45 = internal::None, <span class="keyword">typename</span> T46 = internal::None,</div><div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>&#160; <span class="keyword">typename</span> T47 = internal::None, <span class="keyword">typename</span> T48 = internal::None,</div><div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>&#160; <span class="keyword">typename</span> T49 = internal::None, <span class="keyword">typename</span> T50 = internal::None&gt;</div><div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>&#160;<span class="keyword">struct </span>Types {</div><div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>&#160; <span class="keyword">typedef</span> internal::Types50&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>&#160; T41, T42, T43, T44, T45, T46, T47, T48, T49, T50&gt; type;</div><div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>&#160;};</div><div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>&#160;</div><div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>&#160;<span class="keyword">struct </span>Types&lt;internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160; <span class="keyword">typedef</span> internal::Types0 type;</div><div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160;};</div><div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1&gt;</div><div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160;<span class="keyword">struct </span>Types&lt;T1, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>&#160; <span class="keyword">typedef</span> internal::Types1&lt;T1&gt; type;</div><div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>&#160;};</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160; internal::None&gt; {</div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160; <span class="keyword">typedef</span> internal::Types2&lt;T1, T2&gt; type;</div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160;};</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3&gt;</div><div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160; <span class="keyword">typedef</span> internal::Types3&lt;T1, T2, T3&gt; type;</div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160;};</div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4&gt;</div><div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>&#160; <span class="keyword">typedef</span> internal::Types4&lt;T1, T2, T3, T4&gt; type;</div><div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>&#160;};</div><div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5&gt;</div><div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, internal::None, internal::None,</div><div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04012"></a><span class="lineno"> 4012</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>&#160; <span class="keyword">typedef</span> internal::Types5&lt;T1, T2, T3, T4, T5&gt; type;</div><div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>&#160;};</div><div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>&#160; <span class="keyword">typename</span> T6&gt;</div><div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, internal::None, internal::None,</div><div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04033"></a><span class="lineno"> 4033</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04034"></a><span class="lineno"> 4034</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>&#160; <span class="keyword">typedef</span> internal::Types6&lt;T1, T2, T3, T4, T5, T6&gt; type;</div><div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>&#160;};</div><div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7&gt;</div><div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,</div><div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160; <span class="keyword">typedef</span> internal::Types7&lt;T1, T2, T3, T4, T5, T6, T7&gt; type;</div><div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160;};</div><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8&gt;</div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,</div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160; <span class="keyword">typedef</span> internal::Types8&lt;T1, T2, T3, T4, T5, T6, T7, T8&gt; type;</div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160;};</div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9&gt;</div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160; <span class="keyword">typedef</span> internal::Types9&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9&gt; type;</div><div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160;};</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10&gt;</div><div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,</div><div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160; <span class="keyword">typedef</span> internal::Types10&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10&gt; type;</div><div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160;};</div><div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160; <span class="keyword">typename</span> T11&gt;</div><div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,</div><div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>&#160; <span class="keyword">typedef</span> internal::Types11&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11&gt; type;</div><div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>&#160;};</div><div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12&gt;</div><div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,</div><div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>&#160; <span class="keyword">typedef</span> internal::Types12&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,</div><div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>&#160; T12&gt; type;</div><div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>&#160;};</div><div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13&gt;</div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>&#160; <span class="keyword">typedef</span> internal::Types13&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>&#160; T13&gt; type;</div><div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>&#160;};</div><div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14&gt;</div><div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04158"></a><span class="lineno"> 4158</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>&#160; <span class="keyword">typedef</span> internal::Types14&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04163"></a><span class="lineno"> 4163</span>&#160; T13, T14&gt; type;</div><div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>&#160;};</div><div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15&gt;</div><div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>&#160; <span class="keyword">typedef</span> internal::Types15&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>&#160; T13, T14, T15&gt; type;</div><div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>&#160;};</div><div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>&#160; <span class="keyword">typename</span> T16&gt;</div><div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>&#160; T16, internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04190"></a><span class="lineno"> 4190</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>&#160; <span class="keyword">typedef</span> internal::Types16&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160; T13, T14, T15, T16&gt; type;</div><div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>&#160;};</div><div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17&gt;</div><div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>&#160; T16, T17, internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>&#160; <span class="keyword">typedef</span> internal::Types17&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>&#160; T13, T14, T15, T16, T17&gt; type;</div><div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>&#160;};</div><div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18&gt;</div><div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>&#160; T16, T17, T18, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>&#160; <span class="keyword">typedef</span> internal::Types18&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>&#160; T13, T14, T15, T16, T17, T18&gt; type;</div><div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>&#160;};</div><div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19&gt;</div><div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>&#160; T16, T17, T18, T19, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>&#160; <span class="keyword">typedef</span> internal::Types19&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>&#160; T13, T14, T15, T16, T17, T18, T19&gt; type;</div><div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>&#160;};</div><div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20&gt;</div><div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>&#160; T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>&#160; <span class="keyword">typedef</span> internal::Types20&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20&gt; type;</div><div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>&#160;};</div><div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>&#160; <span class="keyword">typename</span> T21&gt;</div><div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>&#160; T16, T17, T18, T19, T20, T21, internal::None, internal::None,</div><div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>&#160; <span class="keyword">typedef</span> internal::Types21&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21&gt; type;</div><div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>&#160;};</div><div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22&gt;</div><div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>&#160; T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,</div><div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04294"></a><span class="lineno"> 4294</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>&#160; <span class="keyword">typedef</span> internal::Types22&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22&gt; type;</div><div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>&#160;};</div><div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23&gt;</div><div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,</div><div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>&#160; <span class="keyword">typedef</span> internal::Types23&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23&gt; type;</div><div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>&#160;};</div><div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24&gt;</div><div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,</div><div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>&#160; <span class="keyword">typedef</span> internal::Types24&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24&gt; type;</div><div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>&#160;};</div><div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25&gt;</div><div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,</div><div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>&#160; <span class="keyword">typedef</span> internal::Types25&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25&gt; type;</div><div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>&#160;};</div><div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>&#160; <span class="keyword">typename</span> T26&gt;</div><div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,</div><div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>&#160; <span class="keyword">typedef</span> internal::Types26&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,</div><div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>&#160; T26&gt; type;</div><div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>&#160;};</div><div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27&gt;</div><div class="line"><a name="l04372"></a><span class="lineno"> 4372</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,</div><div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>&#160; <span class="keyword">typedef</span> internal::Types27&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>&#160; T27&gt; type;</div><div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>&#160;};</div><div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28&gt;</div><div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>&#160; <span class="keyword">typedef</span> internal::Types28&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04400"></a><span class="lineno"> 4400</span>&#160; T27, T28&gt; type;</div><div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>&#160;};</div><div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29&gt;</div><div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>&#160; <span class="keyword">typedef</span> internal::Types29&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>&#160; T27, T28, T29&gt; type;</div><div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>&#160;};</div><div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30&gt;</div><div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04432"></a><span class="lineno"> 4432</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>&#160; <span class="keyword">typedef</span> internal::Types30&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>&#160; T27, T28, T29, T30&gt; type;</div><div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>&#160;};</div><div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>&#160; <span class="keyword">typename</span> T31&gt;</div><div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>&#160; T31, internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04448"></a><span class="lineno"> 4448</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04450"></a><span class="lineno"> 4450</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>&#160; <span class="keyword">typedef</span> internal::Types31&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>&#160; T27, T28, T29, T30, T31&gt; type;</div><div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>&#160;};</div><div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04461"></a><span class="lineno"> 4461</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32&gt;</div><div class="line"><a name="l04462"></a><span class="lineno"> 4462</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04463"></a><span class="lineno"> 4463</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>&#160; T31, T32, internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04465"></a><span class="lineno"> 4465</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>&#160; <span class="keyword">typedef</span> internal::Types32&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>&#160; T27, T28, T29, T30, T31, T32&gt; type;</div><div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>&#160;};</div><div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04479"></a><span class="lineno"> 4479</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33&gt;</div><div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>&#160; T31, T32, T33, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>&#160; <span class="keyword">typedef</span> internal::Types33&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>&#160; T27, T28, T29, T30, T31, T32, T33&gt; type;</div><div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>&#160;};</div><div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34&gt;</div><div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>&#160; T31, T32, T33, T34, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>&#160; <span class="keyword">typedef</span> internal::Types34&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34&gt; type;</div><div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>&#160;};</div><div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35&gt;</div><div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>&#160; T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04522"></a><span class="lineno"> 4522</span>&#160; <span class="keyword">typedef</span> internal::Types35&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04523"></a><span class="lineno"> 4523</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35&gt; type;</div><div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>&#160;};</div><div class="line"><a name="l04526"></a><span class="lineno"> 4526</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04527"></a><span class="lineno"> 4527</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04528"></a><span class="lineno"> 4528</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04531"></a><span class="lineno"> 4531</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>&#160; <span class="keyword">typename</span> T36&gt;</div><div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>&#160; T31, T32, T33, T34, T35, T36, internal::None, internal::None,</div><div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>&#160; <span class="keyword">typedef</span> internal::Types36&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36&gt; type;</div><div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>&#160;};</div><div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37&gt;</div><div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>&#160; T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,</div><div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>&#160; <span class="keyword">typedef</span> internal::Types37&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37&gt; type;</div><div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>&#160;};</div><div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04563"></a><span class="lineno"> 4563</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04564"></a><span class="lineno"> 4564</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38&gt;</div><div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,</div><div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>&#160; <span class="keyword">typedef</span> internal::Types38&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38&gt; type;</div><div class="line"><a name="l04579"></a><span class="lineno"> 4579</span>&#160;};</div><div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39&gt;</div><div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,</div><div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>&#160; <span class="keyword">typedef</span> internal::Types39&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04596"></a><span class="lineno"> 4596</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39&gt; type;</div><div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>&#160;};</div><div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40&gt;</div><div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,</div><div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04610"></a><span class="lineno"> 4610</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04611"></a><span class="lineno"> 4611</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04612"></a><span class="lineno"> 4612</span>&#160; <span class="keyword">typedef</span> internal::Types40&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,</div><div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>&#160; T40&gt; type;</div><div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>&#160;};</div><div class="line"><a name="l04617"></a><span class="lineno"> 4617</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04618"></a><span class="lineno"> 4618</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04620"></a><span class="lineno"> 4620</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04622"></a><span class="lineno"> 4622</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04623"></a><span class="lineno"> 4623</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04624"></a><span class="lineno"> 4624</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04625"></a><span class="lineno"> 4625</span>&#160; <span class="keyword">typename</span> T41&gt;</div><div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04627"></a><span class="lineno"> 4627</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,</div><div class="line"><a name="l04629"></a><span class="lineno"> 4629</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>&#160; internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>&#160; <span class="keyword">typedef</span> internal::Types41&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04634"></a><span class="lineno"> 4634</span>&#160; T41&gt; type;</div><div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>&#160;};</div><div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04637"></a><span class="lineno"> 4637</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42&gt;</div><div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,</div><div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>&#160; <span class="keyword">typedef</span> internal::Types42&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>&#160; T41, T42&gt; type;</div><div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>&#160;};</div><div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04657"></a><span class="lineno"> 4657</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04659"></a><span class="lineno"> 4659</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04660"></a><span class="lineno"> 4660</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04661"></a><span class="lineno"> 4661</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04662"></a><span class="lineno"> 4662</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04663"></a><span class="lineno"> 4663</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43&gt;</div><div class="line"><a name="l04664"></a><span class="lineno"> 4664</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04666"></a><span class="lineno"> 4666</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04668"></a><span class="lineno"> 4668</span>&#160; internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>&#160; <span class="keyword">typedef</span> internal::Types43&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04670"></a><span class="lineno"> 4670</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>&#160; T41, T42, T43&gt; type;</div><div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>&#160;};</div><div class="line"><a name="l04674"></a><span class="lineno"> 4674</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04677"></a><span class="lineno"> 4677</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04678"></a><span class="lineno"> 4678</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04679"></a><span class="lineno"> 4679</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44&gt;</div><div class="line"><a name="l04683"></a><span class="lineno"> 4683</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04684"></a><span class="lineno"> 4684</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04685"></a><span class="lineno"> 4685</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04687"></a><span class="lineno"> 4687</span>&#160; internal::None, internal::None&gt; {</div><div class="line"><a name="l04688"></a><span class="lineno"> 4688</span>&#160; <span class="keyword">typedef</span> internal::Types44&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04689"></a><span class="lineno"> 4689</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04690"></a><span class="lineno"> 4690</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04691"></a><span class="lineno"> 4691</span>&#160; T41, T42, T43, T44&gt; type;</div><div class="line"><a name="l04692"></a><span class="lineno"> 4692</span>&#160;};</div><div class="line"><a name="l04693"></a><span class="lineno"> 4693</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04694"></a><span class="lineno"> 4694</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04696"></a><span class="lineno"> 4696</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04699"></a><span class="lineno"> 4699</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04701"></a><span class="lineno"> 4701</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45&gt;</div><div class="line"><a name="l04702"></a><span class="lineno"> 4702</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04704"></a><span class="lineno"> 4704</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,</div><div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>&#160; internal::None, internal::None, internal::None, internal::None,</div><div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>&#160; internal::None&gt; {</div><div class="line"><a name="l04707"></a><span class="lineno"> 4707</span>&#160; <span class="keyword">typedef</span> internal::Types45&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>&#160; T41, T42, T43, T44, T45&gt; type;</div><div class="line"><a name="l04711"></a><span class="lineno"> 4711</span>&#160;};</div><div class="line"><a name="l04712"></a><span class="lineno"> 4712</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>&#160; <span class="keyword">typename</span> T46&gt;</div><div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04723"></a><span class="lineno"> 4723</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04724"></a><span class="lineno"> 4724</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,</div><div class="line"><a name="l04725"></a><span class="lineno"> 4725</span>&#160; T46, internal::None, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04726"></a><span class="lineno"> 4726</span>&#160; <span class="keyword">typedef</span> internal::Types46&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04727"></a><span class="lineno"> 4727</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04728"></a><span class="lineno"> 4728</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04729"></a><span class="lineno"> 4729</span>&#160; T41, T42, T43, T44, T45, T46&gt; type;</div><div class="line"><a name="l04730"></a><span class="lineno"> 4730</span>&#160;};</div><div class="line"><a name="l04731"></a><span class="lineno"> 4731</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04732"></a><span class="lineno"> 4732</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04733"></a><span class="lineno"> 4733</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04734"></a><span class="lineno"> 4734</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04735"></a><span class="lineno"> 4735</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04736"></a><span class="lineno"> 4736</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04737"></a><span class="lineno"> 4737</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04738"></a><span class="lineno"> 4738</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04739"></a><span class="lineno"> 4739</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l04740"></a><span class="lineno"> 4740</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47&gt;</div><div class="line"><a name="l04741"></a><span class="lineno"> 4741</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04742"></a><span class="lineno"> 4742</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04743"></a><span class="lineno"> 4743</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,</div><div class="line"><a name="l04744"></a><span class="lineno"> 4744</span>&#160; T46, T47, internal::None, internal::None, internal::None&gt; {</div><div class="line"><a name="l04745"></a><span class="lineno"> 4745</span>&#160; <span class="keyword">typedef</span> internal::Types47&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04746"></a><span class="lineno"> 4746</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04747"></a><span class="lineno"> 4747</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04748"></a><span class="lineno"> 4748</span>&#160; T41, T42, T43, T44, T45, T46, T47&gt; type;</div><div class="line"><a name="l04749"></a><span class="lineno"> 4749</span>&#160;};</div><div class="line"><a name="l04750"></a><span class="lineno"> 4750</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04751"></a><span class="lineno"> 4751</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04752"></a><span class="lineno"> 4752</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04753"></a><span class="lineno"> 4753</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04754"></a><span class="lineno"> 4754</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04755"></a><span class="lineno"> 4755</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04756"></a><span class="lineno"> 4756</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04757"></a><span class="lineno"> 4757</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04758"></a><span class="lineno"> 4758</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l04759"></a><span class="lineno"> 4759</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48&gt;</div><div class="line"><a name="l04760"></a><span class="lineno"> 4760</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04761"></a><span class="lineno"> 4761</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04762"></a><span class="lineno"> 4762</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,</div><div class="line"><a name="l04763"></a><span class="lineno"> 4763</span>&#160; T46, T47, T48, internal::None, internal::None&gt; {</div><div class="line"><a name="l04764"></a><span class="lineno"> 4764</span>&#160; <span class="keyword">typedef</span> internal::Types48&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04765"></a><span class="lineno"> 4765</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04766"></a><span class="lineno"> 4766</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04767"></a><span class="lineno"> 4767</span>&#160; T41, T42, T43, T44, T45, T46, T47, T48&gt; type;</div><div class="line"><a name="l04768"></a><span class="lineno"> 4768</span>&#160;};</div><div class="line"><a name="l04769"></a><span class="lineno"> 4769</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l04770"></a><span class="lineno"> 4770</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l04774"></a><span class="lineno"> 4774</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l04775"></a><span class="lineno"> 4775</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l04776"></a><span class="lineno"> 4776</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l04778"></a><span class="lineno"> 4778</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48, <span class="keyword">typename</span> T49&gt;</div><div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>&#160;<span class="keyword">struct </span>Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,</div><div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>&#160; T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,</div><div class="line"><a name="l04781"></a><span class="lineno"> 4781</span>&#160; T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,</div><div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>&#160; T46, T47, T48, T49, internal::None&gt; {</div><div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>&#160; <span class="keyword">typedef</span> internal::Types49&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l04784"></a><span class="lineno"> 4784</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l04785"></a><span class="lineno"> 4785</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>&#160; T41, T42, T43, T44, T45, T46, T47, T48, T49&gt; type;</div><div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>&#160;};</div><div class="line"><a name="l04788"></a><span class="lineno"> 4788</span>&#160;</div><div class="line"><a name="l04789"></a><span class="lineno"> 4789</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>&#160;</div><div class="line"><a name="l04791"></a><span class="lineno"> 4791</span>&#160;<span class="preprocessor"># define GTEST_TEMPLATE_ template &lt;typename T&gt; class</span></div><div class="line"><a name="l04792"></a><span class="lineno"> 4792</span>&#160;</div><div class="line"><a name="l04793"></a><span class="lineno"> 4793</span>&#160;<span class="comment">// The template &quot;selector&quot; struct TemplateSel&lt;Tmpl&gt; is used to</span></div><div class="line"><a name="l04794"></a><span class="lineno"> 4794</span>&#160;<span class="comment">// represent Tmpl, which must be a class template with one type</span></div><div class="line"><a name="l04795"></a><span class="lineno"> 4795</span>&#160;<span class="comment">// parameter, as a type. TemplateSel&lt;Tmpl&gt;::Bind&lt;T&gt;::type is defined</span></div><div class="line"><a name="l04796"></a><span class="lineno"> 4796</span>&#160;<span class="comment">// as the type Tmpl&lt;T&gt;. This allows us to actually instantiate the</span></div><div class="line"><a name="l04797"></a><span class="lineno"> 4797</span>&#160;<span class="comment">// template &quot;selected&quot; by TemplateSel&lt;Tmpl&gt;.</span></div><div class="line"><a name="l04798"></a><span class="lineno"> 4798</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l04799"></a><span class="lineno"> 4799</span>&#160;<span class="comment">// This trick is necessary for simulating typedef for class templates,</span></div><div class="line"><a name="l04800"></a><span class="lineno"> 4800</span>&#160;<span class="comment">// which C++ doesn&#39;t support directly.</span></div><div class="line"><a name="l04801"></a><span class="lineno"> 4801</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ Tmpl&gt;</div><div class="line"><a name="l04802"></a><span class="lineno"> 4802</span>&#160;<span class="keyword">struct </span>TemplateSel {</div><div class="line"><a name="l04803"></a><span class="lineno"> 4803</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l04804"></a><span class="lineno"> 4804</span>&#160; <span class="keyword">struct </span>Bind {</div><div class="line"><a name="l04805"></a><span class="lineno"> 4805</span>&#160; <span class="keyword">typedef</span> Tmpl&lt;T&gt; type;</div><div class="line"><a name="l04806"></a><span class="lineno"> 4806</span>&#160; };</div><div class="line"><a name="l04807"></a><span class="lineno"> 4807</span>&#160;};</div><div class="line"><a name="l04808"></a><span class="lineno"> 4808</span>&#160;</div><div class="line"><a name="l04809"></a><span class="lineno"> 4809</span>&#160;<span class="preprocessor"># define GTEST_BIND_(TmplSel, T) \</span></div><div class="line"><a name="l04810"></a><span class="lineno"> 4810</span>&#160;<span class="preprocessor"> TmplSel::template Bind&lt;T&gt;::type</span></div><div class="line"><a name="l04811"></a><span class="lineno"> 4811</span>&#160;</div><div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>&#160;<span class="comment">// A unique struct template used as the default value for the</span></div><div class="line"><a name="l04813"></a><span class="lineno"> 4813</span>&#160;<span class="comment">// arguments of class template Templates. This allows us to simulate</span></div><div class="line"><a name="l04814"></a><span class="lineno"> 4814</span>&#160;<span class="comment">// variadic templates (e.g. Templates&lt;int&gt;, Templates&lt;int, double&gt;,</span></div><div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>&#160;<span class="comment">// and etc), which C++ doesn&#39;t support directly.</span></div><div class="line"><a name="l04816"></a><span class="lineno"> 4816</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l04817"></a><span class="lineno"> 4817</span>&#160;<span class="keyword">struct </span>NoneT {};</div><div class="line"><a name="l04818"></a><span class="lineno"> 4818</span>&#160;</div><div class="line"><a name="l04819"></a><span class="lineno"> 4819</span>&#160;<span class="comment">// The following family of struct and struct templates are used to</span></div><div class="line"><a name="l04820"></a><span class="lineno"> 4820</span>&#160;<span class="comment">// represent template lists. In particular, TemplatesN&lt;T1, T2, ...,</span></div><div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>&#160;<span class="comment">// TN&gt; represents a list of N templates (T1, T2, ..., and TN). Except</span></div><div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>&#160;<span class="comment">// for Templates0, every struct in the family has two member types:</span></div><div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>&#160;<span class="comment">// Head for the selector of the first template in the list, and Tail</span></div><div class="line"><a name="l04824"></a><span class="lineno"> 4824</span>&#160;<span class="comment">// for the rest of the list.</span></div><div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>&#160;</div><div class="line"><a name="l04826"></a><span class="lineno"> 4826</span>&#160;<span class="comment">// The empty template list.</span></div><div class="line"><a name="l04827"></a><span class="lineno"> 4827</span>&#160;<span class="keyword">struct </span>Templates0 {};</div><div class="line"><a name="l04828"></a><span class="lineno"> 4828</span>&#160;</div><div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>&#160;<span class="comment">// Template lists of length 1, 2, 3, and so on.</span></div><div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>&#160;</div><div class="line"><a name="l04831"></a><span class="lineno"> 4831</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1&gt;</div><div class="line"><a name="l04832"></a><span class="lineno"> 4832</span>&#160;<span class="keyword">struct </span>Templates1 {</div><div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>&#160; <span class="keyword">typedef</span> Templates0 Tail;</div><div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>&#160;};</div><div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2&gt;</div><div class="line"><a name="l04837"></a><span class="lineno"> 4837</span>&#160;<span class="keyword">struct </span>Templates2 {</div><div class="line"><a name="l04838"></a><span class="lineno"> 4838</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04839"></a><span class="lineno"> 4839</span>&#160; <span class="keyword">typedef</span> Templates1&lt;T2&gt; Tail;</div><div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>&#160;};</div><div class="line"><a name="l04841"></a><span class="lineno"> 4841</span>&#160;</div><div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3&gt;</div><div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>&#160;<span class="keyword">struct </span>Templates3 {</div><div class="line"><a name="l04844"></a><span class="lineno"> 4844</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>&#160; <span class="keyword">typedef</span> Templates2&lt;T2, T3&gt; Tail;</div><div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>&#160;};</div><div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>&#160;</div><div class="line"><a name="l04848"></a><span class="lineno"> 4848</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>&#160; GTEST_TEMPLATE_ T4&gt;</div><div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>&#160;<span class="keyword">struct </span>Templates4 {</div><div class="line"><a name="l04851"></a><span class="lineno"> 4851</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04852"></a><span class="lineno"> 4852</span>&#160; <span class="keyword">typedef</span> Templates3&lt;T2, T3, T4&gt; Tail;</div><div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>&#160;};</div><div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>&#160;</div><div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5&gt;</div><div class="line"><a name="l04857"></a><span class="lineno"> 4857</span>&#160;<span class="keyword">struct </span>Templates5 {</div><div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>&#160; <span class="keyword">typedef</span> Templates4&lt;T2, T3, T4, T5&gt; Tail;</div><div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>&#160;};</div><div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>&#160;</div><div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6&gt;</div><div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>&#160;<span class="keyword">struct </span>Templates6 {</div><div class="line"><a name="l04865"></a><span class="lineno"> 4865</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04866"></a><span class="lineno"> 4866</span>&#160; <span class="keyword">typedef</span> Templates5&lt;T2, T3, T4, T5, T6&gt; Tail;</div><div class="line"><a name="l04867"></a><span class="lineno"> 4867</span>&#160;};</div><div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>&#160;</div><div class="line"><a name="l04869"></a><span class="lineno"> 4869</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>&#160; GTEST_TEMPLATE_ T7&gt;</div><div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>&#160;<span class="keyword">struct </span>Templates7 {</div><div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04874"></a><span class="lineno"> 4874</span>&#160; <span class="keyword">typedef</span> Templates6&lt;T2, T3, T4, T5, T6, T7&gt; Tail;</div><div class="line"><a name="l04875"></a><span class="lineno"> 4875</span>&#160;};</div><div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>&#160;</div><div class="line"><a name="l04877"></a><span class="lineno"> 4877</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04878"></a><span class="lineno"> 4878</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04879"></a><span class="lineno"> 4879</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8&gt;</div><div class="line"><a name="l04880"></a><span class="lineno"> 4880</span>&#160;<span class="keyword">struct </span>Templates8 {</div><div class="line"><a name="l04881"></a><span class="lineno"> 4881</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04882"></a><span class="lineno"> 4882</span>&#160; <span class="keyword">typedef</span> Templates7&lt;T2, T3, T4, T5, T6, T7, T8&gt; Tail;</div><div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>&#160;};</div><div class="line"><a name="l04884"></a><span class="lineno"> 4884</span>&#160;</div><div class="line"><a name="l04885"></a><span class="lineno"> 4885</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04887"></a><span class="lineno"> 4887</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9&gt;</div><div class="line"><a name="l04888"></a><span class="lineno"> 4888</span>&#160;<span class="keyword">struct </span>Templates9 {</div><div class="line"><a name="l04889"></a><span class="lineno"> 4889</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04890"></a><span class="lineno"> 4890</span>&#160; <span class="keyword">typedef</span> Templates8&lt;T2, T3, T4, T5, T6, T7, T8, T9&gt; Tail;</div><div class="line"><a name="l04891"></a><span class="lineno"> 4891</span>&#160;};</div><div class="line"><a name="l04892"></a><span class="lineno"> 4892</span>&#160;</div><div class="line"><a name="l04893"></a><span class="lineno"> 4893</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>&#160; GTEST_TEMPLATE_ T10&gt;</div><div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>&#160;<span class="keyword">struct </span>Templates10 {</div><div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04899"></a><span class="lineno"> 4899</span>&#160; <span class="keyword">typedef</span> Templates9&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10&gt; Tail;</div><div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>&#160;};</div><div class="line"><a name="l04901"></a><span class="lineno"> 4901</span>&#160;</div><div class="line"><a name="l04902"></a><span class="lineno"> 4902</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04903"></a><span class="lineno"> 4903</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04904"></a><span class="lineno"> 4904</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04905"></a><span class="lineno"> 4905</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11&gt;</div><div class="line"><a name="l04906"></a><span class="lineno"> 4906</span>&#160;<span class="keyword">struct </span>Templates11 {</div><div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>&#160; <span class="keyword">typedef</span> Templates10&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11&gt; Tail;</div><div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>&#160;};</div><div class="line"><a name="l04910"></a><span class="lineno"> 4910</span>&#160;</div><div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04912"></a><span class="lineno"> 4912</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12&gt;</div><div class="line"><a name="l04915"></a><span class="lineno"> 4915</span>&#160;<span class="keyword">struct </span>Templates12 {</div><div class="line"><a name="l04916"></a><span class="lineno"> 4916</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04917"></a><span class="lineno"> 4917</span>&#160; <span class="keyword">typedef</span> Templates11&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12&gt; Tail;</div><div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>&#160;};</div><div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>&#160;</div><div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04921"></a><span class="lineno"> 4921</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04922"></a><span class="lineno"> 4922</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04924"></a><span class="lineno"> 4924</span>&#160; GTEST_TEMPLATE_ T13&gt;</div><div class="line"><a name="l04925"></a><span class="lineno"> 4925</span>&#160;<span class="keyword">struct </span>Templates13 {</div><div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>&#160; <span class="keyword">typedef</span> Templates12&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13&gt; Tail;</div><div class="line"><a name="l04928"></a><span class="lineno"> 4928</span>&#160;};</div><div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>&#160;</div><div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04932"></a><span class="lineno"> 4932</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14&gt;</div><div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>&#160;<span class="keyword">struct </span>Templates14 {</div><div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>&#160; <span class="keyword">typedef</span> Templates13&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>&#160; T14&gt; Tail;</div><div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>&#160;};</div><div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>&#160;</div><div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15&gt;</div><div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>&#160;<span class="keyword">struct </span>Templates15 {</div><div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04948"></a><span class="lineno"> 4948</span>&#160; <span class="keyword">typedef</span> Templates14&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04949"></a><span class="lineno"> 4949</span>&#160; T15&gt; Tail;</div><div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>&#160;};</div><div class="line"><a name="l04951"></a><span class="lineno"> 4951</span>&#160;</div><div class="line"><a name="l04952"></a><span class="lineno"> 4952</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04956"></a><span class="lineno"> 4956</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>&#160; GTEST_TEMPLATE_ T16&gt;</div><div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>&#160;<span class="keyword">struct </span>Templates16 {</div><div class="line"><a name="l04959"></a><span class="lineno"> 4959</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04960"></a><span class="lineno"> 4960</span>&#160; <span class="keyword">typedef</span> Templates15&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04961"></a><span class="lineno"> 4961</span>&#160; T15, T16&gt; Tail;</div><div class="line"><a name="l04962"></a><span class="lineno"> 4962</span>&#160;};</div><div class="line"><a name="l04963"></a><span class="lineno"> 4963</span>&#160;</div><div class="line"><a name="l04964"></a><span class="lineno"> 4964</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04965"></a><span class="lineno"> 4965</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04966"></a><span class="lineno"> 4966</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04967"></a><span class="lineno"> 4967</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04968"></a><span class="lineno"> 4968</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l04969"></a><span class="lineno"> 4969</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17&gt;</div><div class="line"><a name="l04970"></a><span class="lineno"> 4970</span>&#160;<span class="keyword">struct </span>Templates17 {</div><div class="line"><a name="l04971"></a><span class="lineno"> 4971</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04972"></a><span class="lineno"> 4972</span>&#160; <span class="keyword">typedef</span> Templates16&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04973"></a><span class="lineno"> 4973</span>&#160; T15, T16, T17&gt; Tail;</div><div class="line"><a name="l04974"></a><span class="lineno"> 4974</span>&#160;};</div><div class="line"><a name="l04975"></a><span class="lineno"> 4975</span>&#160;</div><div class="line"><a name="l04976"></a><span class="lineno"> 4976</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04977"></a><span class="lineno"> 4977</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04978"></a><span class="lineno"> 4978</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18&gt;</div><div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>&#160;<span class="keyword">struct </span>Templates18 {</div><div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>&#160; <span class="keyword">typedef</span> Templates17&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>&#160; T15, T16, T17, T18&gt; Tail;</div><div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>&#160;};</div><div class="line"><a name="l04987"></a><span class="lineno"> 4987</span>&#160;</div><div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>&#160; GTEST_TEMPLATE_ T19&gt;</div><div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>&#160;<span class="keyword">struct </span>Templates19 {</div><div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>&#160; <span class="keyword">typedef</span> Templates18&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>&#160; T15, T16, T17, T18, T19&gt; Tail;</div><div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>&#160;};</div><div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>&#160;</div><div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05007"></a><span class="lineno"> 5007</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20&gt;</div><div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>&#160;<span class="keyword">struct </span>Templates20 {</div><div class="line"><a name="l05009"></a><span class="lineno"> 5009</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05010"></a><span class="lineno"> 5010</span>&#160; <span class="keyword">typedef</span> Templates19&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05011"></a><span class="lineno"> 5011</span>&#160; T15, T16, T17, T18, T19, T20&gt; Tail;</div><div class="line"><a name="l05012"></a><span class="lineno"> 5012</span>&#160;};</div><div class="line"><a name="l05013"></a><span class="lineno"> 5013</span>&#160;</div><div class="line"><a name="l05014"></a><span class="lineno"> 5014</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05016"></a><span class="lineno"> 5016</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05017"></a><span class="lineno"> 5017</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05018"></a><span class="lineno"> 5018</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21&gt;</div><div class="line"><a name="l05021"></a><span class="lineno"> 5021</span>&#160;<span class="keyword">struct </span>Templates21 {</div><div class="line"><a name="l05022"></a><span class="lineno"> 5022</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>&#160; <span class="keyword">typedef</span> Templates20&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>&#160; T15, T16, T17, T18, T19, T20, T21&gt; Tail;</div><div class="line"><a name="l05025"></a><span class="lineno"> 5025</span>&#160;};</div><div class="line"><a name="l05026"></a><span class="lineno"> 5026</span>&#160;</div><div class="line"><a name="l05027"></a><span class="lineno"> 5027</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05028"></a><span class="lineno"> 5028</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05029"></a><span class="lineno"> 5029</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05030"></a><span class="lineno"> 5030</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05031"></a><span class="lineno"> 5031</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05033"></a><span class="lineno"> 5033</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>&#160; GTEST_TEMPLATE_ T22&gt;</div><div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>&#160;<span class="keyword">struct </span>Templates22 {</div><div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>&#160; <span class="keyword">typedef</span> Templates21&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22&gt; Tail;</div><div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>&#160;};</div><div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>&#160;</div><div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05046"></a><span class="lineno"> 5046</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05047"></a><span class="lineno"> 5047</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05048"></a><span class="lineno"> 5048</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23&gt;</div><div class="line"><a name="l05049"></a><span class="lineno"> 5049</span>&#160;<span class="keyword">struct </span>Templates23 {</div><div class="line"><a name="l05050"></a><span class="lineno"> 5050</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>&#160; <span class="keyword">typedef</span> Templates22&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23&gt; Tail;</div><div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>&#160;};</div><div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>&#160;</div><div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05056"></a><span class="lineno"> 5056</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05058"></a><span class="lineno"> 5058</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05059"></a><span class="lineno"> 5059</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05060"></a><span class="lineno"> 5060</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05061"></a><span class="lineno"> 5061</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05062"></a><span class="lineno"> 5062</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24&gt;</div><div class="line"><a name="l05063"></a><span class="lineno"> 5063</span>&#160;<span class="keyword">struct </span>Templates24 {</div><div class="line"><a name="l05064"></a><span class="lineno"> 5064</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05065"></a><span class="lineno"> 5065</span>&#160; <span class="keyword">typedef</span> Templates23&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05066"></a><span class="lineno"> 5066</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24&gt; Tail;</div><div class="line"><a name="l05067"></a><span class="lineno"> 5067</span>&#160;};</div><div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>&#160;</div><div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05070"></a><span class="lineno"> 5070</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05071"></a><span class="lineno"> 5071</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05072"></a><span class="lineno"> 5072</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05073"></a><span class="lineno"> 5073</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05074"></a><span class="lineno"> 5074</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05075"></a><span class="lineno"> 5075</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05076"></a><span class="lineno"> 5076</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05077"></a><span class="lineno"> 5077</span>&#160; GTEST_TEMPLATE_ T25&gt;</div><div class="line"><a name="l05078"></a><span class="lineno"> 5078</span>&#160;<span class="keyword">struct </span>Templates25 {</div><div class="line"><a name="l05079"></a><span class="lineno"> 5079</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>&#160; <span class="keyword">typedef</span> Templates24&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25&gt; Tail;</div><div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>&#160;};</div><div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>&#160;</div><div class="line"><a name="l05084"></a><span class="lineno"> 5084</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05088"></a><span class="lineno"> 5088</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26&gt;</div><div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>&#160;<span class="keyword">struct </span>Templates26 {</div><div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>&#160; <span class="keyword">typedef</span> Templates25&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05096"></a><span class="lineno"> 5096</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26&gt; Tail;</div><div class="line"><a name="l05097"></a><span class="lineno"> 5097</span>&#160;};</div><div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>&#160;</div><div class="line"><a name="l05099"></a><span class="lineno"> 5099</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05100"></a><span class="lineno"> 5100</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05101"></a><span class="lineno"> 5101</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05102"></a><span class="lineno"> 5102</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05103"></a><span class="lineno"> 5103</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05104"></a><span class="lineno"> 5104</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27&gt;</div><div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>&#160;<span class="keyword">struct </span>Templates27 {</div><div class="line"><a name="l05109"></a><span class="lineno"> 5109</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>&#160; <span class="keyword">typedef</span> Templates26&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05111"></a><span class="lineno"> 5111</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27&gt; Tail;</div><div class="line"><a name="l05112"></a><span class="lineno"> 5112</span>&#160;};</div><div class="line"><a name="l05113"></a><span class="lineno"> 5113</span>&#160;</div><div class="line"><a name="l05114"></a><span class="lineno"> 5114</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05115"></a><span class="lineno"> 5115</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05116"></a><span class="lineno"> 5116</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05117"></a><span class="lineno"> 5117</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05118"></a><span class="lineno"> 5118</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05122"></a><span class="lineno"> 5122</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>&#160; GTEST_TEMPLATE_ T28&gt;</div><div class="line"><a name="l05124"></a><span class="lineno"> 5124</span>&#160;<span class="keyword">struct </span>Templates28 {</div><div class="line"><a name="l05125"></a><span class="lineno"> 5125</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05126"></a><span class="lineno"> 5126</span>&#160; <span class="keyword">typedef</span> Templates27&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05127"></a><span class="lineno"> 5127</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l05128"></a><span class="lineno"> 5128</span>&#160; T28&gt; Tail;</div><div class="line"><a name="l05129"></a><span class="lineno"> 5129</span>&#160;};</div><div class="line"><a name="l05130"></a><span class="lineno"> 5130</span>&#160;</div><div class="line"><a name="l05131"></a><span class="lineno"> 5131</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05133"></a><span class="lineno"> 5133</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05135"></a><span class="lineno"> 5135</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05137"></a><span class="lineno"> 5137</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05140"></a><span class="lineno"> 5140</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29&gt;</div><div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>&#160;<span class="keyword">struct </span>Templates29 {</div><div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05143"></a><span class="lineno"> 5143</span>&#160; <span class="keyword">typedef</span> Templates28&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>&#160; T29&gt; Tail;</div><div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>&#160;};</div><div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>&#160;</div><div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05156"></a><span class="lineno"> 5156</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30&gt;</div><div class="line"><a name="l05158"></a><span class="lineno"> 5158</span>&#160;<span class="keyword">struct </span>Templates30 {</div><div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>&#160; <span class="keyword">typedef</span> Templates29&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05161"></a><span class="lineno"> 5161</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>&#160; T29, T30&gt; Tail;</div><div class="line"><a name="l05163"></a><span class="lineno"> 5163</span>&#160;};</div><div class="line"><a name="l05164"></a><span class="lineno"> 5164</span>&#160;</div><div class="line"><a name="l05165"></a><span class="lineno"> 5165</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05166"></a><span class="lineno"> 5166</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05167"></a><span class="lineno"> 5167</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05169"></a><span class="lineno"> 5169</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05170"></a><span class="lineno"> 5170</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05171"></a><span class="lineno"> 5171</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05173"></a><span class="lineno"> 5173</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05174"></a><span class="lineno"> 5174</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05175"></a><span class="lineno"> 5175</span>&#160; GTEST_TEMPLATE_ T31&gt;</div><div class="line"><a name="l05176"></a><span class="lineno"> 5176</span>&#160;<span class="keyword">struct </span>Templates31 {</div><div class="line"><a name="l05177"></a><span class="lineno"> 5177</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05178"></a><span class="lineno"> 5178</span>&#160; <span class="keyword">typedef</span> Templates30&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05179"></a><span class="lineno"> 5179</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05180"></a><span class="lineno"> 5180</span>&#160; T29, T30, T31&gt; Tail;</div><div class="line"><a name="l05181"></a><span class="lineno"> 5181</span>&#160;};</div><div class="line"><a name="l05182"></a><span class="lineno"> 5182</span>&#160;</div><div class="line"><a name="l05183"></a><span class="lineno"> 5183</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05184"></a><span class="lineno"> 5184</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05185"></a><span class="lineno"> 5185</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32&gt;</div><div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>&#160;<span class="keyword">struct </span>Templates32 {</div><div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>&#160; <span class="keyword">typedef</span> Templates31&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>&#160; T29, T30, T31, T32&gt; Tail;</div><div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>&#160;};</div><div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>&#160;</div><div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05203"></a><span class="lineno"> 5203</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05206"></a><span class="lineno"> 5206</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33&gt;</div><div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>&#160;<span class="keyword">struct </span>Templates33 {</div><div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>&#160; <span class="keyword">typedef</span> Templates32&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>&#160; T29, T30, T31, T32, T33&gt; Tail;</div><div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>&#160;};</div><div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>&#160;</div><div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>&#160; GTEST_TEMPLATE_ T34&gt;</div><div class="line"><a name="l05231"></a><span class="lineno"> 5231</span>&#160;<span class="keyword">struct </span>Templates34 {</div><div class="line"><a name="l05232"></a><span class="lineno"> 5232</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05233"></a><span class="lineno"> 5233</span>&#160; <span class="keyword">typedef</span> Templates33&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05234"></a><span class="lineno"> 5234</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05235"></a><span class="lineno"> 5235</span>&#160; T29, T30, T31, T32, T33, T34&gt; Tail;</div><div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>&#160;};</div><div class="line"><a name="l05237"></a><span class="lineno"> 5237</span>&#160;</div><div class="line"><a name="l05238"></a><span class="lineno"> 5238</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05239"></a><span class="lineno"> 5239</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05240"></a><span class="lineno"> 5240</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05241"></a><span class="lineno"> 5241</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05242"></a><span class="lineno"> 5242</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05243"></a><span class="lineno"> 5243</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05244"></a><span class="lineno"> 5244</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05245"></a><span class="lineno"> 5245</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05246"></a><span class="lineno"> 5246</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05247"></a><span class="lineno"> 5247</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05248"></a><span class="lineno"> 5248</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05249"></a><span class="lineno"> 5249</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35&gt;</div><div class="line"><a name="l05250"></a><span class="lineno"> 5250</span>&#160;<span class="keyword">struct </span>Templates35 {</div><div class="line"><a name="l05251"></a><span class="lineno"> 5251</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>&#160; <span class="keyword">typedef</span> Templates34&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05253"></a><span class="lineno"> 5253</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05254"></a><span class="lineno"> 5254</span>&#160; T29, T30, T31, T32, T33, T34, T35&gt; Tail;</div><div class="line"><a name="l05255"></a><span class="lineno"> 5255</span>&#160;};</div><div class="line"><a name="l05256"></a><span class="lineno"> 5256</span>&#160;</div><div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05258"></a><span class="lineno"> 5258</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05268"></a><span class="lineno"> 5268</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36&gt;</div><div class="line"><a name="l05269"></a><span class="lineno"> 5269</span>&#160;<span class="keyword">struct </span>Templates36 {</div><div class="line"><a name="l05270"></a><span class="lineno"> 5270</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>&#160; <span class="keyword">typedef</span> Templates35&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36&gt; Tail;</div><div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>&#160;};</div><div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>&#160;</div><div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05283"></a><span class="lineno"> 5283</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05284"></a><span class="lineno"> 5284</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>&#160; GTEST_TEMPLATE_ T37&gt;</div><div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>&#160;<span class="keyword">struct </span>Templates37 {</div><div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05291"></a><span class="lineno"> 5291</span>&#160; <span class="keyword">typedef</span> Templates36&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05292"></a><span class="lineno"> 5292</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05293"></a><span class="lineno"> 5293</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37&gt; Tail;</div><div class="line"><a name="l05294"></a><span class="lineno"> 5294</span>&#160;};</div><div class="line"><a name="l05295"></a><span class="lineno"> 5295</span>&#160;</div><div class="line"><a name="l05296"></a><span class="lineno"> 5296</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05297"></a><span class="lineno"> 5297</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05299"></a><span class="lineno"> 5299</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05300"></a><span class="lineno"> 5300</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05301"></a><span class="lineno"> 5301</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05302"></a><span class="lineno"> 5302</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05304"></a><span class="lineno"> 5304</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05305"></a><span class="lineno"> 5305</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38&gt;</div><div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>&#160;<span class="keyword">struct </span>Templates38 {</div><div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>&#160; <span class="keyword">typedef</span> Templates37&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38&gt; Tail;</div><div class="line"><a name="l05314"></a><span class="lineno"> 5314</span>&#160;};</div><div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>&#160;</div><div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05322"></a><span class="lineno"> 5322</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05327"></a><span class="lineno"> 5327</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05328"></a><span class="lineno"> 5328</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39&gt;</div><div class="line"><a name="l05329"></a><span class="lineno"> 5329</span>&#160;<span class="keyword">struct </span>Templates39 {</div><div class="line"><a name="l05330"></a><span class="lineno"> 5330</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05331"></a><span class="lineno"> 5331</span>&#160; <span class="keyword">typedef</span> Templates38&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05333"></a><span class="lineno"> 5333</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39&gt; Tail;</div><div class="line"><a name="l05334"></a><span class="lineno"> 5334</span>&#160;};</div><div class="line"><a name="l05335"></a><span class="lineno"> 5335</span>&#160;</div><div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05338"></a><span class="lineno"> 5338</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05339"></a><span class="lineno"> 5339</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05340"></a><span class="lineno"> 5340</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05341"></a><span class="lineno"> 5341</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05342"></a><span class="lineno"> 5342</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05343"></a><span class="lineno"> 5343</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05344"></a><span class="lineno"> 5344</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05345"></a><span class="lineno"> 5345</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05348"></a><span class="lineno"> 5348</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>&#160; GTEST_TEMPLATE_ T40&gt;</div><div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>&#160;<span class="keyword">struct </span>Templates40 {</div><div class="line"><a name="l05351"></a><span class="lineno"> 5351</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05352"></a><span class="lineno"> 5352</span>&#160; <span class="keyword">typedef</span> Templates39&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05353"></a><span class="lineno"> 5353</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05354"></a><span class="lineno"> 5354</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40&gt; Tail;</div><div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>&#160;};</div><div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>&#160;</div><div class="line"><a name="l05357"></a><span class="lineno"> 5357</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05360"></a><span class="lineno"> 5360</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05361"></a><span class="lineno"> 5361</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05362"></a><span class="lineno"> 5362</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05363"></a><span class="lineno"> 5363</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05364"></a><span class="lineno"> 5364</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05365"></a><span class="lineno"> 5365</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05366"></a><span class="lineno"> 5366</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05367"></a><span class="lineno"> 5367</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05368"></a><span class="lineno"> 5368</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05370"></a><span class="lineno"> 5370</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41&gt;</div><div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>&#160;<span class="keyword">struct </span>Templates41 {</div><div class="line"><a name="l05372"></a><span class="lineno"> 5372</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05373"></a><span class="lineno"> 5373</span>&#160; <span class="keyword">typedef</span> Templates40&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05374"></a><span class="lineno"> 5374</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05375"></a><span class="lineno"> 5375</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41&gt; Tail;</div><div class="line"><a name="l05376"></a><span class="lineno"> 5376</span>&#160;};</div><div class="line"><a name="l05377"></a><span class="lineno"> 5377</span>&#160;</div><div class="line"><a name="l05378"></a><span class="lineno"> 5378</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05379"></a><span class="lineno"> 5379</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05380"></a><span class="lineno"> 5380</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05381"></a><span class="lineno"> 5381</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05382"></a><span class="lineno"> 5382</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05383"></a><span class="lineno"> 5383</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05384"></a><span class="lineno"> 5384</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05385"></a><span class="lineno"> 5385</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05386"></a><span class="lineno"> 5386</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05387"></a><span class="lineno"> 5387</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05388"></a><span class="lineno"> 5388</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05389"></a><span class="lineno"> 5389</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05390"></a><span class="lineno"> 5390</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05391"></a><span class="lineno"> 5391</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42&gt;</div><div class="line"><a name="l05392"></a><span class="lineno"> 5392</span>&#160;<span class="keyword">struct </span>Templates42 {</div><div class="line"><a name="l05393"></a><span class="lineno"> 5393</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05394"></a><span class="lineno"> 5394</span>&#160; <span class="keyword">typedef</span> Templates41&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05395"></a><span class="lineno"> 5395</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05396"></a><span class="lineno"> 5396</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l05397"></a><span class="lineno"> 5397</span>&#160; T42&gt; Tail;</div><div class="line"><a name="l05398"></a><span class="lineno"> 5398</span>&#160;};</div><div class="line"><a name="l05399"></a><span class="lineno"> 5399</span>&#160;</div><div class="line"><a name="l05400"></a><span class="lineno"> 5400</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05401"></a><span class="lineno"> 5401</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05402"></a><span class="lineno"> 5402</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05403"></a><span class="lineno"> 5403</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05404"></a><span class="lineno"> 5404</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05405"></a><span class="lineno"> 5405</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05406"></a><span class="lineno"> 5406</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05407"></a><span class="lineno"> 5407</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05408"></a><span class="lineno"> 5408</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05409"></a><span class="lineno"> 5409</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05410"></a><span class="lineno"> 5410</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05411"></a><span class="lineno"> 5411</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05412"></a><span class="lineno"> 5412</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05413"></a><span class="lineno"> 5413</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05414"></a><span class="lineno"> 5414</span>&#160; GTEST_TEMPLATE_ T43&gt;</div><div class="line"><a name="l05415"></a><span class="lineno"> 5415</span>&#160;<span class="keyword">struct </span>Templates43 {</div><div class="line"><a name="l05416"></a><span class="lineno"> 5416</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05417"></a><span class="lineno"> 5417</span>&#160; <span class="keyword">typedef</span> Templates42&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05418"></a><span class="lineno"> 5418</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05419"></a><span class="lineno"> 5419</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05420"></a><span class="lineno"> 5420</span>&#160; T43&gt; Tail;</div><div class="line"><a name="l05421"></a><span class="lineno"> 5421</span>&#160;};</div><div class="line"><a name="l05422"></a><span class="lineno"> 5422</span>&#160;</div><div class="line"><a name="l05423"></a><span class="lineno"> 5423</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05424"></a><span class="lineno"> 5424</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05425"></a><span class="lineno"> 5425</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05426"></a><span class="lineno"> 5426</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05427"></a><span class="lineno"> 5427</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05428"></a><span class="lineno"> 5428</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05429"></a><span class="lineno"> 5429</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05430"></a><span class="lineno"> 5430</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05431"></a><span class="lineno"> 5431</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05432"></a><span class="lineno"> 5432</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05433"></a><span class="lineno"> 5433</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05434"></a><span class="lineno"> 5434</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05435"></a><span class="lineno"> 5435</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05436"></a><span class="lineno"> 5436</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05437"></a><span class="lineno"> 5437</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44&gt;</div><div class="line"><a name="l05438"></a><span class="lineno"> 5438</span>&#160;<span class="keyword">struct </span>Templates44 {</div><div class="line"><a name="l05439"></a><span class="lineno"> 5439</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05440"></a><span class="lineno"> 5440</span>&#160; <span class="keyword">typedef</span> Templates43&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05441"></a><span class="lineno"> 5441</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05442"></a><span class="lineno"> 5442</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05443"></a><span class="lineno"> 5443</span>&#160; T43, T44&gt; Tail;</div><div class="line"><a name="l05444"></a><span class="lineno"> 5444</span>&#160;};</div><div class="line"><a name="l05445"></a><span class="lineno"> 5445</span>&#160;</div><div class="line"><a name="l05446"></a><span class="lineno"> 5446</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05447"></a><span class="lineno"> 5447</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05448"></a><span class="lineno"> 5448</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05449"></a><span class="lineno"> 5449</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05450"></a><span class="lineno"> 5450</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05451"></a><span class="lineno"> 5451</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05452"></a><span class="lineno"> 5452</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05453"></a><span class="lineno"> 5453</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05454"></a><span class="lineno"> 5454</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05455"></a><span class="lineno"> 5455</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05456"></a><span class="lineno"> 5456</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05457"></a><span class="lineno"> 5457</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05458"></a><span class="lineno"> 5458</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05459"></a><span class="lineno"> 5459</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05460"></a><span class="lineno"> 5460</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45&gt;</div><div class="line"><a name="l05461"></a><span class="lineno"> 5461</span>&#160;<span class="keyword">struct </span>Templates45 {</div><div class="line"><a name="l05462"></a><span class="lineno"> 5462</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05463"></a><span class="lineno"> 5463</span>&#160; <span class="keyword">typedef</span> Templates44&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05464"></a><span class="lineno"> 5464</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05465"></a><span class="lineno"> 5465</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05466"></a><span class="lineno"> 5466</span>&#160; T43, T44, T45&gt; Tail;</div><div class="line"><a name="l05467"></a><span class="lineno"> 5467</span>&#160;};</div><div class="line"><a name="l05468"></a><span class="lineno"> 5468</span>&#160;</div><div class="line"><a name="l05469"></a><span class="lineno"> 5469</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05470"></a><span class="lineno"> 5470</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05471"></a><span class="lineno"> 5471</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05472"></a><span class="lineno"> 5472</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05473"></a><span class="lineno"> 5473</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05474"></a><span class="lineno"> 5474</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05475"></a><span class="lineno"> 5475</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05476"></a><span class="lineno"> 5476</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05477"></a><span class="lineno"> 5477</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05478"></a><span class="lineno"> 5478</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05479"></a><span class="lineno"> 5479</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05480"></a><span class="lineno"> 5480</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05481"></a><span class="lineno"> 5481</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05482"></a><span class="lineno"> 5482</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05483"></a><span class="lineno"> 5483</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l05484"></a><span class="lineno"> 5484</span>&#160; GTEST_TEMPLATE_ T46&gt;</div><div class="line"><a name="l05485"></a><span class="lineno"> 5485</span>&#160;<span class="keyword">struct </span>Templates46 {</div><div class="line"><a name="l05486"></a><span class="lineno"> 5486</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05487"></a><span class="lineno"> 5487</span>&#160; <span class="keyword">typedef</span> Templates45&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05488"></a><span class="lineno"> 5488</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05489"></a><span class="lineno"> 5489</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05490"></a><span class="lineno"> 5490</span>&#160; T43, T44, T45, T46&gt; Tail;</div><div class="line"><a name="l05491"></a><span class="lineno"> 5491</span>&#160;};</div><div class="line"><a name="l05492"></a><span class="lineno"> 5492</span>&#160;</div><div class="line"><a name="l05493"></a><span class="lineno"> 5493</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05494"></a><span class="lineno"> 5494</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05495"></a><span class="lineno"> 5495</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05496"></a><span class="lineno"> 5496</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05497"></a><span class="lineno"> 5497</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05498"></a><span class="lineno"> 5498</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05499"></a><span class="lineno"> 5499</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05500"></a><span class="lineno"> 5500</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05501"></a><span class="lineno"> 5501</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05502"></a><span class="lineno"> 5502</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05503"></a><span class="lineno"> 5503</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05504"></a><span class="lineno"> 5504</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05505"></a><span class="lineno"> 5505</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05506"></a><span class="lineno"> 5506</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05507"></a><span class="lineno"> 5507</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l05508"></a><span class="lineno"> 5508</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47&gt;</div><div class="line"><a name="l05509"></a><span class="lineno"> 5509</span>&#160;<span class="keyword">struct </span>Templates47 {</div><div class="line"><a name="l05510"></a><span class="lineno"> 5510</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05511"></a><span class="lineno"> 5511</span>&#160; <span class="keyword">typedef</span> Templates46&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05512"></a><span class="lineno"> 5512</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05513"></a><span class="lineno"> 5513</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05514"></a><span class="lineno"> 5514</span>&#160; T43, T44, T45, T46, T47&gt; Tail;</div><div class="line"><a name="l05515"></a><span class="lineno"> 5515</span>&#160;};</div><div class="line"><a name="l05516"></a><span class="lineno"> 5516</span>&#160;</div><div class="line"><a name="l05517"></a><span class="lineno"> 5517</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05518"></a><span class="lineno"> 5518</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05519"></a><span class="lineno"> 5519</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05520"></a><span class="lineno"> 5520</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05521"></a><span class="lineno"> 5521</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05522"></a><span class="lineno"> 5522</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05523"></a><span class="lineno"> 5523</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05524"></a><span class="lineno"> 5524</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05525"></a><span class="lineno"> 5525</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05526"></a><span class="lineno"> 5526</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05527"></a><span class="lineno"> 5527</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05528"></a><span class="lineno"> 5528</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05529"></a><span class="lineno"> 5529</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05530"></a><span class="lineno"> 5530</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05531"></a><span class="lineno"> 5531</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l05532"></a><span class="lineno"> 5532</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48&gt;</div><div class="line"><a name="l05533"></a><span class="lineno"> 5533</span>&#160;<span class="keyword">struct </span>Templates48 {</div><div class="line"><a name="l05534"></a><span class="lineno"> 5534</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05535"></a><span class="lineno"> 5535</span>&#160; <span class="keyword">typedef</span> Templates47&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05536"></a><span class="lineno"> 5536</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05537"></a><span class="lineno"> 5537</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05538"></a><span class="lineno"> 5538</span>&#160; T43, T44, T45, T46, T47, T48&gt; Tail;</div><div class="line"><a name="l05539"></a><span class="lineno"> 5539</span>&#160;};</div><div class="line"><a name="l05540"></a><span class="lineno"> 5540</span>&#160;</div><div class="line"><a name="l05541"></a><span class="lineno"> 5541</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05542"></a><span class="lineno"> 5542</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05543"></a><span class="lineno"> 5543</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05544"></a><span class="lineno"> 5544</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05545"></a><span class="lineno"> 5545</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05546"></a><span class="lineno"> 5546</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05547"></a><span class="lineno"> 5547</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05548"></a><span class="lineno"> 5548</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05549"></a><span class="lineno"> 5549</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05550"></a><span class="lineno"> 5550</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05551"></a><span class="lineno"> 5551</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05552"></a><span class="lineno"> 5552</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05553"></a><span class="lineno"> 5553</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05554"></a><span class="lineno"> 5554</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05555"></a><span class="lineno"> 5555</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l05556"></a><span class="lineno"> 5556</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,</div><div class="line"><a name="l05557"></a><span class="lineno"> 5557</span>&#160; GTEST_TEMPLATE_ T49&gt;</div><div class="line"><a name="l05558"></a><span class="lineno"> 5558</span>&#160;<span class="keyword">struct </span>Templates49 {</div><div class="line"><a name="l05559"></a><span class="lineno"> 5559</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05560"></a><span class="lineno"> 5560</span>&#160; <span class="keyword">typedef</span> Templates48&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05561"></a><span class="lineno"> 5561</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05562"></a><span class="lineno"> 5562</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05563"></a><span class="lineno"> 5563</span>&#160; T43, T44, T45, T46, T47, T48, T49&gt; Tail;</div><div class="line"><a name="l05564"></a><span class="lineno"> 5564</span>&#160;};</div><div class="line"><a name="l05565"></a><span class="lineno"> 5565</span>&#160;</div><div class="line"><a name="l05566"></a><span class="lineno"> 5566</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05567"></a><span class="lineno"> 5567</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05568"></a><span class="lineno"> 5568</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05569"></a><span class="lineno"> 5569</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05570"></a><span class="lineno"> 5570</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05571"></a><span class="lineno"> 5571</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05572"></a><span class="lineno"> 5572</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05573"></a><span class="lineno"> 5573</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05574"></a><span class="lineno"> 5574</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05575"></a><span class="lineno"> 5575</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l05576"></a><span class="lineno"> 5576</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l05577"></a><span class="lineno"> 5577</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l05578"></a><span class="lineno"> 5578</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l05579"></a><span class="lineno"> 5579</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l05580"></a><span class="lineno"> 5580</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l05581"></a><span class="lineno"> 5581</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,</div><div class="line"><a name="l05582"></a><span class="lineno"> 5582</span>&#160; GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50&gt;</div><div class="line"><a name="l05583"></a><span class="lineno"> 5583</span>&#160;<span class="keyword">struct </span>Templates50 {</div><div class="line"><a name="l05584"></a><span class="lineno"> 5584</span>&#160; <span class="keyword">typedef</span> TemplateSel&lt;T1&gt; Head;</div><div class="line"><a name="l05585"></a><span class="lineno"> 5585</span>&#160; <span class="keyword">typedef</span> Templates49&lt;T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05586"></a><span class="lineno"> 5586</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l05587"></a><span class="lineno"> 5587</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,</div><div class="line"><a name="l05588"></a><span class="lineno"> 5588</span>&#160; T43, T44, T45, T46, T47, T48, T49, T50&gt; Tail;</div><div class="line"><a name="l05589"></a><span class="lineno"> 5589</span>&#160;};</div><div class="line"><a name="l05590"></a><span class="lineno"> 5590</span>&#160;</div><div class="line"><a name="l05591"></a><span class="lineno"> 5591</span>&#160;</div><div class="line"><a name="l05592"></a><span class="lineno"> 5592</span>&#160;<span class="comment">// We don&#39;t want to require the users to write TemplatesN&lt;...&gt; directly,</span></div><div class="line"><a name="l05593"></a><span class="lineno"> 5593</span>&#160;<span class="comment">// as that would require them to count the length. Templates&lt;...&gt; is much</span></div><div class="line"><a name="l05594"></a><span class="lineno"> 5594</span>&#160;<span class="comment">// easier to write, but generates horrible messages when there is a</span></div><div class="line"><a name="l05595"></a><span class="lineno"> 5595</span>&#160;<span class="comment">// compiler error, as gcc insists on printing out each template</span></div><div class="line"><a name="l05596"></a><span class="lineno"> 5596</span>&#160;<span class="comment">// argument, even if it has the default value (this means Templates&lt;list&gt;</span></div><div class="line"><a name="l05597"></a><span class="lineno"> 5597</span>&#160;<span class="comment">// will appear as Templates&lt;list, NoneT, NoneT, ..., NoneT&gt; in the compiler</span></div><div class="line"><a name="l05598"></a><span class="lineno"> 5598</span>&#160;<span class="comment">// errors).</span></div><div class="line"><a name="l05599"></a><span class="lineno"> 5599</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l05600"></a><span class="lineno"> 5600</span>&#160;<span class="comment">// Our solution is to combine the best part of the two approaches: a</span></div><div class="line"><a name="l05601"></a><span class="lineno"> 5601</span>&#160;<span class="comment">// user would write Templates&lt;T1, ..., TN&gt;, and Google Test will translate</span></div><div class="line"><a name="l05602"></a><span class="lineno"> 5602</span>&#160;<span class="comment">// that to TemplatesN&lt;T1, ..., TN&gt; internally to make error messages</span></div><div class="line"><a name="l05603"></a><span class="lineno"> 5603</span>&#160;<span class="comment">// readable. The translation is done by the &#39;type&#39; member of the</span></div><div class="line"><a name="l05604"></a><span class="lineno"> 5604</span>&#160;<span class="comment">// Templates template.</span></div><div class="line"><a name="l05605"></a><span class="lineno"> 5605</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,</div><div class="line"><a name="l05606"></a><span class="lineno"> 5606</span>&#160; GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,</div><div class="line"><a name="l05607"></a><span class="lineno"> 5607</span>&#160; GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,</div><div class="line"><a name="l05608"></a><span class="lineno"> 5608</span>&#160; GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,</div><div class="line"><a name="l05609"></a><span class="lineno"> 5609</span>&#160; GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,</div><div class="line"><a name="l05610"></a><span class="lineno"> 5610</span>&#160; GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,</div><div class="line"><a name="l05611"></a><span class="lineno"> 5611</span>&#160; GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,</div><div class="line"><a name="l05612"></a><span class="lineno"> 5612</span>&#160; GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,</div><div class="line"><a name="l05613"></a><span class="lineno"> 5613</span>&#160; GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,</div><div class="line"><a name="l05614"></a><span class="lineno"> 5614</span>&#160; GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,</div><div class="line"><a name="l05615"></a><span class="lineno"> 5615</span>&#160; GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,</div><div class="line"><a name="l05616"></a><span class="lineno"> 5616</span>&#160; GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,</div><div class="line"><a name="l05617"></a><span class="lineno"> 5617</span>&#160; GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,</div><div class="line"><a name="l05618"></a><span class="lineno"> 5618</span>&#160; GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,</div><div class="line"><a name="l05619"></a><span class="lineno"> 5619</span>&#160; GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,</div><div class="line"><a name="l05620"></a><span class="lineno"> 5620</span>&#160; GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,</div><div class="line"><a name="l05621"></a><span class="lineno"> 5621</span>&#160; GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,</div><div class="line"><a name="l05622"></a><span class="lineno"> 5622</span>&#160; GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,</div><div class="line"><a name="l05623"></a><span class="lineno"> 5623</span>&#160; GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,</div><div class="line"><a name="l05624"></a><span class="lineno"> 5624</span>&#160; GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,</div><div class="line"><a name="l05625"></a><span class="lineno"> 5625</span>&#160; GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,</div><div class="line"><a name="l05626"></a><span class="lineno"> 5626</span>&#160; GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,</div><div class="line"><a name="l05627"></a><span class="lineno"> 5627</span>&#160; GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,</div><div class="line"><a name="l05628"></a><span class="lineno"> 5628</span>&#160; GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,</div><div class="line"><a name="l05629"></a><span class="lineno"> 5629</span>&#160; GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT&gt;</div><div class="line"><a name="l05630"></a><span class="lineno"> 5630</span>&#160;<span class="keyword">struct </span>Templates {</div><div class="line"><a name="l05631"></a><span class="lineno"> 5631</span>&#160; <span class="keyword">typedef</span> Templates50&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05632"></a><span class="lineno"> 5632</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l05633"></a><span class="lineno"> 5633</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l05634"></a><span class="lineno"> 5634</span>&#160; T42, T43, T44, T45, T46, T47, T48, T49, T50&gt; type;</div><div class="line"><a name="l05635"></a><span class="lineno"> 5635</span>&#160;};</div><div class="line"><a name="l05636"></a><span class="lineno"> 5636</span>&#160;</div><div class="line"><a name="l05637"></a><span class="lineno"> 5637</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l05638"></a><span class="lineno"> 5638</span>&#160;<span class="keyword">struct </span>Templates&lt;NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05639"></a><span class="lineno"> 5639</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05640"></a><span class="lineno"> 5640</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05641"></a><span class="lineno"> 5641</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05642"></a><span class="lineno"> 5642</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05643"></a><span class="lineno"> 5643</span>&#160; NoneT&gt; {</div><div class="line"><a name="l05644"></a><span class="lineno"> 5644</span>&#160; <span class="keyword">typedef</span> Templates0 type;</div><div class="line"><a name="l05645"></a><span class="lineno"> 5645</span>&#160;};</div><div class="line"><a name="l05646"></a><span class="lineno"> 5646</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1&gt;</div><div class="line"><a name="l05647"></a><span class="lineno"> 5647</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05648"></a><span class="lineno"> 5648</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05649"></a><span class="lineno"> 5649</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05650"></a><span class="lineno"> 5650</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05651"></a><span class="lineno"> 5651</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05652"></a><span class="lineno"> 5652</span>&#160; NoneT&gt; {</div><div class="line"><a name="l05653"></a><span class="lineno"> 5653</span>&#160; <span class="keyword">typedef</span> Templates1&lt;T1&gt; type;</div><div class="line"><a name="l05654"></a><span class="lineno"> 5654</span>&#160;};</div><div class="line"><a name="l05655"></a><span class="lineno"> 5655</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2&gt;</div><div class="line"><a name="l05656"></a><span class="lineno"> 5656</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05657"></a><span class="lineno"> 5657</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05658"></a><span class="lineno"> 5658</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05659"></a><span class="lineno"> 5659</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05660"></a><span class="lineno"> 5660</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05661"></a><span class="lineno"> 5661</span>&#160; NoneT&gt; {</div><div class="line"><a name="l05662"></a><span class="lineno"> 5662</span>&#160; <span class="keyword">typedef</span> Templates2&lt;T1, T2&gt; type;</div><div class="line"><a name="l05663"></a><span class="lineno"> 5663</span>&#160;};</div><div class="line"><a name="l05664"></a><span class="lineno"> 5664</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3&gt;</div><div class="line"><a name="l05665"></a><span class="lineno"> 5665</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05666"></a><span class="lineno"> 5666</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05667"></a><span class="lineno"> 5667</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05668"></a><span class="lineno"> 5668</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05669"></a><span class="lineno"> 5669</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05670"></a><span class="lineno"> 5670</span>&#160; <span class="keyword">typedef</span> Templates3&lt;T1, T2, T3&gt; type;</div><div class="line"><a name="l05671"></a><span class="lineno"> 5671</span>&#160;};</div><div class="line"><a name="l05672"></a><span class="lineno"> 5672</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05673"></a><span class="lineno"> 5673</span>&#160; GTEST_TEMPLATE_ T4&gt;</div><div class="line"><a name="l05674"></a><span class="lineno"> 5674</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05675"></a><span class="lineno"> 5675</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05676"></a><span class="lineno"> 5676</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05677"></a><span class="lineno"> 5677</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05678"></a><span class="lineno"> 5678</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05679"></a><span class="lineno"> 5679</span>&#160; <span class="keyword">typedef</span> Templates4&lt;T1, T2, T3, T4&gt; type;</div><div class="line"><a name="l05680"></a><span class="lineno"> 5680</span>&#160;};</div><div class="line"><a name="l05681"></a><span class="lineno"> 5681</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05682"></a><span class="lineno"> 5682</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5&gt;</div><div class="line"><a name="l05683"></a><span class="lineno"> 5683</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05684"></a><span class="lineno"> 5684</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05685"></a><span class="lineno"> 5685</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05686"></a><span class="lineno"> 5686</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05687"></a><span class="lineno"> 5687</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05688"></a><span class="lineno"> 5688</span>&#160; <span class="keyword">typedef</span> Templates5&lt;T1, T2, T3, T4, T5&gt; type;</div><div class="line"><a name="l05689"></a><span class="lineno"> 5689</span>&#160;};</div><div class="line"><a name="l05690"></a><span class="lineno"> 5690</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05691"></a><span class="lineno"> 5691</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6&gt;</div><div class="line"><a name="l05692"></a><span class="lineno"> 5692</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05693"></a><span class="lineno"> 5693</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05694"></a><span class="lineno"> 5694</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05695"></a><span class="lineno"> 5695</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05696"></a><span class="lineno"> 5696</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05697"></a><span class="lineno"> 5697</span>&#160; <span class="keyword">typedef</span> Templates6&lt;T1, T2, T3, T4, T5, T6&gt; type;</div><div class="line"><a name="l05698"></a><span class="lineno"> 5698</span>&#160;};</div><div class="line"><a name="l05699"></a><span class="lineno"> 5699</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05700"></a><span class="lineno"> 5700</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05701"></a><span class="lineno"> 5701</span>&#160; GTEST_TEMPLATE_ T7&gt;</div><div class="line"><a name="l05702"></a><span class="lineno"> 5702</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05703"></a><span class="lineno"> 5703</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05704"></a><span class="lineno"> 5704</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05705"></a><span class="lineno"> 5705</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05706"></a><span class="lineno"> 5706</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05707"></a><span class="lineno"> 5707</span>&#160; <span class="keyword">typedef</span> Templates7&lt;T1, T2, T3, T4, T5, T6, T7&gt; type;</div><div class="line"><a name="l05708"></a><span class="lineno"> 5708</span>&#160;};</div><div class="line"><a name="l05709"></a><span class="lineno"> 5709</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05710"></a><span class="lineno"> 5710</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05711"></a><span class="lineno"> 5711</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8&gt;</div><div class="line"><a name="l05712"></a><span class="lineno"> 5712</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05713"></a><span class="lineno"> 5713</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05714"></a><span class="lineno"> 5714</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05715"></a><span class="lineno"> 5715</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05716"></a><span class="lineno"> 5716</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05717"></a><span class="lineno"> 5717</span>&#160; <span class="keyword">typedef</span> Templates8&lt;T1, T2, T3, T4, T5, T6, T7, T8&gt; type;</div><div class="line"><a name="l05718"></a><span class="lineno"> 5718</span>&#160;};</div><div class="line"><a name="l05719"></a><span class="lineno"> 5719</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05720"></a><span class="lineno"> 5720</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05721"></a><span class="lineno"> 5721</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9&gt;</div><div class="line"><a name="l05722"></a><span class="lineno"> 5722</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05723"></a><span class="lineno"> 5723</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05724"></a><span class="lineno"> 5724</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05725"></a><span class="lineno"> 5725</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05726"></a><span class="lineno"> 5726</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05727"></a><span class="lineno"> 5727</span>&#160; <span class="keyword">typedef</span> Templates9&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9&gt; type;</div><div class="line"><a name="l05728"></a><span class="lineno"> 5728</span>&#160;};</div><div class="line"><a name="l05729"></a><span class="lineno"> 5729</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05730"></a><span class="lineno"> 5730</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05731"></a><span class="lineno"> 5731</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05732"></a><span class="lineno"> 5732</span>&#160; GTEST_TEMPLATE_ T10&gt;</div><div class="line"><a name="l05733"></a><span class="lineno"> 5733</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05734"></a><span class="lineno"> 5734</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05735"></a><span class="lineno"> 5735</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05736"></a><span class="lineno"> 5736</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05737"></a><span class="lineno"> 5737</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05738"></a><span class="lineno"> 5738</span>&#160; <span class="keyword">typedef</span> Templates10&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10&gt; type;</div><div class="line"><a name="l05739"></a><span class="lineno"> 5739</span>&#160;};</div><div class="line"><a name="l05740"></a><span class="lineno"> 5740</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05741"></a><span class="lineno"> 5741</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05742"></a><span class="lineno"> 5742</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05743"></a><span class="lineno"> 5743</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11&gt;</div><div class="line"><a name="l05744"></a><span class="lineno"> 5744</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,</div><div class="line"><a name="l05745"></a><span class="lineno"> 5745</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05746"></a><span class="lineno"> 5746</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05747"></a><span class="lineno"> 5747</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05748"></a><span class="lineno"> 5748</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05749"></a><span class="lineno"> 5749</span>&#160; <span class="keyword">typedef</span> Templates11&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11&gt; type;</div><div class="line"><a name="l05750"></a><span class="lineno"> 5750</span>&#160;};</div><div class="line"><a name="l05751"></a><span class="lineno"> 5751</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05752"></a><span class="lineno"> 5752</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05753"></a><span class="lineno"> 5753</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05754"></a><span class="lineno"> 5754</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12&gt;</div><div class="line"><a name="l05755"></a><span class="lineno"> 5755</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,</div><div class="line"><a name="l05756"></a><span class="lineno"> 5756</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05757"></a><span class="lineno"> 5757</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05758"></a><span class="lineno"> 5758</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05759"></a><span class="lineno"> 5759</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05760"></a><span class="lineno"> 5760</span>&#160; <span class="keyword">typedef</span> Templates12&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12&gt; type;</div><div class="line"><a name="l05761"></a><span class="lineno"> 5761</span>&#160;};</div><div class="line"><a name="l05762"></a><span class="lineno"> 5762</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05763"></a><span class="lineno"> 5763</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05764"></a><span class="lineno"> 5764</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05765"></a><span class="lineno"> 5765</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05766"></a><span class="lineno"> 5766</span>&#160; GTEST_TEMPLATE_ T13&gt;</div><div class="line"><a name="l05767"></a><span class="lineno"> 5767</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,</div><div class="line"><a name="l05768"></a><span class="lineno"> 5768</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05769"></a><span class="lineno"> 5769</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05770"></a><span class="lineno"> 5770</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05771"></a><span class="lineno"> 5771</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05772"></a><span class="lineno"> 5772</span>&#160; <span class="keyword">typedef</span> Templates13&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l05773"></a><span class="lineno"> 5773</span>&#160; T13&gt; type;</div><div class="line"><a name="l05774"></a><span class="lineno"> 5774</span>&#160;};</div><div class="line"><a name="l05775"></a><span class="lineno"> 5775</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05776"></a><span class="lineno"> 5776</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05777"></a><span class="lineno"> 5777</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05778"></a><span class="lineno"> 5778</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05779"></a><span class="lineno"> 5779</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14&gt;</div><div class="line"><a name="l05780"></a><span class="lineno"> 5780</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05781"></a><span class="lineno"> 5781</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05782"></a><span class="lineno"> 5782</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05783"></a><span class="lineno"> 5783</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05784"></a><span class="lineno"> 5784</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05785"></a><span class="lineno"> 5785</span>&#160; <span class="keyword">typedef</span> Templates14&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05786"></a><span class="lineno"> 5786</span>&#160; T14&gt; type;</div><div class="line"><a name="l05787"></a><span class="lineno"> 5787</span>&#160;};</div><div class="line"><a name="l05788"></a><span class="lineno"> 5788</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05789"></a><span class="lineno"> 5789</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05790"></a><span class="lineno"> 5790</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05791"></a><span class="lineno"> 5791</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05792"></a><span class="lineno"> 5792</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15&gt;</div><div class="line"><a name="l05793"></a><span class="lineno"> 5793</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05794"></a><span class="lineno"> 5794</span>&#160; T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05795"></a><span class="lineno"> 5795</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05796"></a><span class="lineno"> 5796</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05797"></a><span class="lineno"> 5797</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05798"></a><span class="lineno"> 5798</span>&#160; <span class="keyword">typedef</span> Templates15&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05799"></a><span class="lineno"> 5799</span>&#160; T14, T15&gt; type;</div><div class="line"><a name="l05800"></a><span class="lineno"> 5800</span>&#160;};</div><div class="line"><a name="l05801"></a><span class="lineno"> 5801</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05802"></a><span class="lineno"> 5802</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05803"></a><span class="lineno"> 5803</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05804"></a><span class="lineno"> 5804</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05805"></a><span class="lineno"> 5805</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05806"></a><span class="lineno"> 5806</span>&#160; GTEST_TEMPLATE_ T16&gt;</div><div class="line"><a name="l05807"></a><span class="lineno"> 5807</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05808"></a><span class="lineno"> 5808</span>&#160; T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05809"></a><span class="lineno"> 5809</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05810"></a><span class="lineno"> 5810</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05811"></a><span class="lineno"> 5811</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05812"></a><span class="lineno"> 5812</span>&#160; <span class="keyword">typedef</span> Templates16&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05813"></a><span class="lineno"> 5813</span>&#160; T14, T15, T16&gt; type;</div><div class="line"><a name="l05814"></a><span class="lineno"> 5814</span>&#160;};</div><div class="line"><a name="l05815"></a><span class="lineno"> 5815</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05816"></a><span class="lineno"> 5816</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05817"></a><span class="lineno"> 5817</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05818"></a><span class="lineno"> 5818</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05819"></a><span class="lineno"> 5819</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05820"></a><span class="lineno"> 5820</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17&gt;</div><div class="line"><a name="l05821"></a><span class="lineno"> 5821</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05822"></a><span class="lineno"> 5822</span>&#160; T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05823"></a><span class="lineno"> 5823</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05824"></a><span class="lineno"> 5824</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05825"></a><span class="lineno"> 5825</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05826"></a><span class="lineno"> 5826</span>&#160; <span class="keyword">typedef</span> Templates17&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05827"></a><span class="lineno"> 5827</span>&#160; T14, T15, T16, T17&gt; type;</div><div class="line"><a name="l05828"></a><span class="lineno"> 5828</span>&#160;};</div><div class="line"><a name="l05829"></a><span class="lineno"> 5829</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05830"></a><span class="lineno"> 5830</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05831"></a><span class="lineno"> 5831</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05832"></a><span class="lineno"> 5832</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05833"></a><span class="lineno"> 5833</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05834"></a><span class="lineno"> 5834</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18&gt;</div><div class="line"><a name="l05835"></a><span class="lineno"> 5835</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05836"></a><span class="lineno"> 5836</span>&#160; T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05837"></a><span class="lineno"> 5837</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05838"></a><span class="lineno"> 5838</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05839"></a><span class="lineno"> 5839</span>&#160; NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05840"></a><span class="lineno"> 5840</span>&#160; <span class="keyword">typedef</span> Templates18&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05841"></a><span class="lineno"> 5841</span>&#160; T14, T15, T16, T17, T18&gt; type;</div><div class="line"><a name="l05842"></a><span class="lineno"> 5842</span>&#160;};</div><div class="line"><a name="l05843"></a><span class="lineno"> 5843</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05844"></a><span class="lineno"> 5844</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05845"></a><span class="lineno"> 5845</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05846"></a><span class="lineno"> 5846</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05847"></a><span class="lineno"> 5847</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05848"></a><span class="lineno"> 5848</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05849"></a><span class="lineno"> 5849</span>&#160; GTEST_TEMPLATE_ T19&gt;</div><div class="line"><a name="l05850"></a><span class="lineno"> 5850</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05851"></a><span class="lineno"> 5851</span>&#160; T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05852"></a><span class="lineno"> 5852</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05853"></a><span class="lineno"> 5853</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05854"></a><span class="lineno"> 5854</span>&#160; NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05855"></a><span class="lineno"> 5855</span>&#160; <span class="keyword">typedef</span> Templates19&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05856"></a><span class="lineno"> 5856</span>&#160; T14, T15, T16, T17, T18, T19&gt; type;</div><div class="line"><a name="l05857"></a><span class="lineno"> 5857</span>&#160;};</div><div class="line"><a name="l05858"></a><span class="lineno"> 5858</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05859"></a><span class="lineno"> 5859</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05860"></a><span class="lineno"> 5860</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05861"></a><span class="lineno"> 5861</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05862"></a><span class="lineno"> 5862</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05863"></a><span class="lineno"> 5863</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05864"></a><span class="lineno"> 5864</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20&gt;</div><div class="line"><a name="l05865"></a><span class="lineno"> 5865</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05866"></a><span class="lineno"> 5866</span>&#160; T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05867"></a><span class="lineno"> 5867</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05868"></a><span class="lineno"> 5868</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05869"></a><span class="lineno"> 5869</span>&#160; NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05870"></a><span class="lineno"> 5870</span>&#160; <span class="keyword">typedef</span> Templates20&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05871"></a><span class="lineno"> 5871</span>&#160; T14, T15, T16, T17, T18, T19, T20&gt; type;</div><div class="line"><a name="l05872"></a><span class="lineno"> 5872</span>&#160;};</div><div class="line"><a name="l05873"></a><span class="lineno"> 5873</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05874"></a><span class="lineno"> 5874</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05875"></a><span class="lineno"> 5875</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05876"></a><span class="lineno"> 5876</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05877"></a><span class="lineno"> 5877</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05878"></a><span class="lineno"> 5878</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05879"></a><span class="lineno"> 5879</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21&gt;</div><div class="line"><a name="l05880"></a><span class="lineno"> 5880</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05881"></a><span class="lineno"> 5881</span>&#160; T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05882"></a><span class="lineno"> 5882</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05883"></a><span class="lineno"> 5883</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05884"></a><span class="lineno"> 5884</span>&#160; NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05885"></a><span class="lineno"> 5885</span>&#160; <span class="keyword">typedef</span> Templates21&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05886"></a><span class="lineno"> 5886</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21&gt; type;</div><div class="line"><a name="l05887"></a><span class="lineno"> 5887</span>&#160;};</div><div class="line"><a name="l05888"></a><span class="lineno"> 5888</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05889"></a><span class="lineno"> 5889</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05890"></a><span class="lineno"> 5890</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05891"></a><span class="lineno"> 5891</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05892"></a><span class="lineno"> 5892</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05893"></a><span class="lineno"> 5893</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05894"></a><span class="lineno"> 5894</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05895"></a><span class="lineno"> 5895</span>&#160; GTEST_TEMPLATE_ T22&gt;</div><div class="line"><a name="l05896"></a><span class="lineno"> 5896</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05897"></a><span class="lineno"> 5897</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05898"></a><span class="lineno"> 5898</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05899"></a><span class="lineno"> 5899</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05900"></a><span class="lineno"> 5900</span>&#160; NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05901"></a><span class="lineno"> 5901</span>&#160; <span class="keyword">typedef</span> Templates22&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05902"></a><span class="lineno"> 5902</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22&gt; type;</div><div class="line"><a name="l05903"></a><span class="lineno"> 5903</span>&#160;};</div><div class="line"><a name="l05904"></a><span class="lineno"> 5904</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05905"></a><span class="lineno"> 5905</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05906"></a><span class="lineno"> 5906</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05907"></a><span class="lineno"> 5907</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05908"></a><span class="lineno"> 5908</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05909"></a><span class="lineno"> 5909</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05910"></a><span class="lineno"> 5910</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05911"></a><span class="lineno"> 5911</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23&gt;</div><div class="line"><a name="l05912"></a><span class="lineno"> 5912</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05913"></a><span class="lineno"> 5913</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05914"></a><span class="lineno"> 5914</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05915"></a><span class="lineno"> 5915</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05916"></a><span class="lineno"> 5916</span>&#160; NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05917"></a><span class="lineno"> 5917</span>&#160; <span class="keyword">typedef</span> Templates23&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05918"></a><span class="lineno"> 5918</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23&gt; type;</div><div class="line"><a name="l05919"></a><span class="lineno"> 5919</span>&#160;};</div><div class="line"><a name="l05920"></a><span class="lineno"> 5920</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05921"></a><span class="lineno"> 5921</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05922"></a><span class="lineno"> 5922</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05923"></a><span class="lineno"> 5923</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05924"></a><span class="lineno"> 5924</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05925"></a><span class="lineno"> 5925</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05926"></a><span class="lineno"> 5926</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05927"></a><span class="lineno"> 5927</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24&gt;</div><div class="line"><a name="l05928"></a><span class="lineno"> 5928</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05929"></a><span class="lineno"> 5929</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05930"></a><span class="lineno"> 5930</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05931"></a><span class="lineno"> 5931</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05932"></a><span class="lineno"> 5932</span>&#160; NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l05933"></a><span class="lineno"> 5933</span>&#160; <span class="keyword">typedef</span> Templates24&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05934"></a><span class="lineno"> 5934</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24&gt; type;</div><div class="line"><a name="l05935"></a><span class="lineno"> 5935</span>&#160;};</div><div class="line"><a name="l05936"></a><span class="lineno"> 5936</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05937"></a><span class="lineno"> 5937</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05938"></a><span class="lineno"> 5938</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05939"></a><span class="lineno"> 5939</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05940"></a><span class="lineno"> 5940</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05941"></a><span class="lineno"> 5941</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05942"></a><span class="lineno"> 5942</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05943"></a><span class="lineno"> 5943</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05944"></a><span class="lineno"> 5944</span>&#160; GTEST_TEMPLATE_ T25&gt;</div><div class="line"><a name="l05945"></a><span class="lineno"> 5945</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05946"></a><span class="lineno"> 5946</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05947"></a><span class="lineno"> 5947</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05948"></a><span class="lineno"> 5948</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05949"></a><span class="lineno"> 5949</span>&#160; NoneT, NoneT&gt; {</div><div class="line"><a name="l05950"></a><span class="lineno"> 5950</span>&#160; <span class="keyword">typedef</span> Templates25&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05951"></a><span class="lineno"> 5951</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25&gt; type;</div><div class="line"><a name="l05952"></a><span class="lineno"> 5952</span>&#160;};</div><div class="line"><a name="l05953"></a><span class="lineno"> 5953</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05954"></a><span class="lineno"> 5954</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05955"></a><span class="lineno"> 5955</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05956"></a><span class="lineno"> 5956</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05957"></a><span class="lineno"> 5957</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05958"></a><span class="lineno"> 5958</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05959"></a><span class="lineno"> 5959</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05960"></a><span class="lineno"> 5960</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05961"></a><span class="lineno"> 5961</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26&gt;</div><div class="line"><a name="l05962"></a><span class="lineno"> 5962</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05963"></a><span class="lineno"> 5963</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,</div><div class="line"><a name="l05964"></a><span class="lineno"> 5964</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05965"></a><span class="lineno"> 5965</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05966"></a><span class="lineno"> 5966</span>&#160; NoneT, NoneT&gt; {</div><div class="line"><a name="l05967"></a><span class="lineno"> 5967</span>&#160; <span class="keyword">typedef</span> Templates26&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05968"></a><span class="lineno"> 5968</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26&gt; type;</div><div class="line"><a name="l05969"></a><span class="lineno"> 5969</span>&#160;};</div><div class="line"><a name="l05970"></a><span class="lineno"> 5970</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05971"></a><span class="lineno"> 5971</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05972"></a><span class="lineno"> 5972</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05973"></a><span class="lineno"> 5973</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05974"></a><span class="lineno"> 5974</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05975"></a><span class="lineno"> 5975</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05976"></a><span class="lineno"> 5976</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05977"></a><span class="lineno"> 5977</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05978"></a><span class="lineno"> 5978</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27&gt;</div><div class="line"><a name="l05979"></a><span class="lineno"> 5979</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05980"></a><span class="lineno"> 5980</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,</div><div class="line"><a name="l05981"></a><span class="lineno"> 5981</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05982"></a><span class="lineno"> 5982</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l05983"></a><span class="lineno"> 5983</span>&#160; NoneT, NoneT&gt; {</div><div class="line"><a name="l05984"></a><span class="lineno"> 5984</span>&#160; <span class="keyword">typedef</span> Templates27&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l05985"></a><span class="lineno"> 5985</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l05986"></a><span class="lineno"> 5986</span>&#160; T27&gt; type;</div><div class="line"><a name="l05987"></a><span class="lineno"> 5987</span>&#160;};</div><div class="line"><a name="l05988"></a><span class="lineno"> 5988</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l05989"></a><span class="lineno"> 5989</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l05990"></a><span class="lineno"> 5990</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l05991"></a><span class="lineno"> 5991</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l05992"></a><span class="lineno"> 5992</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l05993"></a><span class="lineno"> 5993</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l05994"></a><span class="lineno"> 5994</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l05995"></a><span class="lineno"> 5995</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l05996"></a><span class="lineno"> 5996</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l05997"></a><span class="lineno"> 5997</span>&#160; GTEST_TEMPLATE_ T28&gt;</div><div class="line"><a name="l05998"></a><span class="lineno"> 5998</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l05999"></a><span class="lineno"> 5999</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l06000"></a><span class="lineno"> 6000</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06001"></a><span class="lineno"> 6001</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06002"></a><span class="lineno"> 6002</span>&#160; NoneT, NoneT&gt; {</div><div class="line"><a name="l06003"></a><span class="lineno"> 6003</span>&#160; <span class="keyword">typedef</span> Templates28&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06004"></a><span class="lineno"> 6004</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06005"></a><span class="lineno"> 6005</span>&#160; T28&gt; type;</div><div class="line"><a name="l06006"></a><span class="lineno"> 6006</span>&#160;};</div><div class="line"><a name="l06007"></a><span class="lineno"> 6007</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06008"></a><span class="lineno"> 6008</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06009"></a><span class="lineno"> 6009</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06010"></a><span class="lineno"> 6010</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06011"></a><span class="lineno"> 6011</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06012"></a><span class="lineno"> 6012</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06013"></a><span class="lineno"> 6013</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06014"></a><span class="lineno"> 6014</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06015"></a><span class="lineno"> 6015</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06016"></a><span class="lineno"> 6016</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29&gt;</div><div class="line"><a name="l06017"></a><span class="lineno"> 6017</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06018"></a><span class="lineno"> 6018</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06019"></a><span class="lineno"> 6019</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06020"></a><span class="lineno"> 6020</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06021"></a><span class="lineno"> 6021</span>&#160; NoneT&gt; {</div><div class="line"><a name="l06022"></a><span class="lineno"> 6022</span>&#160; <span class="keyword">typedef</span> Templates29&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06023"></a><span class="lineno"> 6023</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06024"></a><span class="lineno"> 6024</span>&#160; T28, T29&gt; type;</div><div class="line"><a name="l06025"></a><span class="lineno"> 6025</span>&#160;};</div><div class="line"><a name="l06026"></a><span class="lineno"> 6026</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06027"></a><span class="lineno"> 6027</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06028"></a><span class="lineno"> 6028</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06029"></a><span class="lineno"> 6029</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06030"></a><span class="lineno"> 6030</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06031"></a><span class="lineno"> 6031</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06032"></a><span class="lineno"> 6032</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06033"></a><span class="lineno"> 6033</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06034"></a><span class="lineno"> 6034</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06035"></a><span class="lineno"> 6035</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30&gt;</div><div class="line"><a name="l06036"></a><span class="lineno"> 6036</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06037"></a><span class="lineno"> 6037</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06038"></a><span class="lineno"> 6038</span>&#160; T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06039"></a><span class="lineno"> 6039</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06040"></a><span class="lineno"> 6040</span>&#160; <span class="keyword">typedef</span> Templates30&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06041"></a><span class="lineno"> 6041</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06042"></a><span class="lineno"> 6042</span>&#160; T28, T29, T30&gt; type;</div><div class="line"><a name="l06043"></a><span class="lineno"> 6043</span>&#160;};</div><div class="line"><a name="l06044"></a><span class="lineno"> 6044</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06045"></a><span class="lineno"> 6045</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06046"></a><span class="lineno"> 6046</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06047"></a><span class="lineno"> 6047</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06048"></a><span class="lineno"> 6048</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06049"></a><span class="lineno"> 6049</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06050"></a><span class="lineno"> 6050</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06051"></a><span class="lineno"> 6051</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06052"></a><span class="lineno"> 6052</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06053"></a><span class="lineno"> 6053</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06054"></a><span class="lineno"> 6054</span>&#160; GTEST_TEMPLATE_ T31&gt;</div><div class="line"><a name="l06055"></a><span class="lineno"> 6055</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06056"></a><span class="lineno"> 6056</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06057"></a><span class="lineno"> 6057</span>&#160; T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06058"></a><span class="lineno"> 6058</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06059"></a><span class="lineno"> 6059</span>&#160; <span class="keyword">typedef</span> Templates31&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06060"></a><span class="lineno"> 6060</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06061"></a><span class="lineno"> 6061</span>&#160; T28, T29, T30, T31&gt; type;</div><div class="line"><a name="l06062"></a><span class="lineno"> 6062</span>&#160;};</div><div class="line"><a name="l06063"></a><span class="lineno"> 6063</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06064"></a><span class="lineno"> 6064</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06065"></a><span class="lineno"> 6065</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06066"></a><span class="lineno"> 6066</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06067"></a><span class="lineno"> 6067</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06068"></a><span class="lineno"> 6068</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06069"></a><span class="lineno"> 6069</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06070"></a><span class="lineno"> 6070</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06071"></a><span class="lineno"> 6071</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06072"></a><span class="lineno"> 6072</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06073"></a><span class="lineno"> 6073</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32&gt;</div><div class="line"><a name="l06074"></a><span class="lineno"> 6074</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06075"></a><span class="lineno"> 6075</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06076"></a><span class="lineno"> 6076</span>&#160; T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06077"></a><span class="lineno"> 6077</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06078"></a><span class="lineno"> 6078</span>&#160; <span class="keyword">typedef</span> Templates32&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06079"></a><span class="lineno"> 6079</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06080"></a><span class="lineno"> 6080</span>&#160; T28, T29, T30, T31, T32&gt; type;</div><div class="line"><a name="l06081"></a><span class="lineno"> 6081</span>&#160;};</div><div class="line"><a name="l06082"></a><span class="lineno"> 6082</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06083"></a><span class="lineno"> 6083</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06084"></a><span class="lineno"> 6084</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06085"></a><span class="lineno"> 6085</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06086"></a><span class="lineno"> 6086</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06087"></a><span class="lineno"> 6087</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06088"></a><span class="lineno"> 6088</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06089"></a><span class="lineno"> 6089</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06090"></a><span class="lineno"> 6090</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06091"></a><span class="lineno"> 6091</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06092"></a><span class="lineno"> 6092</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33&gt;</div><div class="line"><a name="l06093"></a><span class="lineno"> 6093</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06094"></a><span class="lineno"> 6094</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06095"></a><span class="lineno"> 6095</span>&#160; T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06096"></a><span class="lineno"> 6096</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06097"></a><span class="lineno"> 6097</span>&#160; <span class="keyword">typedef</span> Templates33&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06098"></a><span class="lineno"> 6098</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06099"></a><span class="lineno"> 6099</span>&#160; T28, T29, T30, T31, T32, T33&gt; type;</div><div class="line"><a name="l06100"></a><span class="lineno"> 6100</span>&#160;};</div><div class="line"><a name="l06101"></a><span class="lineno"> 6101</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06102"></a><span class="lineno"> 6102</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06103"></a><span class="lineno"> 6103</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06104"></a><span class="lineno"> 6104</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06105"></a><span class="lineno"> 6105</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06106"></a><span class="lineno"> 6106</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06107"></a><span class="lineno"> 6107</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06108"></a><span class="lineno"> 6108</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06109"></a><span class="lineno"> 6109</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06110"></a><span class="lineno"> 6110</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06111"></a><span class="lineno"> 6111</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06112"></a><span class="lineno"> 6112</span>&#160; GTEST_TEMPLATE_ T34&gt;</div><div class="line"><a name="l06113"></a><span class="lineno"> 6113</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06114"></a><span class="lineno"> 6114</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06115"></a><span class="lineno"> 6115</span>&#160; T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06116"></a><span class="lineno"> 6116</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06117"></a><span class="lineno"> 6117</span>&#160; <span class="keyword">typedef</span> Templates34&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06118"></a><span class="lineno"> 6118</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06119"></a><span class="lineno"> 6119</span>&#160; T28, T29, T30, T31, T32, T33, T34&gt; type;</div><div class="line"><a name="l06120"></a><span class="lineno"> 6120</span>&#160;};</div><div class="line"><a name="l06121"></a><span class="lineno"> 6121</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06122"></a><span class="lineno"> 6122</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06123"></a><span class="lineno"> 6123</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06124"></a><span class="lineno"> 6124</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06125"></a><span class="lineno"> 6125</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06126"></a><span class="lineno"> 6126</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06127"></a><span class="lineno"> 6127</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06128"></a><span class="lineno"> 6128</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06129"></a><span class="lineno"> 6129</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06130"></a><span class="lineno"> 6130</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06131"></a><span class="lineno"> 6131</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06132"></a><span class="lineno"> 6132</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35&gt;</div><div class="line"><a name="l06133"></a><span class="lineno"> 6133</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06134"></a><span class="lineno"> 6134</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06135"></a><span class="lineno"> 6135</span>&#160; T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06136"></a><span class="lineno"> 6136</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06137"></a><span class="lineno"> 6137</span>&#160; <span class="keyword">typedef</span> Templates35&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06138"></a><span class="lineno"> 6138</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06139"></a><span class="lineno"> 6139</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35&gt; type;</div><div class="line"><a name="l06140"></a><span class="lineno"> 6140</span>&#160;};</div><div class="line"><a name="l06141"></a><span class="lineno"> 6141</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06142"></a><span class="lineno"> 6142</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06143"></a><span class="lineno"> 6143</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06144"></a><span class="lineno"> 6144</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06145"></a><span class="lineno"> 6145</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06146"></a><span class="lineno"> 6146</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06147"></a><span class="lineno"> 6147</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06148"></a><span class="lineno"> 6148</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06149"></a><span class="lineno"> 6149</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06150"></a><span class="lineno"> 6150</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06151"></a><span class="lineno"> 6151</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06152"></a><span class="lineno"> 6152</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36&gt;</div><div class="line"><a name="l06153"></a><span class="lineno"> 6153</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06154"></a><span class="lineno"> 6154</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06155"></a><span class="lineno"> 6155</span>&#160; T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06156"></a><span class="lineno"> 6156</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06157"></a><span class="lineno"> 6157</span>&#160; <span class="keyword">typedef</span> Templates36&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06158"></a><span class="lineno"> 6158</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06159"></a><span class="lineno"> 6159</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36&gt; type;</div><div class="line"><a name="l06160"></a><span class="lineno"> 6160</span>&#160;};</div><div class="line"><a name="l06161"></a><span class="lineno"> 6161</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06162"></a><span class="lineno"> 6162</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06163"></a><span class="lineno"> 6163</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06164"></a><span class="lineno"> 6164</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06165"></a><span class="lineno"> 6165</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06166"></a><span class="lineno"> 6166</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06167"></a><span class="lineno"> 6167</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06168"></a><span class="lineno"> 6168</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06169"></a><span class="lineno"> 6169</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06170"></a><span class="lineno"> 6170</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06171"></a><span class="lineno"> 6171</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06172"></a><span class="lineno"> 6172</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06173"></a><span class="lineno"> 6173</span>&#160; GTEST_TEMPLATE_ T37&gt;</div><div class="line"><a name="l06174"></a><span class="lineno"> 6174</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06175"></a><span class="lineno"> 6175</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06176"></a><span class="lineno"> 6176</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06177"></a><span class="lineno"> 6177</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06178"></a><span class="lineno"> 6178</span>&#160; <span class="keyword">typedef</span> Templates37&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06179"></a><span class="lineno"> 6179</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06180"></a><span class="lineno"> 6180</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37&gt; type;</div><div class="line"><a name="l06181"></a><span class="lineno"> 6181</span>&#160;};</div><div class="line"><a name="l06182"></a><span class="lineno"> 6182</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06183"></a><span class="lineno"> 6183</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06184"></a><span class="lineno"> 6184</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06185"></a><span class="lineno"> 6185</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06186"></a><span class="lineno"> 6186</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06187"></a><span class="lineno"> 6187</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06188"></a><span class="lineno"> 6188</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06189"></a><span class="lineno"> 6189</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06190"></a><span class="lineno"> 6190</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06191"></a><span class="lineno"> 6191</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06192"></a><span class="lineno"> 6192</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06193"></a><span class="lineno"> 6193</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06194"></a><span class="lineno"> 6194</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38&gt;</div><div class="line"><a name="l06195"></a><span class="lineno"> 6195</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06196"></a><span class="lineno"> 6196</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06197"></a><span class="lineno"> 6197</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06198"></a><span class="lineno"> 6198</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06199"></a><span class="lineno"> 6199</span>&#160; <span class="keyword">typedef</span> Templates38&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06200"></a><span class="lineno"> 6200</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06201"></a><span class="lineno"> 6201</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38&gt; type;</div><div class="line"><a name="l06202"></a><span class="lineno"> 6202</span>&#160;};</div><div class="line"><a name="l06203"></a><span class="lineno"> 6203</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06204"></a><span class="lineno"> 6204</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06205"></a><span class="lineno"> 6205</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06206"></a><span class="lineno"> 6206</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06207"></a><span class="lineno"> 6207</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06208"></a><span class="lineno"> 6208</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06209"></a><span class="lineno"> 6209</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06210"></a><span class="lineno"> 6210</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06211"></a><span class="lineno"> 6211</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06212"></a><span class="lineno"> 6212</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06213"></a><span class="lineno"> 6213</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06214"></a><span class="lineno"> 6214</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06215"></a><span class="lineno"> 6215</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39&gt;</div><div class="line"><a name="l06216"></a><span class="lineno"> 6216</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06217"></a><span class="lineno"> 6217</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06218"></a><span class="lineno"> 6218</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06219"></a><span class="lineno"> 6219</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06220"></a><span class="lineno"> 6220</span>&#160; <span class="keyword">typedef</span> Templates39&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06221"></a><span class="lineno"> 6221</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06222"></a><span class="lineno"> 6222</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39&gt; type;</div><div class="line"><a name="l06223"></a><span class="lineno"> 6223</span>&#160;};</div><div class="line"><a name="l06224"></a><span class="lineno"> 6224</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06225"></a><span class="lineno"> 6225</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06226"></a><span class="lineno"> 6226</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06227"></a><span class="lineno"> 6227</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06228"></a><span class="lineno"> 6228</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06229"></a><span class="lineno"> 6229</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06230"></a><span class="lineno"> 6230</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06231"></a><span class="lineno"> 6231</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06232"></a><span class="lineno"> 6232</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06233"></a><span class="lineno"> 6233</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06234"></a><span class="lineno"> 6234</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06235"></a><span class="lineno"> 6235</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06236"></a><span class="lineno"> 6236</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06237"></a><span class="lineno"> 6237</span>&#160; GTEST_TEMPLATE_ T40&gt;</div><div class="line"><a name="l06238"></a><span class="lineno"> 6238</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06239"></a><span class="lineno"> 6239</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06240"></a><span class="lineno"> 6240</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,</div><div class="line"><a name="l06241"></a><span class="lineno"> 6241</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06242"></a><span class="lineno"> 6242</span>&#160; <span class="keyword">typedef</span> Templates40&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06243"></a><span class="lineno"> 6243</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06244"></a><span class="lineno"> 6244</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40&gt; type;</div><div class="line"><a name="l06245"></a><span class="lineno"> 6245</span>&#160;};</div><div class="line"><a name="l06246"></a><span class="lineno"> 6246</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06247"></a><span class="lineno"> 6247</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06248"></a><span class="lineno"> 6248</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06249"></a><span class="lineno"> 6249</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06250"></a><span class="lineno"> 6250</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06251"></a><span class="lineno"> 6251</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06252"></a><span class="lineno"> 6252</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06253"></a><span class="lineno"> 6253</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06254"></a><span class="lineno"> 6254</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06255"></a><span class="lineno"> 6255</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06256"></a><span class="lineno"> 6256</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06257"></a><span class="lineno"> 6257</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06258"></a><span class="lineno"> 6258</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06259"></a><span class="lineno"> 6259</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41&gt;</div><div class="line"><a name="l06260"></a><span class="lineno"> 6260</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06261"></a><span class="lineno"> 6261</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06262"></a><span class="lineno"> 6262</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,</div><div class="line"><a name="l06263"></a><span class="lineno"> 6263</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06264"></a><span class="lineno"> 6264</span>&#160; <span class="keyword">typedef</span> Templates41&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06265"></a><span class="lineno"> 6265</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06266"></a><span class="lineno"> 6266</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l06267"></a><span class="lineno"> 6267</span>&#160; T41&gt; type;</div><div class="line"><a name="l06268"></a><span class="lineno"> 6268</span>&#160;};</div><div class="line"><a name="l06269"></a><span class="lineno"> 6269</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06270"></a><span class="lineno"> 6270</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06271"></a><span class="lineno"> 6271</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06272"></a><span class="lineno"> 6272</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06273"></a><span class="lineno"> 6273</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06274"></a><span class="lineno"> 6274</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06275"></a><span class="lineno"> 6275</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06276"></a><span class="lineno"> 6276</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06277"></a><span class="lineno"> 6277</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06278"></a><span class="lineno"> 6278</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06279"></a><span class="lineno"> 6279</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06280"></a><span class="lineno"> 6280</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06281"></a><span class="lineno"> 6281</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06282"></a><span class="lineno"> 6282</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42&gt;</div><div class="line"><a name="l06283"></a><span class="lineno"> 6283</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06284"></a><span class="lineno"> 6284</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06285"></a><span class="lineno"> 6285</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,</div><div class="line"><a name="l06286"></a><span class="lineno"> 6286</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06287"></a><span class="lineno"> 6287</span>&#160; <span class="keyword">typedef</span> Templates42&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06288"></a><span class="lineno"> 6288</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06289"></a><span class="lineno"> 6289</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06290"></a><span class="lineno"> 6290</span>&#160; T42&gt; type;</div><div class="line"><a name="l06291"></a><span class="lineno"> 6291</span>&#160;};</div><div class="line"><a name="l06292"></a><span class="lineno"> 6292</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06293"></a><span class="lineno"> 6293</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06294"></a><span class="lineno"> 6294</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06295"></a><span class="lineno"> 6295</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06296"></a><span class="lineno"> 6296</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06297"></a><span class="lineno"> 6297</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06298"></a><span class="lineno"> 6298</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06299"></a><span class="lineno"> 6299</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06300"></a><span class="lineno"> 6300</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06301"></a><span class="lineno"> 6301</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06302"></a><span class="lineno"> 6302</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06303"></a><span class="lineno"> 6303</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06304"></a><span class="lineno"> 6304</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06305"></a><span class="lineno"> 6305</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06306"></a><span class="lineno"> 6306</span>&#160; GTEST_TEMPLATE_ T43&gt;</div><div class="line"><a name="l06307"></a><span class="lineno"> 6307</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06308"></a><span class="lineno"> 6308</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06309"></a><span class="lineno"> 6309</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l06310"></a><span class="lineno"> 6310</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06311"></a><span class="lineno"> 6311</span>&#160; <span class="keyword">typedef</span> Templates43&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06312"></a><span class="lineno"> 6312</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06313"></a><span class="lineno"> 6313</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06314"></a><span class="lineno"> 6314</span>&#160; T42, T43&gt; type;</div><div class="line"><a name="l06315"></a><span class="lineno"> 6315</span>&#160;};</div><div class="line"><a name="l06316"></a><span class="lineno"> 6316</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06317"></a><span class="lineno"> 6317</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06318"></a><span class="lineno"> 6318</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06319"></a><span class="lineno"> 6319</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06320"></a><span class="lineno"> 6320</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06321"></a><span class="lineno"> 6321</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06322"></a><span class="lineno"> 6322</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06323"></a><span class="lineno"> 6323</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06324"></a><span class="lineno"> 6324</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06325"></a><span class="lineno"> 6325</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06326"></a><span class="lineno"> 6326</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06327"></a><span class="lineno"> 6327</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06328"></a><span class="lineno"> 6328</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06329"></a><span class="lineno"> 6329</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06330"></a><span class="lineno"> 6330</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44&gt;</div><div class="line"><a name="l06331"></a><span class="lineno"> 6331</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06332"></a><span class="lineno"> 6332</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06333"></a><span class="lineno"> 6333</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06334"></a><span class="lineno"> 6334</span>&#160; NoneT, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06335"></a><span class="lineno"> 6335</span>&#160; <span class="keyword">typedef</span> Templates44&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06336"></a><span class="lineno"> 6336</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06337"></a><span class="lineno"> 6337</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06338"></a><span class="lineno"> 6338</span>&#160; T42, T43, T44&gt; type;</div><div class="line"><a name="l06339"></a><span class="lineno"> 6339</span>&#160;};</div><div class="line"><a name="l06340"></a><span class="lineno"> 6340</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06341"></a><span class="lineno"> 6341</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06342"></a><span class="lineno"> 6342</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06343"></a><span class="lineno"> 6343</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06344"></a><span class="lineno"> 6344</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06345"></a><span class="lineno"> 6345</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06346"></a><span class="lineno"> 6346</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06347"></a><span class="lineno"> 6347</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06348"></a><span class="lineno"> 6348</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06349"></a><span class="lineno"> 6349</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06350"></a><span class="lineno"> 6350</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06351"></a><span class="lineno"> 6351</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06352"></a><span class="lineno"> 6352</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06353"></a><span class="lineno"> 6353</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06354"></a><span class="lineno"> 6354</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45&gt;</div><div class="line"><a name="l06355"></a><span class="lineno"> 6355</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06356"></a><span class="lineno"> 6356</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06357"></a><span class="lineno"> 6357</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06358"></a><span class="lineno"> 6358</span>&#160; T45, NoneT, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06359"></a><span class="lineno"> 6359</span>&#160; <span class="keyword">typedef</span> Templates45&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06360"></a><span class="lineno"> 6360</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06361"></a><span class="lineno"> 6361</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06362"></a><span class="lineno"> 6362</span>&#160; T42, T43, T44, T45&gt; type;</div><div class="line"><a name="l06363"></a><span class="lineno"> 6363</span>&#160;};</div><div class="line"><a name="l06364"></a><span class="lineno"> 6364</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06365"></a><span class="lineno"> 6365</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06366"></a><span class="lineno"> 6366</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06367"></a><span class="lineno"> 6367</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06368"></a><span class="lineno"> 6368</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06369"></a><span class="lineno"> 6369</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06370"></a><span class="lineno"> 6370</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06371"></a><span class="lineno"> 6371</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06372"></a><span class="lineno"> 6372</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06373"></a><span class="lineno"> 6373</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06374"></a><span class="lineno"> 6374</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06375"></a><span class="lineno"> 6375</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06376"></a><span class="lineno"> 6376</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06377"></a><span class="lineno"> 6377</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06378"></a><span class="lineno"> 6378</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l06379"></a><span class="lineno"> 6379</span>&#160; GTEST_TEMPLATE_ T46&gt;</div><div class="line"><a name="l06380"></a><span class="lineno"> 6380</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06381"></a><span class="lineno"> 6381</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06382"></a><span class="lineno"> 6382</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06383"></a><span class="lineno"> 6383</span>&#160; T45, T46, NoneT, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06384"></a><span class="lineno"> 6384</span>&#160; <span class="keyword">typedef</span> Templates46&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06385"></a><span class="lineno"> 6385</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06386"></a><span class="lineno"> 6386</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06387"></a><span class="lineno"> 6387</span>&#160; T42, T43, T44, T45, T46&gt; type;</div><div class="line"><a name="l06388"></a><span class="lineno"> 6388</span>&#160;};</div><div class="line"><a name="l06389"></a><span class="lineno"> 6389</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06390"></a><span class="lineno"> 6390</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06391"></a><span class="lineno"> 6391</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06392"></a><span class="lineno"> 6392</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06393"></a><span class="lineno"> 6393</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06394"></a><span class="lineno"> 6394</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06395"></a><span class="lineno"> 6395</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06396"></a><span class="lineno"> 6396</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06397"></a><span class="lineno"> 6397</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06398"></a><span class="lineno"> 6398</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06399"></a><span class="lineno"> 6399</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06400"></a><span class="lineno"> 6400</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06401"></a><span class="lineno"> 6401</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06402"></a><span class="lineno"> 6402</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06403"></a><span class="lineno"> 6403</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l06404"></a><span class="lineno"> 6404</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47&gt;</div><div class="line"><a name="l06405"></a><span class="lineno"> 6405</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06406"></a><span class="lineno"> 6406</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06407"></a><span class="lineno"> 6407</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06408"></a><span class="lineno"> 6408</span>&#160; T45, T46, T47, NoneT, NoneT, NoneT&gt; {</div><div class="line"><a name="l06409"></a><span class="lineno"> 6409</span>&#160; <span class="keyword">typedef</span> Templates47&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06410"></a><span class="lineno"> 6410</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06411"></a><span class="lineno"> 6411</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06412"></a><span class="lineno"> 6412</span>&#160; T42, T43, T44, T45, T46, T47&gt; type;</div><div class="line"><a name="l06413"></a><span class="lineno"> 6413</span>&#160;};</div><div class="line"><a name="l06414"></a><span class="lineno"> 6414</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06415"></a><span class="lineno"> 6415</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06416"></a><span class="lineno"> 6416</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06417"></a><span class="lineno"> 6417</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06418"></a><span class="lineno"> 6418</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06419"></a><span class="lineno"> 6419</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06420"></a><span class="lineno"> 6420</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06421"></a><span class="lineno"> 6421</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06422"></a><span class="lineno"> 6422</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06423"></a><span class="lineno"> 6423</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06424"></a><span class="lineno"> 6424</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06425"></a><span class="lineno"> 6425</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06426"></a><span class="lineno"> 6426</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06427"></a><span class="lineno"> 6427</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06428"></a><span class="lineno"> 6428</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l06429"></a><span class="lineno"> 6429</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48&gt;</div><div class="line"><a name="l06430"></a><span class="lineno"> 6430</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06431"></a><span class="lineno"> 6431</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06432"></a><span class="lineno"> 6432</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06433"></a><span class="lineno"> 6433</span>&#160; T45, T46, T47, T48, NoneT, NoneT&gt; {</div><div class="line"><a name="l06434"></a><span class="lineno"> 6434</span>&#160; <span class="keyword">typedef</span> Templates48&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06435"></a><span class="lineno"> 6435</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06436"></a><span class="lineno"> 6436</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06437"></a><span class="lineno"> 6437</span>&#160; T42, T43, T44, T45, T46, T47, T48&gt; type;</div><div class="line"><a name="l06438"></a><span class="lineno"> 6438</span>&#160;};</div><div class="line"><a name="l06439"></a><span class="lineno"> 6439</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,</div><div class="line"><a name="l06440"></a><span class="lineno"> 6440</span>&#160; GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,</div><div class="line"><a name="l06441"></a><span class="lineno"> 6441</span>&#160; GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,</div><div class="line"><a name="l06442"></a><span class="lineno"> 6442</span>&#160; GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,</div><div class="line"><a name="l06443"></a><span class="lineno"> 6443</span>&#160; GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,</div><div class="line"><a name="l06444"></a><span class="lineno"> 6444</span>&#160; GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,</div><div class="line"><a name="l06445"></a><span class="lineno"> 6445</span>&#160; GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,</div><div class="line"><a name="l06446"></a><span class="lineno"> 6446</span>&#160; GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,</div><div class="line"><a name="l06447"></a><span class="lineno"> 6447</span>&#160; GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,</div><div class="line"><a name="l06448"></a><span class="lineno"> 6448</span>&#160; GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,</div><div class="line"><a name="l06449"></a><span class="lineno"> 6449</span>&#160; GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,</div><div class="line"><a name="l06450"></a><span class="lineno"> 6450</span>&#160; GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,</div><div class="line"><a name="l06451"></a><span class="lineno"> 6451</span>&#160; GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,</div><div class="line"><a name="l06452"></a><span class="lineno"> 6452</span>&#160; GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,</div><div class="line"><a name="l06453"></a><span class="lineno"> 6453</span>&#160; GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,</div><div class="line"><a name="l06454"></a><span class="lineno"> 6454</span>&#160; GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,</div><div class="line"><a name="l06455"></a><span class="lineno"> 6455</span>&#160; GTEST_TEMPLATE_ T49&gt;</div><div class="line"><a name="l06456"></a><span class="lineno"> 6456</span>&#160;<span class="keyword">struct </span>Templates&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,</div><div class="line"><a name="l06457"></a><span class="lineno"> 6457</span>&#160; T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,</div><div class="line"><a name="l06458"></a><span class="lineno"> 6458</span>&#160; T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,</div><div class="line"><a name="l06459"></a><span class="lineno"> 6459</span>&#160; T45, T46, T47, T48, T49, NoneT&gt; {</div><div class="line"><a name="l06460"></a><span class="lineno"> 6460</span>&#160; <span class="keyword">typedef</span> Templates49&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06461"></a><span class="lineno"> 6461</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,</div><div class="line"><a name="l06462"></a><span class="lineno"> 6462</span>&#160; T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,</div><div class="line"><a name="l06463"></a><span class="lineno"> 6463</span>&#160; T42, T43, T44, T45, T46, T47, T48, T49&gt; type;</div><div class="line"><a name="l06464"></a><span class="lineno"> 6464</span>&#160;};</div><div class="line"><a name="l06465"></a><span class="lineno"> 6465</span>&#160;</div><div class="line"><a name="l06466"></a><span class="lineno"> 6466</span>&#160;<span class="comment">// The TypeList template makes it possible to use either a single type</span></div><div class="line"><a name="l06467"></a><span class="lineno"> 6467</span>&#160;<span class="comment">// or a Types&lt;...&gt; list in TYPED_TEST_SUITE() and</span></div><div class="line"><a name="l06468"></a><span class="lineno"> 6468</span>&#160;<span class="comment">// INSTANTIATE_TYPED_TEST_SUITE_P().</span></div><div class="line"><a name="l06469"></a><span class="lineno"> 6469</span>&#160;</div><div class="line"><a name="l06470"></a><span class="lineno"> 6470</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06471"></a><span class="lineno"> 6471</span>&#160;<span class="keyword">struct </span>TypeList {</div><div class="line"><a name="l06472"></a><span class="lineno"> 6472</span>&#160; <span class="keyword">typedef</span> Types1&lt;T&gt; type;</div><div class="line"><a name="l06473"></a><span class="lineno"> 6473</span>&#160;};</div><div class="line"><a name="l06474"></a><span class="lineno"> 6474</span>&#160;</div><div class="line"><a name="l06475"></a><span class="lineno"> 6475</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l06476"></a><span class="lineno"> 6476</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10,</div><div class="line"><a name="l06477"></a><span class="lineno"> 6477</span>&#160; <span class="keyword">typename</span> T11, <span class="keyword">typename</span> T12, <span class="keyword">typename</span> T13, <span class="keyword">typename</span> T14, <span class="keyword">typename</span> T15,</div><div class="line"><a name="l06478"></a><span class="lineno"> 6478</span>&#160; <span class="keyword">typename</span> T16, <span class="keyword">typename</span> T17, <span class="keyword">typename</span> T18, <span class="keyword">typename</span> T19, <span class="keyword">typename</span> T20,</div><div class="line"><a name="l06479"></a><span class="lineno"> 6479</span>&#160; <span class="keyword">typename</span> T21, <span class="keyword">typename</span> T22, <span class="keyword">typename</span> T23, <span class="keyword">typename</span> T24, <span class="keyword">typename</span> T25,</div><div class="line"><a name="l06480"></a><span class="lineno"> 6480</span>&#160; <span class="keyword">typename</span> T26, <span class="keyword">typename</span> T27, <span class="keyword">typename</span> T28, <span class="keyword">typename</span> T29, <span class="keyword">typename</span> T30,</div><div class="line"><a name="l06481"></a><span class="lineno"> 6481</span>&#160; <span class="keyword">typename</span> T31, <span class="keyword">typename</span> T32, <span class="keyword">typename</span> T33, <span class="keyword">typename</span> T34, <span class="keyword">typename</span> T35,</div><div class="line"><a name="l06482"></a><span class="lineno"> 6482</span>&#160; <span class="keyword">typename</span> T36, <span class="keyword">typename</span> T37, <span class="keyword">typename</span> T38, <span class="keyword">typename</span> T39, <span class="keyword">typename</span> T40,</div><div class="line"><a name="l06483"></a><span class="lineno"> 6483</span>&#160; <span class="keyword">typename</span> T41, <span class="keyword">typename</span> T42, <span class="keyword">typename</span> T43, <span class="keyword">typename</span> T44, <span class="keyword">typename</span> T45,</div><div class="line"><a name="l06484"></a><span class="lineno"> 6484</span>&#160; <span class="keyword">typename</span> T46, <span class="keyword">typename</span> T47, <span class="keyword">typename</span> T48, <span class="keyword">typename</span> T49, <span class="keyword">typename</span> T50&gt;</div><div class="line"><a name="l06485"></a><span class="lineno"> 6485</span>&#160;<span class="keyword">struct </span>TypeList&lt;Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,</div><div class="line"><a name="l06486"></a><span class="lineno"> 6486</span>&#160; T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,</div><div class="line"><a name="l06487"></a><span class="lineno"> 6487</span>&#160; T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,</div><div class="line"><a name="l06488"></a><span class="lineno"> 6488</span>&#160; T44, T45, T46, T47, T48, T49, T50&gt; &gt; {</div><div class="line"><a name="l06489"></a><span class="lineno"> 6489</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Types&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,</div><div class="line"><a name="l06490"></a><span class="lineno"> 6490</span>&#160; T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,</div><div class="line"><a name="l06491"></a><span class="lineno"> 6491</span>&#160; T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,</div><div class="line"><a name="l06492"></a><span class="lineno"> 6492</span>&#160; T41, T42, T43, T44, T45, T46, T47, T48, T49, T50&gt;::type type;</div><div class="line"><a name="l06493"></a><span class="lineno"> 6493</span>&#160;};</div><div class="line"><a name="l06494"></a><span class="lineno"> 6494</span>&#160;</div><div class="line"><a name="l06495"></a><span class="lineno"> 6495</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l06496"></a><span class="lineno"> 6496</span>&#160;</div><div class="line"><a name="l06497"></a><span class="lineno"> 6497</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l06498"></a><span class="lineno"> 6498</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l06499"></a><span class="lineno"> 6499</span>&#160;</div><div class="line"><a name="l06500"></a><span class="lineno"> 6500</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_</span></div><div class="line"><a name="l06501"></a><span class="lineno"> 6501</span>&#160;</div><div class="line"><a name="l06502"></a><span class="lineno"> 6502</span>&#160;<span class="comment">// Due to C++ preprocessor weirdness, we need double indirection to</span></div><div class="line"><a name="l06503"></a><span class="lineno"> 6503</span>&#160;<span class="comment">// concatenate two tokens when one of them is __LINE__. Writing</span></div><div class="line"><a name="l06504"></a><span class="lineno"> 6504</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06505"></a><span class="lineno"> 6505</span>&#160;<span class="comment">// foo ## __LINE__</span></div><div class="line"><a name="l06506"></a><span class="lineno"> 6506</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06507"></a><span class="lineno"> 6507</span>&#160;<span class="comment">// will result in the token foo__LINE__, instead of foo followed by</span></div><div class="line"><a name="l06508"></a><span class="lineno"> 6508</span>&#160;<span class="comment">// the current line number. For more details, see</span></div><div class="line"><a name="l06509"></a><span class="lineno"> 6509</span>&#160;<span class="comment">// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6</span></div><div class="line"><a name="l06510"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae3c336cbe1ae2bd1b1d019333e4428a0"> 6510</a></span>&#160;<span class="preprocessor">#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)</span></div><div class="line"><a name="l06511"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa39fb5346d3573feebe4257cb3a01fde"> 6511</a></span>&#160;<span class="preprocessor">#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar</span></div><div class="line"><a name="l06512"></a><span class="lineno"> 6512</span>&#160;</div><div class="line"><a name="l06513"></a><span class="lineno"> 6513</span>&#160;<span class="comment">// Stringifies its argument.</span></div><div class="line"><a name="l06514"></a><span class="lineno"><a class="line" href="gtest_8h.html#affa935d4361fa573644e9c739dde2b14"> 6514</a></span>&#160;<span class="preprocessor">#define GTEST_STRINGIFY_(name) #name</span></div><div class="line"><a name="l06515"></a><span class="lineno"> 6515</span>&#160;</div><div class="line"><a name="l06516"></a><span class="lineno"> 6516</span>&#160;<span class="keyword">class </span>ProtocolMessage;</div><div class="line"><a name="l06517"></a><span class="lineno"><a class="line" href="namespaceproto2.html"> 6517</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceproto2.html">proto2</a> { <span class="keyword">class </span>Message; }</div><div class="line"><a name="l06518"></a><span class="lineno"> 6518</span>&#160;</div><div class="line"><a name="l06519"></a><span class="lineno"> 6519</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l06520"></a><span class="lineno"> 6520</span>&#160;</div><div class="line"><a name="l06521"></a><span class="lineno"> 6521</span>&#160;<span class="comment">// Forward declarations.</span></div><div class="line"><a name="l06522"></a><span class="lineno"> 6522</span>&#160;</div><div class="line"><a name="l06523"></a><span class="lineno"> 6523</span>&#160;<span class="keyword">class </span>AssertionResult; <span class="comment">// Result of an assertion.</span></div><div class="line"><a name="l06524"></a><span class="lineno"> 6524</span>&#160;<span class="keyword">class </span>Message; <span class="comment">// Represents a failure message.</span></div><div class="line"><a name="l06525"></a><span class="lineno"> 6525</span>&#160;<span class="keyword">class </span>Test; <span class="comment">// Represents a test.</span></div><div class="line"><a name="l06526"></a><span class="lineno"> 6526</span>&#160;<span class="keyword">class </span>TestInfo; <span class="comment">// Information about a test.</span></div><div class="line"><a name="l06527"></a><span class="lineno"> 6527</span>&#160;<span class="keyword">class </span>TestPartResult; <span class="comment">// Result of a test part.</span></div><div class="line"><a name="l06528"></a><span class="lineno"> 6528</span>&#160;<span class="keyword">class </span>UnitTest; <span class="comment">// A collection of test suites.</span></div><div class="line"><a name="l06529"></a><span class="lineno"> 6529</span>&#160;</div><div class="line"><a name="l06530"></a><span class="lineno"> 6530</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06531"></a><span class="lineno"> 6531</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">::std::string</a> <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">PrintToString</a>(<span class="keyword">const</span> T&amp; value);</div><div class="line"><a name="l06532"></a><span class="lineno"> 6532</span>&#160;</div><div class="line"><a name="l06533"></a><span class="lineno"> 6533</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l06534"></a><span class="lineno"> 6534</span>&#160;</div><div class="line"><a name="l06535"></a><span class="lineno"> 6535</span>&#160;<span class="keyword">struct </span>TraceInfo; <span class="comment">// Information about a trace point.</span></div><div class="line"><a name="l06536"></a><span class="lineno"> 6536</span>&#160;<span class="keyword">class </span>TestInfoImpl; <span class="comment">// Opaque implementation of TestInfo</span></div><div class="line"><a name="l06537"></a><span class="lineno"> 6537</span>&#160;<span class="keyword">class </span>UnitTestImpl; <span class="comment">// Opaque implementation of UnitTest</span></div><div class="line"><a name="l06538"></a><span class="lineno"> 6538</span>&#160;</div><div class="line"><a name="l06539"></a><span class="lineno"> 6539</span>&#160;<span class="comment">// The text used in failure messages to indicate the start of the</span></div><div class="line"><a name="l06540"></a><span class="lineno"> 6540</span>&#160;<span class="comment">// stack trace.</span></div><div class="line"><a name="l06541"></a><span class="lineno"> 6541</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="namespacetesting_1_1internal.html#a999c7ef9ff01b6d2d76669372c444aa3">kStackTraceMarker</a>[];</div><div class="line"><a name="l06542"></a><span class="lineno"> 6542</span>&#160;</div><div class="line"><a name="l06543"></a><span class="lineno"> 6543</span>&#160;<span class="comment">// An IgnoredValue object can be implicitly constructed from ANY value.</span></div><div class="line"><a name="l06544"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_ignored_value.html"> 6544</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_ignored_value.html">IgnoredValue</a> {</div><div class="line"><a name="l06545"></a><span class="lineno"> 6545</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06546"></a><span class="lineno"> 6546</span>&#160; <span class="comment">// This constructor template allows any value to be implicitly</span></div><div class="line"><a name="l06547"></a><span class="lineno"> 6547</span>&#160; <span class="comment">// converted to IgnoredValue. The object has no data member and</span></div><div class="line"><a name="l06548"></a><span class="lineno"> 6548</span>&#160; <span class="comment">// doesn&#39;t try to remember anything about the argument. We</span></div><div class="line"><a name="l06549"></a><span class="lineno"> 6549</span>&#160; <span class="comment">// deliberately omit the &#39;explicit&#39; keyword in order to allow the</span></div><div class="line"><a name="l06550"></a><span class="lineno"> 6550</span>&#160; <span class="comment">// conversion to be implicit.</span></div><div class="line"><a name="l06551"></a><span class="lineno"> 6551</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06552"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_ignored_value.html#a6c72839c07a9da8d027efb253144bd91"> 6552</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_ignored_value.html#a6c72839c07a9da8d027efb253144bd91">IgnoredValue</a>(<span class="keyword">const</span> T&amp; <span class="comment">/* ignored */</span>) {} <span class="comment">// NOLINT(runtime/explicit)</span></div><div class="line"><a name="l06553"></a><span class="lineno"> 6553</span>&#160;};</div><div class="line"><a name="l06554"></a><span class="lineno"> 6554</span>&#160;</div><div class="line"><a name="l06555"></a><span class="lineno"> 6555</span>&#160;<span class="comment">// Two overloaded helpers for checking at compile time whether an</span></div><div class="line"><a name="l06556"></a><span class="lineno"> 6556</span>&#160;<span class="comment">// expression is a null pointer literal (i.e. NULL or any 0-valued</span></div><div class="line"><a name="l06557"></a><span class="lineno"> 6557</span>&#160;<span class="comment">// compile-time integral constant). These helpers have no</span></div><div class="line"><a name="l06558"></a><span class="lineno"> 6558</span>&#160;<span class="comment">// implementations, as we only need their signatures.</span></div><div class="line"><a name="l06559"></a><span class="lineno"> 6559</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06560"></a><span class="lineno"> 6560</span>&#160;<span class="comment">// Given IsNullLiteralHelper(x), the compiler will pick the first</span></div><div class="line"><a name="l06561"></a><span class="lineno"> 6561</span>&#160;<span class="comment">// version if x can be implicitly converted to Secret*, and pick the</span></div><div class="line"><a name="l06562"></a><span class="lineno"> 6562</span>&#160;<span class="comment">// second version otherwise. Since Secret is a secret and incomplete</span></div><div class="line"><a name="l06563"></a><span class="lineno"> 6563</span>&#160;<span class="comment">// type, the only expression a user can write that has type Secret* is</span></div><div class="line"><a name="l06564"></a><span class="lineno"> 6564</span>&#160;<span class="comment">// a null pointer literal. Therefore, we know that x is a null</span></div><div class="line"><a name="l06565"></a><span class="lineno"> 6565</span>&#160;<span class="comment">// pointer literal if and only if the first version is picked by the</span></div><div class="line"><a name="l06566"></a><span class="lineno"> 6566</span>&#160;<span class="comment">// compiler.</span></div><div class="line"><a name="l06567"></a><span class="lineno"> 6567</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a62f917c3424d8841de9b49b5ec28edb4">std::true_type</a> <a class="code" href="namespacetesting_1_1internal.html#a3db36c62f31a9439117c41c2b13f4941">IsNullLiteralHelper</a>(Secret*);</div><div class="line"><a name="l06568"></a><span class="lineno"> 6568</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#abb1d0789f19bdde21affccbd1078b525">std::false_type</a> <a class="code" href="namespacetesting_1_1internal.html#a3db36c62f31a9439117c41c2b13f4941">IsNullLiteralHelper</a>(IgnoredValue);</div><div class="line"><a name="l06569"></a><span class="lineno"> 6569</span>&#160;</div><div class="line"><a name="l06570"></a><span class="lineno"> 6570</span>&#160;<span class="comment">// A compile-time bool constant that is true if and only if x is a null pointer</span></div><div class="line"><a name="l06571"></a><span class="lineno"> 6571</span>&#160;<span class="comment">// literal (i.e. nullptr, NULL or any 0-valued compile-time integral constant).</span></div><div class="line"><a name="l06572"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae5dd8e23090e08856613878fa1ff6fca"> 6572</a></span>&#160;<span class="preprocessor">#define GTEST_IS_NULL_LITERAL_(x) \</span></div><div class="line"><a name="l06573"></a><span class="lineno"> 6573</span>&#160;<span class="preprocessor"> decltype(::testing::internal::IsNullLiteralHelper(x))::value</span></div><div class="line"><a name="l06574"></a><span class="lineno"> 6574</span>&#160;</div><div class="line"><a name="l06575"></a><span class="lineno"> 6575</span>&#160;<span class="comment">// Appends the user-supplied message to the Google-Test-generated message.</span></div><div class="line"><a name="l06576"></a><span class="lineno"> 6576</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#af69e146a989e8d48def39a0cc59461c9">AppendUserMessage</a>(</div><div class="line"><a name="l06577"></a><span class="lineno"> 6577</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; gtest_msg, <span class="keyword">const</span> Message&amp; user_msg);</div><div class="line"><a name="l06578"></a><span class="lineno"> 6578</span>&#160;</div><div class="line"><a name="l06579"></a><span class="lineno"> 6579</span>&#160;<span class="preprocessor">#if GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l06580"></a><span class="lineno"> 6580</span>&#160;</div><div class="line"><a name="l06581"></a><span class="lineno"> 6581</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4275 \</div><div class="line"><a name="l06582"></a><span class="lineno"> 6582</span>&#160;<span class="comment">/* an exported class was derived from a class that was not exported */</span>)</div><div class="line"><a name="l06583"></a><span class="lineno"> 6583</span>&#160;</div><div class="line"><a name="l06584"></a><span class="lineno"> 6584</span>&#160;<span class="comment">// This exception is thrown by (and only by) a failed Google Test</span></div><div class="line"><a name="l06585"></a><span class="lineno"> 6585</span>&#160;<span class="comment">// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions</span></div><div class="line"><a name="l06586"></a><span class="lineno"> 6586</span>&#160;<span class="comment">// are enabled). We derive it from std::runtime_error, which is for</span></div><div class="line"><a name="l06587"></a><span class="lineno"> 6587</span>&#160;<span class="comment">// errors presumably detectable only at run time. Since</span></div><div class="line"><a name="l06588"></a><span class="lineno"> 6588</span>&#160;<span class="comment">// std::runtime_error inherits from std::exception, many testing</span></div><div class="line"><a name="l06589"></a><span class="lineno"> 6589</span>&#160;<span class="comment">// frameworks know how to extract and print the message inside it.</span></div><div class="line"><a name="l06590"></a><span class="lineno"> 6590</span>&#160;class <a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> GoogleTestFailureException : public ::std::runtime_error {</div><div class="line"><a name="l06591"></a><span class="lineno"> 6591</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06592"></a><span class="lineno"> 6592</span>&#160; <span class="keyword">explicit</span> GoogleTestFailureException(<span class="keyword">const</span> TestPartResult&amp; failure);</div><div class="line"><a name="l06593"></a><span class="lineno"> 6593</span>&#160;};</div><div class="line"><a name="l06594"></a><span class="lineno"> 6594</span>&#160;</div><div class="line"><a name="l06595"></a><span class="lineno"> 6595</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4275</span></div><div class="line"><a name="l06596"></a><span class="lineno"> 6596</span>&#160;</div><div class="line"><a name="l06597"></a><span class="lineno"> 6597</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l06598"></a><span class="lineno"> 6598</span>&#160;</div><div class="line"><a name="l06599"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1edit__distance.html"> 6599</a></span>&#160;<span class="keyword">namespace </span>edit_distance {</div><div class="line"><a name="l06600"></a><span class="lineno"> 6600</span>&#160;<span class="comment">// Returns the optimal edits to go from &#39;left&#39; to &#39;right&#39;.</span></div><div class="line"><a name="l06601"></a><span class="lineno"> 6601</span>&#160;<span class="comment">// All edits cost the same, with replace having lower priority than</span></div><div class="line"><a name="l06602"></a><span class="lineno"> 6602</span>&#160;<span class="comment">// add/remove.</span></div><div class="line"><a name="l06603"></a><span class="lineno"> 6603</span>&#160;<span class="comment">// Simple implementation of the Wagner-Fischer algorithm.</span></div><div class="line"><a name="l06604"></a><span class="lineno"> 6604</span>&#160;<span class="comment">// See http://en.wikipedia.org/wiki/Wagner-Fischer_algorithm</span></div><div class="line"><a name="l06605"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08afdbf30ecf9f32f60c646a34a358615f2"> 6605</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08">EditType</a> { <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a7bdb9c74613a94f21b7489e0b5640a63">kMatch</a>, <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a63400b073f5b311a87d568b5ae27ffe8">kAdd</a>, <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a814768ef6cd0264a0a10b1e701a63e78">kRemove</a>, <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08afdbf30ecf9f32f60c646a34a358615f2">kReplace</a> };</div><div class="line"><a name="l06606"></a><span class="lineno"> 6606</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> std::vector&lt;EditType&gt; <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad28f23b77f716200bc6644bfc7413a63">CalculateOptimalEdits</a>(</div><div class="line"><a name="l06607"></a><span class="lineno"> 6607</span>&#160; <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; left, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; right);</div><div class="line"><a name="l06608"></a><span class="lineno"> 6608</span>&#160;</div><div class="line"><a name="l06609"></a><span class="lineno"> 6609</span>&#160;<span class="comment">// Same as above, but the input is represented as strings.</span></div><div class="line"><a name="l06610"></a><span class="lineno"> 6610</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> std::vector&lt;EditType&gt; <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#ad28f23b77f716200bc6644bfc7413a63">CalculateOptimalEdits</a>(</div><div class="line"><a name="l06611"></a><span class="lineno"> 6611</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; left,</div><div class="line"><a name="l06612"></a><span class="lineno"> 6612</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; right);</div><div class="line"><a name="l06613"></a><span class="lineno"> 6613</span>&#160;</div><div class="line"><a name="l06614"></a><span class="lineno"> 6614</span>&#160;<span class="comment">// Create a diff of the input strings in Unified diff format.</span></div><div class="line"><a name="l06615"></a><span class="lineno"> 6615</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal_1_1edit__distance.html#a48cffebc6d3169ad1df7849b5f7fb5ff">CreateUnifiedDiff</a>(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; left,</div><div class="line"><a name="l06616"></a><span class="lineno"> 6616</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; right,</div><div class="line"><a name="l06617"></a><span class="lineno"> 6617</span>&#160; <span class="keywordtype">size_t</span> context = 2);</div><div class="line"><a name="l06618"></a><span class="lineno"> 6618</span>&#160;</div><div class="line"><a name="l06619"></a><span class="lineno"> 6619</span>&#160;} <span class="comment">// namespace edit_distance</span></div><div class="line"><a name="l06620"></a><span class="lineno"> 6620</span>&#160;</div><div class="line"><a name="l06621"></a><span class="lineno"> 6621</span>&#160;<span class="comment">// Calculate the diff between &#39;left&#39; and &#39;right&#39; and return it in unified diff</span></div><div class="line"><a name="l06622"></a><span class="lineno"> 6622</span>&#160;<span class="comment">// format.</span></div><div class="line"><a name="l06623"></a><span class="lineno"> 6623</span>&#160;<span class="comment">// If not null, stores in &#39;total_line_count&#39; the total number of lines found</span></div><div class="line"><a name="l06624"></a><span class="lineno"> 6624</span>&#160;<span class="comment">// in left + right.</span></div><div class="line"><a name="l06625"></a><span class="lineno"> 6625</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a513107ff8defa97d949937fc1350a56c">DiffStrings</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; left,</div><div class="line"><a name="l06626"></a><span class="lineno"> 6626</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; right,</div><div class="line"><a name="l06627"></a><span class="lineno"> 6627</span>&#160; <span class="keywordtype">size_t</span>* total_line_count);</div><div class="line"><a name="l06628"></a><span class="lineno"> 6628</span>&#160;</div><div class="line"><a name="l06629"></a><span class="lineno"> 6629</span>&#160;<span class="comment">// Constructs and returns the message for an equality assertion</span></div><div class="line"><a name="l06630"></a><span class="lineno"> 6630</span>&#160;<span class="comment">// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.</span></div><div class="line"><a name="l06631"></a><span class="lineno"> 6631</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06632"></a><span class="lineno"> 6632</span>&#160;<span class="comment">// The first four parameters are the expressions used in the assertion</span></div><div class="line"><a name="l06633"></a><span class="lineno"> 6633</span>&#160;<span class="comment">// and their values, as strings. For example, for ASSERT_EQ(foo, bar)</span></div><div class="line"><a name="l06634"></a><span class="lineno"> 6634</span>&#160;<span class="comment">// where foo is 5 and bar is 6, we have:</span></div><div class="line"><a name="l06635"></a><span class="lineno"> 6635</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06636"></a><span class="lineno"> 6636</span>&#160;<span class="comment">// expected_expression: &quot;foo&quot;</span></div><div class="line"><a name="l06637"></a><span class="lineno"> 6637</span>&#160;<span class="comment">// actual_expression: &quot;bar&quot;</span></div><div class="line"><a name="l06638"></a><span class="lineno"> 6638</span>&#160;<span class="comment">// expected_value: &quot;5&quot;</span></div><div class="line"><a name="l06639"></a><span class="lineno"> 6639</span>&#160;<span class="comment">// actual_value: &quot;6&quot;</span></div><div class="line"><a name="l06640"></a><span class="lineno"> 6640</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06641"></a><span class="lineno"> 6641</span>&#160;<span class="comment">// The ignoring_case parameter is true iff the assertion is a</span></div><div class="line"><a name="l06642"></a><span class="lineno"> 6642</span>&#160;<span class="comment">// *_STRCASEEQ*. When it&#39;s true, the string &quot; (ignoring case)&quot; will</span></div><div class="line"><a name="l06643"></a><span class="lineno"> 6643</span>&#160;<span class="comment">// be inserted into the message.</span></div><div class="line"><a name="l06644"></a><span class="lineno"> 6644</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#ac61e2ba2cbf259fd6ee5ffd4e49c9445">EqFailure</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* expected_expression,</div><div class="line"><a name="l06645"></a><span class="lineno"> 6645</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* actual_expression,</div><div class="line"><a name="l06646"></a><span class="lineno"> 6646</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; expected_value,</div><div class="line"><a name="l06647"></a><span class="lineno"> 6647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; actual_value,</div><div class="line"><a name="l06648"></a><span class="lineno"> 6648</span>&#160; <span class="keywordtype">bool</span> ignoring_case);</div><div class="line"><a name="l06649"></a><span class="lineno"> 6649</span>&#160;</div><div class="line"><a name="l06650"></a><span class="lineno"> 6650</span>&#160;<span class="comment">// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.</span></div><div class="line"><a name="l06651"></a><span class="lineno"> 6651</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#aed8d3ad4341f8f2de53440e39c995632">GetBoolAssertionFailureMessage</a>(</div><div class="line"><a name="l06652"></a><span class="lineno"> 6652</span>&#160; <span class="keyword">const</span> AssertionResult&amp; assertion_result,</div><div class="line"><a name="l06653"></a><span class="lineno"> 6653</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* expression_text,</div><div class="line"><a name="l06654"></a><span class="lineno"> 6654</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* actual_predicate_value,</div><div class="line"><a name="l06655"></a><span class="lineno"> 6655</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* expected_predicate_value);</div><div class="line"><a name="l06656"></a><span class="lineno"> 6656</span>&#160;</div><div class="line"><a name="l06657"></a><span class="lineno"> 6657</span>&#160;<span class="comment">// This template class represents an IEEE floating-point number</span></div><div class="line"><a name="l06658"></a><span class="lineno"> 6658</span>&#160;<span class="comment">// (either single-precision or double-precision, depending on the</span></div><div class="line"><a name="l06659"></a><span class="lineno"> 6659</span>&#160;<span class="comment">// template parameters).</span></div><div class="line"><a name="l06660"></a><span class="lineno"> 6660</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06661"></a><span class="lineno"> 6661</span>&#160;<span class="comment">// The purpose of this class is to do more sophisticated number</span></div><div class="line"><a name="l06662"></a><span class="lineno"> 6662</span>&#160;<span class="comment">// comparison. (Due to round-off error, etc, it&#39;s very unlikely that</span></div><div class="line"><a name="l06663"></a><span class="lineno"> 6663</span>&#160;<span class="comment">// two floating-points will be equal exactly. Hence a naive</span></div><div class="line"><a name="l06664"></a><span class="lineno"> 6664</span>&#160;<span class="comment">// comparison by the == operation often doesn&#39;t work.)</span></div><div class="line"><a name="l06665"></a><span class="lineno"> 6665</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06666"></a><span class="lineno"> 6666</span>&#160;<span class="comment">// Format of IEEE floating-point:</span></div><div class="line"><a name="l06667"></a><span class="lineno"> 6667</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06668"></a><span class="lineno"> 6668</span>&#160;<span class="comment">// The most-significant bit being the leftmost, an IEEE</span></div><div class="line"><a name="l06669"></a><span class="lineno"> 6669</span>&#160;<span class="comment">// floating-point looks like</span></div><div class="line"><a name="l06670"></a><span class="lineno"> 6670</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06671"></a><span class="lineno"> 6671</span>&#160;<span class="comment">// sign_bit exponent_bits fraction_bits</span></div><div class="line"><a name="l06672"></a><span class="lineno"> 6672</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06673"></a><span class="lineno"> 6673</span>&#160;<span class="comment">// Here, sign_bit is a single bit that designates the sign of the</span></div><div class="line"><a name="l06674"></a><span class="lineno"> 6674</span>&#160;<span class="comment">// number.</span></div><div class="line"><a name="l06675"></a><span class="lineno"> 6675</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06676"></a><span class="lineno"> 6676</span>&#160;<span class="comment">// For float, there are 8 exponent bits and 23 fraction bits.</span></div><div class="line"><a name="l06677"></a><span class="lineno"> 6677</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06678"></a><span class="lineno"> 6678</span>&#160;<span class="comment">// For double, there are 11 exponent bits and 52 fraction bits.</span></div><div class="line"><a name="l06679"></a><span class="lineno"> 6679</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06680"></a><span class="lineno"> 6680</span>&#160;<span class="comment">// More details can be found at</span></div><div class="line"><a name="l06681"></a><span class="lineno"> 6681</span>&#160;<span class="comment">// http://en.wikipedia.org/wiki/IEEE_floating-point_standard.</span></div><div class="line"><a name="l06682"></a><span class="lineno"> 6682</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06683"></a><span class="lineno"> 6683</span>&#160;<span class="comment">// Template parameter:</span></div><div class="line"><a name="l06684"></a><span class="lineno"> 6684</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06685"></a><span class="lineno"> 6685</span>&#160;<span class="comment">// RawType: the raw floating-point type (either float or double)</span></div><div class="line"><a name="l06686"></a><span class="lineno"> 6686</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> RawType&gt;</div><div class="line"><a name="l06687"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html"> 6687</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint</a> {</div><div class="line"><a name="l06688"></a><span class="lineno"> 6688</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06689"></a><span class="lineno"> 6689</span>&#160; <span class="comment">// Defines the unsigned integer type that has the same size as the</span></div><div class="line"><a name="l06690"></a><span class="lineno"> 6690</span>&#160; <span class="comment">// floating point number.</span></div><div class="line"><a name="l06691"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731"> 6691</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_type_with_size.html">TypeWithSize&lt;sizeof(RawType)&gt;::UInt</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a>;</div><div class="line"><a name="l06692"></a><span class="lineno"> 6692</span>&#160;</div><div class="line"><a name="l06693"></a><span class="lineno"> 6693</span>&#160; <span class="comment">// Constants.</span></div><div class="line"><a name="l06694"></a><span class="lineno"> 6694</span>&#160;</div><div class="line"><a name="l06695"></a><span class="lineno"> 6695</span>&#160; <span class="comment">// # of bits in a number.</span></div><div class="line"><a name="l06696"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#ab819d2e8f93e9e482373999f0f8d71b9"> 6696</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#ab819d2e8f93e9e482373999f0f8d71b9">kBitCount</a> = 8*<span class="keyword">sizeof</span>(RawType);</div><div class="line"><a name="l06697"></a><span class="lineno"> 6697</span>&#160;</div><div class="line"><a name="l06698"></a><span class="lineno"> 6698</span>&#160; <span class="comment">// # of fraction bits in a number.</span></div><div class="line"><a name="l06699"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a0b756a6d2a4f5f5b41ca79651c06c043"> 6699</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0b756a6d2a4f5f5b41ca79651c06c043">kFractionBitCount</a> =</div><div class="line"><a name="l06700"></a><span class="lineno"> 6700</span>&#160; std::numeric_limits&lt;RawType&gt;::digits - 1;</div><div class="line"><a name="l06701"></a><span class="lineno"> 6701</span>&#160;</div><div class="line"><a name="l06702"></a><span class="lineno"> 6702</span>&#160; <span class="comment">// # of exponent bits in a number.</span></div><div class="line"><a name="l06703"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a1973d843c00781053d3073daa8a40119"> 6703</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a1973d843c00781053d3073daa8a40119">kExponentBitCount</a> = <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#ab819d2e8f93e9e482373999f0f8d71b9">kBitCount</a> - 1 - <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0b756a6d2a4f5f5b41ca79651c06c043">kFractionBitCount</a>;</div><div class="line"><a name="l06704"></a><span class="lineno"> 6704</span>&#160;</div><div class="line"><a name="l06705"></a><span class="lineno"> 6705</span>&#160; <span class="comment">// The mask for the sign bit.</span></div><div class="line"><a name="l06706"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa"> 6706</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">kSignBitMask</a> = <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a><span class="keyword">&gt;</span>(1) &lt;&lt; (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#ab819d2e8f93e9e482373999f0f8d71b9">kBitCount</a> - 1);</div><div class="line"><a name="l06707"></a><span class="lineno"> 6707</span>&#160;</div><div class="line"><a name="l06708"></a><span class="lineno"> 6708</span>&#160; <span class="comment">// The mask for the fraction bits.</span></div><div class="line"><a name="l06709"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a0ac75d4ffd24f14bca452abe8a718da1"> 6709</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0ac75d4ffd24f14bca452abe8a718da1">kFractionBitMask</a> =</div><div class="line"><a name="l06710"></a><span class="lineno"> 6710</span>&#160; ~static_cast&lt;<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a>&gt;(0) &gt;&gt; (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a1973d843c00781053d3073daa8a40119">kExponentBitCount</a> + 1);</div><div class="line"><a name="l06711"></a><span class="lineno"> 6711</span>&#160;</div><div class="line"><a name="l06712"></a><span class="lineno"> 6712</span>&#160; <span class="comment">// The mask for the exponent bits.</span></div><div class="line"><a name="l06713"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b"> 6713</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b">kExponentBitMask</a> = ~(<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">kSignBitMask</a> | <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0ac75d4ffd24f14bca452abe8a718da1">kFractionBitMask</a>);</div><div class="line"><a name="l06714"></a><span class="lineno"> 6714</span>&#160;</div><div class="line"><a name="l06715"></a><span class="lineno"> 6715</span>&#160; <span class="comment">// How many ULP&#39;s (Units in the Last Place) we want to tolerate when</span></div><div class="line"><a name="l06716"></a><span class="lineno"> 6716</span>&#160; <span class="comment">// comparing two numbers. The larger the value, the more error we</span></div><div class="line"><a name="l06717"></a><span class="lineno"> 6717</span>&#160; <span class="comment">// allow. A 0 value means that two numbers must be exactly the same</span></div><div class="line"><a name="l06718"></a><span class="lineno"> 6718</span>&#160; <span class="comment">// to be considered equal.</span></div><div class="line"><a name="l06719"></a><span class="lineno"> 6719</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06720"></a><span class="lineno"> 6720</span>&#160; <span class="comment">// The maximum error of a single floating-point operation is 0.5</span></div><div class="line"><a name="l06721"></a><span class="lineno"> 6721</span>&#160; <span class="comment">// units in the last place. On Intel CPU&#39;s, all floating-point</span></div><div class="line"><a name="l06722"></a><span class="lineno"> 6722</span>&#160; <span class="comment">// calculations are done with 80-bit precision, while double has 64</span></div><div class="line"><a name="l06723"></a><span class="lineno"> 6723</span>&#160; <span class="comment">// bits. Therefore, 4 should be enough for ordinary use.</span></div><div class="line"><a name="l06724"></a><span class="lineno"> 6724</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06725"></a><span class="lineno"> 6725</span>&#160; <span class="comment">// See the following article for more details on ULP:</span></div><div class="line"><a name="l06726"></a><span class="lineno"> 6726</span>&#160; <span class="comment">// http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/</span></div><div class="line"><a name="l06727"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#aac498b3714d93f8e88cdc30e4c5935f6"> 6727</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aac498b3714d93f8e88cdc30e4c5935f6">kMaxUlps</a> = 4;</div><div class="line"><a name="l06728"></a><span class="lineno"> 6728</span>&#160;</div><div class="line"><a name="l06729"></a><span class="lineno"> 6729</span>&#160; <span class="comment">// Constructs a FloatingPoint from a raw floating-point number.</span></div><div class="line"><a name="l06730"></a><span class="lineno"> 6730</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06731"></a><span class="lineno"> 6731</span>&#160; <span class="comment">// On an Intel CPU, passing a non-normalized NAN (Not a Number)</span></div><div class="line"><a name="l06732"></a><span class="lineno"> 6732</span>&#160; <span class="comment">// around may change its bits, although the new value is guaranteed</span></div><div class="line"><a name="l06733"></a><span class="lineno"> 6733</span>&#160; <span class="comment">// to be also a NAN. Therefore, don&#39;t expect this constructor to</span></div><div class="line"><a name="l06734"></a><span class="lineno"> 6734</span>&#160; <span class="comment">// preserve the bits in x when x is a NAN.</span></div><div class="line"><a name="l06735"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a0dabf840863e0df84046f171c891fe71"> 6735</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0dabf840863e0df84046f171c891fe71">FloatingPoint</a>(<span class="keyword">const</span> RawType&amp; x) { u_.value_ = x; }</div><div class="line"><a name="l06736"></a><span class="lineno"> 6736</span>&#160;</div><div class="line"><a name="l06737"></a><span class="lineno"> 6737</span>&#160; <span class="comment">// Static methods</span></div><div class="line"><a name="l06738"></a><span class="lineno"> 6738</span>&#160;</div><div class="line"><a name="l06739"></a><span class="lineno"> 6739</span>&#160; <span class="comment">// Reinterprets a bit pattern as a floating-point number.</span></div><div class="line"><a name="l06740"></a><span class="lineno"> 6740</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06741"></a><span class="lineno"> 6741</span>&#160; <span class="comment">// This function is needed to test the AlmostEquals() method.</span></div><div class="line"><a name="l06742"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#ac551f793522e54fbd8a25acb79eac5b1"> 6742</a></span>&#160; <span class="keyword">static</span> RawType <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#ac551f793522e54fbd8a25acb79eac5b1">ReinterpretBits</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aab053be914bdc9e507c0db89740c318c">bits</a>) {</div><div class="line"><a name="l06743"></a><span class="lineno"> 6743</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint</a> fp(0);</div><div class="line"><a name="l06744"></a><span class="lineno"> 6744</span>&#160; fp.u_.bits_ = <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aab053be914bdc9e507c0db89740c318c">bits</a>;</div><div class="line"><a name="l06745"></a><span class="lineno"> 6745</span>&#160; <span class="keywordflow">return</span> fp.u_.value_;</div><div class="line"><a name="l06746"></a><span class="lineno"> 6746</span>&#160; }</div><div class="line"><a name="l06747"></a><span class="lineno"> 6747</span>&#160;</div><div class="line"><a name="l06748"></a><span class="lineno"> 6748</span>&#160; <span class="comment">// Returns the floating-point number that represent positive infinity.</span></div><div class="line"><a name="l06749"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a460027cc19cf01ae8e09cc3796b2b575"> 6749</a></span>&#160; <span class="keyword">static</span> RawType <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a460027cc19cf01ae8e09cc3796b2b575">Infinity</a>() {</div><div class="line"><a name="l06750"></a><span class="lineno"> 6750</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#ac551f793522e54fbd8a25acb79eac5b1">ReinterpretBits</a>(<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b">kExponentBitMask</a>);</div><div class="line"><a name="l06751"></a><span class="lineno"> 6751</span>&#160; }</div><div class="line"><a name="l06752"></a><span class="lineno"> 6752</span>&#160;</div><div class="line"><a name="l06753"></a><span class="lineno"> 6753</span>&#160; <span class="comment">// Returns the maximum representable finite floating-point number.</span></div><div class="line"><a name="l06754"></a><span class="lineno"> 6754</span>&#160; <span class="keyword">static</span> RawType <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aae5954d8a57d3ff0987c6930cb68e114">Max</a>();</div><div class="line"><a name="l06755"></a><span class="lineno"> 6755</span>&#160;</div><div class="line"><a name="l06756"></a><span class="lineno"> 6756</span>&#160; <span class="comment">// Non-static methods</span></div><div class="line"><a name="l06757"></a><span class="lineno"> 6757</span>&#160;</div><div class="line"><a name="l06758"></a><span class="lineno"> 6758</span>&#160; <span class="comment">// Returns the bits that represents this number.</span></div><div class="line"><a name="l06759"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#aab053be914bdc9e507c0db89740c318c"> 6759</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> &amp;<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aab053be914bdc9e507c0db89740c318c">bits</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_.bits_; }</div><div class="line"><a name="l06760"></a><span class="lineno"> 6760</span>&#160;</div><div class="line"><a name="l06761"></a><span class="lineno"> 6761</span>&#160; <span class="comment">// Returns the exponent bits of this number.</span></div><div class="line"><a name="l06762"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#af6bf8fab8df572ecb137a3516ff390ae"> 6762</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#af6bf8fab8df572ecb137a3516ff390ae">exponent_bits</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b">kExponentBitMask</a> &amp; u_.bits_; }</div><div class="line"><a name="l06763"></a><span class="lineno"> 6763</span>&#160;</div><div class="line"><a name="l06764"></a><span class="lineno"> 6764</span>&#160; <span class="comment">// Returns the fraction bits of this number.</span></div><div class="line"><a name="l06765"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#aa17337e50a2ac855719bc0676529558f"> 6765</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aa17337e50a2ac855719bc0676529558f">fraction_bits</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a0ac75d4ffd24f14bca452abe8a718da1">kFractionBitMask</a> &amp; u_.bits_; }</div><div class="line"><a name="l06766"></a><span class="lineno"> 6766</span>&#160;</div><div class="line"><a name="l06767"></a><span class="lineno"> 6767</span>&#160; <span class="comment">// Returns the sign bit of this number.</span></div><div class="line"><a name="l06768"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#afb8a816bb598225d775caaf43a893ef0"> 6768</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#afb8a816bb598225d775caaf43a893ef0">sign_bit</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">kSignBitMask</a> &amp; u_.bits_; }</div><div class="line"><a name="l06769"></a><span class="lineno"> 6769</span>&#160;</div><div class="line"><a name="l06770"></a><span class="lineno"> 6770</span>&#160; <span class="comment">// Returns true iff this is NAN (not a number).</span></div><div class="line"><a name="l06771"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a1fc654fd206efa98e480aa1e034f30d5"> 6771</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a1fc654fd206efa98e480aa1e034f30d5">is_nan</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l06772"></a><span class="lineno"> 6772</span>&#160; <span class="comment">// It&#39;s a NAN if the exponent bits are all ones and the fraction</span></div><div class="line"><a name="l06773"></a><span class="lineno"> 6773</span>&#160; <span class="comment">// bits are not entirely zeros.</span></div><div class="line"><a name="l06774"></a><span class="lineno"> 6774</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#af6bf8fab8df572ecb137a3516ff390ae">exponent_bits</a>() == <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b">kExponentBitMask</a>) &amp;&amp; (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aa17337e50a2ac855719bc0676529558f">fraction_bits</a>() != 0);</div><div class="line"><a name="l06775"></a><span class="lineno"> 6775</span>&#160; }</div><div class="line"><a name="l06776"></a><span class="lineno"> 6776</span>&#160;</div><div class="line"><a name="l06777"></a><span class="lineno"> 6777</span>&#160; <span class="comment">// Returns true iff this number is at most kMaxUlps ULP&#39;s away from</span></div><div class="line"><a name="l06778"></a><span class="lineno"> 6778</span>&#160; <span class="comment">// rhs. In particular, this function:</span></div><div class="line"><a name="l06779"></a><span class="lineno"> 6779</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06780"></a><span class="lineno"> 6780</span>&#160; <span class="comment">// - returns false if either number is (or both are) NAN.</span></div><div class="line"><a name="l06781"></a><span class="lineno"> 6781</span>&#160; <span class="comment">// - treats really large numbers as almost equal to infinity.</span></div><div class="line"><a name="l06782"></a><span class="lineno"> 6782</span>&#160; <span class="comment">// - thinks +0.0 and -0.0 are 0 DLP&#39;s apart.</span></div><div class="line"><a name="l06783"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#a965214c1af2f9ac5adb1393794aa81e5"> 6783</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a965214c1af2f9ac5adb1393794aa81e5">AlmostEquals</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l06784"></a><span class="lineno"> 6784</span>&#160; <span class="comment">// The IEEE standard says that any comparison operation involving</span></div><div class="line"><a name="l06785"></a><span class="lineno"> 6785</span>&#160; <span class="comment">// a NAN must return false.</span></div><div class="line"><a name="l06786"></a><span class="lineno"> 6786</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a1fc654fd206efa98e480aa1e034f30d5">is_nan</a>() || rhs.<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#a1fc654fd206efa98e480aa1e034f30d5">is_nan</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l06787"></a><span class="lineno"> 6787</span>&#160;</div><div class="line"><a name="l06788"></a><span class="lineno"> 6788</span>&#160; <span class="keywordflow">return</span> DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)</div><div class="line"><a name="l06789"></a><span class="lineno"> 6789</span>&#160; &lt;= <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aac498b3714d93f8e88cdc30e4c5935f6">kMaxUlps</a>;</div><div class="line"><a name="l06790"></a><span class="lineno"> 6790</span>&#160; }</div><div class="line"><a name="l06791"></a><span class="lineno"> 6791</span>&#160;</div><div class="line"><a name="l06792"></a><span class="lineno"> 6792</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06793"></a><span class="lineno"> 6793</span>&#160; <span class="comment">// The data type used to store the actual floating-point number.</span></div><div class="line"><a name="l06794"></a><span class="lineno"> 6794</span>&#160; <span class="keyword">union </span>FloatingPointUnion {</div><div class="line"><a name="l06795"></a><span class="lineno"> 6795</span>&#160; RawType value_; <span class="comment">// The raw floating-point number.</span></div><div class="line"><a name="l06796"></a><span class="lineno"> 6796</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> bits_; <span class="comment">// The bits that represent the number.</span></div><div class="line"><a name="l06797"></a><span class="lineno"> 6797</span>&#160; };</div><div class="line"><a name="l06798"></a><span class="lineno"> 6798</span>&#160;</div><div class="line"><a name="l06799"></a><span class="lineno"> 6799</span>&#160; <span class="comment">// Converts an integer from the sign-and-magnitude representation to</span></div><div class="line"><a name="l06800"></a><span class="lineno"> 6800</span>&#160; <span class="comment">// the biased representation. More precisely, let N be 2 to the</span></div><div class="line"><a name="l06801"></a><span class="lineno"> 6801</span>&#160; <span class="comment">// power of (kBitCount - 1), an integer x is represented by the</span></div><div class="line"><a name="l06802"></a><span class="lineno"> 6802</span>&#160; <span class="comment">// unsigned number x + N.</span></div><div class="line"><a name="l06803"></a><span class="lineno"> 6803</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06804"></a><span class="lineno"> 6804</span>&#160; <span class="comment">// For instance,</span></div><div class="line"><a name="l06805"></a><span class="lineno"> 6805</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06806"></a><span class="lineno"> 6806</span>&#160; <span class="comment">// -N + 1 (the most negative number representable using</span></div><div class="line"><a name="l06807"></a><span class="lineno"> 6807</span>&#160; <span class="comment">// sign-and-magnitude) is represented by 1;</span></div><div class="line"><a name="l06808"></a><span class="lineno"> 6808</span>&#160; <span class="comment">// 0 is represented by N; and</span></div><div class="line"><a name="l06809"></a><span class="lineno"> 6809</span>&#160; <span class="comment">// N - 1 (the biggest number representable using</span></div><div class="line"><a name="l06810"></a><span class="lineno"> 6810</span>&#160; <span class="comment">// sign-and-magnitude) is represented by 2N - 1.</span></div><div class="line"><a name="l06811"></a><span class="lineno"> 6811</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l06812"></a><span class="lineno"> 6812</span>&#160; <span class="comment">// Read http://en.wikipedia.org/wiki/Signed_number_representations</span></div><div class="line"><a name="l06813"></a><span class="lineno"> 6813</span>&#160; <span class="comment">// for more details on signed number representations.</span></div><div class="line"><a name="l06814"></a><span class="lineno"> 6814</span>&#160; <span class="keyword">static</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> SignAndMagnitudeToBiased(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> &amp;sam) {</div><div class="line"><a name="l06815"></a><span class="lineno"> 6815</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">kSignBitMask</a> &amp; sam) {</div><div class="line"><a name="l06816"></a><span class="lineno"> 6816</span>&#160; <span class="comment">// sam represents a negative number.</span></div><div class="line"><a name="l06817"></a><span class="lineno"> 6817</span>&#160; <span class="keywordflow">return</span> ~sam + 1;</div><div class="line"><a name="l06818"></a><span class="lineno"> 6818</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l06819"></a><span class="lineno"> 6819</span>&#160; <span class="comment">// sam represents a positive number.</span></div><div class="line"><a name="l06820"></a><span class="lineno"> 6820</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">kSignBitMask</a> | sam;</div><div class="line"><a name="l06821"></a><span class="lineno"> 6821</span>&#160; }</div><div class="line"><a name="l06822"></a><span class="lineno"> 6822</span>&#160; }</div><div class="line"><a name="l06823"></a><span class="lineno"> 6823</span>&#160;</div><div class="line"><a name="l06824"></a><span class="lineno"> 6824</span>&#160; <span class="comment">// Given two numbers in the sign-and-magnitude representation,</span></div><div class="line"><a name="l06825"></a><span class="lineno"> 6825</span>&#160; <span class="comment">// returns the distance between them as an unsigned number.</span></div><div class="line"><a name="l06826"></a><span class="lineno"> 6826</span>&#160; <span class="keyword">static</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> DistanceBetweenSignAndMagnitudeNumbers(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> &amp;sam1,</div><div class="line"><a name="l06827"></a><span class="lineno"> 6827</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> &amp;sam2) {</div><div class="line"><a name="l06828"></a><span class="lineno"> 6828</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> biased1 = SignAndMagnitudeToBiased(sam1);</div><div class="line"><a name="l06829"></a><span class="lineno"> 6829</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">Bits</a> biased2 = SignAndMagnitudeToBiased(sam2);</div><div class="line"><a name="l06830"></a><span class="lineno"> 6830</span>&#160; <span class="keywordflow">return</span> (biased1 &gt;= biased2) ? (biased1 - biased2) : (biased2 - biased1);</div><div class="line"><a name="l06831"></a><span class="lineno"> 6831</span>&#160; }</div><div class="line"><a name="l06832"></a><span class="lineno"> 6832</span>&#160;</div><div class="line"><a name="l06833"></a><span class="lineno"> 6833</span>&#160; FloatingPointUnion u_;</div><div class="line"><a name="l06834"></a><span class="lineno"> 6834</span>&#160;};</div><div class="line"><a name="l06835"></a><span class="lineno"> 6835</span>&#160;</div><div class="line"><a name="l06836"></a><span class="lineno"> 6836</span>&#160;<span class="comment">// We cannot use std::numeric_limits&lt;T&gt;::max() as it clashes with the max()</span></div><div class="line"><a name="l06837"></a><span class="lineno"> 6837</span>&#160;<span class="comment">// macro defined by &lt;windows.h&gt;.</span></div><div class="line"><a name="l06838"></a><span class="lineno"> 6838</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l06839"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#af2eda9331e679229a1baa3404b57b51d"> 6839</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">float</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aae5954d8a57d3ff0987c6930cb68e114">FloatingPoint&lt;float&gt;::Max</a>() { <span class="keywordflow">return</span> FLT_MAX; }</div><div class="line"><a name="l06840"></a><span class="lineno"> 6840</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l06841"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_floating_point.html#afc2e85c0e886cb13b2300e961c9a9648"> 6841</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html#aae5954d8a57d3ff0987c6930cb68e114">FloatingPoint&lt;double&gt;::Max</a>() { <span class="keywordflow">return</span> DBL_MAX; }</div><div class="line"><a name="l06842"></a><span class="lineno"> 6842</span>&#160;</div><div class="line"><a name="l06843"></a><span class="lineno"> 6843</span>&#160;<span class="comment">// Typedefs the instances of the FloatingPoint template class that we</span></div><div class="line"><a name="l06844"></a><span class="lineno"> 6844</span>&#160;<span class="comment">// care to use.</span></div><div class="line"><a name="l06845"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a02e1981f5ff70609e6ac06e006ff519a"> 6845</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint&lt;float&gt;</a> <a class="code" href="namespacetesting_1_1internal.html#a02e1981f5ff70609e6ac06e006ff519a">Float</a>;</div><div class="line"><a name="l06846"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a66a7579b1893b260c31dad577f7a5c48"> 6846</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint&lt;double&gt;</a> <a class="code" href="namespacetesting_1_1internal.html#a66a7579b1893b260c31dad577f7a5c48">Double</a>;</div><div class="line"><a name="l06847"></a><span class="lineno"> 6847</span>&#160;</div><div class="line"><a name="l06848"></a><span class="lineno"> 6848</span>&#160;<span class="comment">// In order to catch the mistake of putting tests that use different</span></div><div class="line"><a name="l06849"></a><span class="lineno"> 6849</span>&#160;<span class="comment">// test fixture classes in the same test suite, we need to assign</span></div><div class="line"><a name="l06850"></a><span class="lineno"> 6850</span>&#160;<span class="comment">// unique IDs to fixture classes and compare them. The TypeId type is</span></div><div class="line"><a name="l06851"></a><span class="lineno"> 6851</span>&#160;<span class="comment">// used to hold such IDs. The user should treat TypeId as an opaque</span></div><div class="line"><a name="l06852"></a><span class="lineno"> 6852</span>&#160;<span class="comment">// type: the only operation allowed on TypeId values is to compare</span></div><div class="line"><a name="l06853"></a><span class="lineno"> 6853</span>&#160;<span class="comment">// them for equality using the == operator.</span></div><div class="line"><a name="l06854"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00"> 6854</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keywordtype">void</span>* <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a>;</div><div class="line"><a name="l06855"></a><span class="lineno"> 6855</span>&#160;</div><div class="line"><a name="l06856"></a><span class="lineno"> 6856</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06857"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_id_helper.html"> 6857</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_type_id_helper.html">TypeIdHelper</a> {</div><div class="line"><a name="l06858"></a><span class="lineno"> 6858</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06859"></a><span class="lineno"> 6859</span>&#160; <span class="comment">// dummy_ must not have a const type. Otherwise an overly eager</span></div><div class="line"><a name="l06860"></a><span class="lineno"> 6860</span>&#160; <span class="comment">// compiler (e.g. MSVC 7.1 &amp; 8.0) may try to merge</span></div><div class="line"><a name="l06861"></a><span class="lineno"> 6861</span>&#160; <span class="comment">// TypeIdHelper&lt;T&gt;::dummy_ for different Ts as an &quot;optimization&quot;.</span></div><div class="line"><a name="l06862"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_type_id_helper.html#a372268b1520d965d0bdf01ebad3d270e"> 6862</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_type_id_helper.html#a372268b1520d965d0bdf01ebad3d270e">dummy_</a>;</div><div class="line"><a name="l06863"></a><span class="lineno"> 6863</span>&#160;};</div><div class="line"><a name="l06864"></a><span class="lineno"> 6864</span>&#160;</div><div class="line"><a name="l06865"></a><span class="lineno"> 6865</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06866"></a><span class="lineno"> 6866</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_type_id_helper.html">TypeIdHelper&lt;T&gt;::dummy_</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l06867"></a><span class="lineno"> 6867</span>&#160;</div><div class="line"><a name="l06868"></a><span class="lineno"> 6868</span>&#160;<span class="comment">// GetTypeId&lt;T&gt;() returns the ID of type T. Different values will be</span></div><div class="line"><a name="l06869"></a><span class="lineno"> 6869</span>&#160;<span class="comment">// returned for different types. Calling the function twice with the</span></div><div class="line"><a name="l06870"></a><span class="lineno"> 6870</span>&#160;<span class="comment">// same type argument is guaranteed to return the same ID.</span></div><div class="line"><a name="l06871"></a><span class="lineno"> 6871</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06872"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a6b108e56fdc68ea937ffb3759fb55ab0"> 6872</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a> <a class="code" href="namespacetesting_1_1internal.html#a6b108e56fdc68ea937ffb3759fb55ab0">GetTypeId</a>() {</div><div class="line"><a name="l06873"></a><span class="lineno"> 6873</span>&#160; <span class="comment">// The compiler is required to allocate a different</span></div><div class="line"><a name="l06874"></a><span class="lineno"> 6874</span>&#160; <span class="comment">// TypeIdHelper&lt;T&gt;::dummy_ variable for each T used to instantiate</span></div><div class="line"><a name="l06875"></a><span class="lineno"> 6875</span>&#160; <span class="comment">// the template. Therefore, the address of dummy_ is guaranteed to</span></div><div class="line"><a name="l06876"></a><span class="lineno"> 6876</span>&#160; <span class="comment">// be unique.</span></div><div class="line"><a name="l06877"></a><span class="lineno"> 6877</span>&#160; <span class="keywordflow">return</span> &amp;(<a class="code" href="classtesting_1_1internal_1_1_type_id_helper.html">TypeIdHelper&lt;T&gt;::dummy_</a>);</div><div class="line"><a name="l06878"></a><span class="lineno"> 6878</span>&#160;}</div><div class="line"><a name="l06879"></a><span class="lineno"> 6879</span>&#160;</div><div class="line"><a name="l06880"></a><span class="lineno"> 6880</span>&#160;<span class="comment">// Returns the type ID of ::testing::Test. Always call this instead</span></div><div class="line"><a name="l06881"></a><span class="lineno"> 6881</span>&#160;<span class="comment">// of GetTypeId&lt; ::testing::Test&gt;() to get the type ID of</span></div><div class="line"><a name="l06882"></a><span class="lineno"> 6882</span>&#160;<span class="comment">// ::testing::Test, as the latter may give the wrong result due to a</span></div><div class="line"><a name="l06883"></a><span class="lineno"> 6883</span>&#160;<span class="comment">// suspected linker bug when compiling Google Test as a Mac OS X</span></div><div class="line"><a name="l06884"></a><span class="lineno"> 6884</span>&#160;<span class="comment">// framework.</span></div><div class="line"><a name="l06885"></a><span class="lineno"> 6885</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a> <a class="code" href="namespacetesting_1_1internal.html#a1e85cf16bb95b60f879d48ba1fbfc1c9">GetTestTypeId</a>();</div><div class="line"><a name="l06886"></a><span class="lineno"> 6886</span>&#160;</div><div class="line"><a name="l06887"></a><span class="lineno"> 6887</span>&#160;<span class="comment">// Defines the abstract factory interface that creates instances</span></div><div class="line"><a name="l06888"></a><span class="lineno"> 6888</span>&#160;<span class="comment">// of a Test object.</span></div><div class="line"><a name="l06889"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_factory_base.html"> 6889</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a> {</div><div class="line"><a name="l06890"></a><span class="lineno"> 6890</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06891"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_factory_base.html#a18f22a7594336a36642289c1decddc9e"> 6891</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html#a18f22a7594336a36642289c1decddc9e">~TestFactoryBase</a>() {}</div><div class="line"><a name="l06892"></a><span class="lineno"> 6892</span>&#160;</div><div class="line"><a name="l06893"></a><span class="lineno"> 6893</span>&#160; <span class="comment">// Creates a test instance to run. The instance is both created and destroyed</span></div><div class="line"><a name="l06894"></a><span class="lineno"> 6894</span>&#160; <span class="comment">// within TestInfoImpl::Run()</span></div><div class="line"><a name="l06895"></a><span class="lineno"> 6895</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1_test.html">Test</a>* <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html#a07ac3ca0b196cdb092da0bb186b7c030">CreateTest</a>() = 0;</div><div class="line"><a name="l06896"></a><span class="lineno"> 6896</span>&#160;</div><div class="line"><a name="l06897"></a><span class="lineno"> 6897</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l06898"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_factory_base.html#afedbf147b2a213517b315880d8c81427"> 6898</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html#afedbf147b2a213517b315880d8c81427">TestFactoryBase</a>() {}</div><div class="line"><a name="l06899"></a><span class="lineno"> 6899</span>&#160;</div><div class="line"><a name="l06900"></a><span class="lineno"> 6900</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06901"></a><span class="lineno"> 6901</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a>);</div><div class="line"><a name="l06902"></a><span class="lineno"> 6902</span>&#160;};</div><div class="line"><a name="l06903"></a><span class="lineno"> 6903</span>&#160;</div><div class="line"><a name="l06904"></a><span class="lineno"> 6904</span>&#160;<span class="comment">// This class provides implementation of TeastFactoryBase interface.</span></div><div class="line"><a name="l06905"></a><span class="lineno"> 6905</span>&#160;<span class="comment">// It is used in TEST and TEST_F macros.</span></div><div class="line"><a name="l06906"></a><span class="lineno"> 6906</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> TestClass&gt;</div><div class="line"><a name="l06907"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_factory_impl.html"> 6907</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_test_factory_impl.html">TestFactoryImpl</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a> {</div><div class="line"><a name="l06908"></a><span class="lineno"> 6908</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06909"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_factory_impl.html#ab9b9236ef39b14f0a78e611748e970e3"> 6909</a></span>&#160; <a class="code" href="classtesting_1_1_test.html">Test</a>* <a class="code" href="classtesting_1_1internal_1_1_test_factory_impl.html#ab9b9236ef39b14f0a78e611748e970e3">CreateTest</a>()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> TestClass; }</div><div class="line"><a name="l06910"></a><span class="lineno"> 6910</span>&#160;};</div><div class="line"><a name="l06911"></a><span class="lineno"> 6911</span>&#160;</div><div class="line"><a name="l06912"></a><span class="lineno"> 6912</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l06913"></a><span class="lineno"> 6913</span>&#160;</div><div class="line"><a name="l06914"></a><span class="lineno"> 6914</span>&#160;<span class="comment">// Predicate-formatters for implementing the HRESULT checking macros</span></div><div class="line"><a name="l06915"></a><span class="lineno"> 6915</span>&#160;<span class="comment">// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}</span></div><div class="line"><a name="l06916"></a><span class="lineno"> 6916</span>&#160;<span class="comment">// We pass a long instead of HRESULT to avoid causing an</span></div><div class="line"><a name="l06917"></a><span class="lineno"> 6917</span>&#160;<span class="comment">// include dependency for the HRESULT type.</span></div><div class="line"><a name="l06918"></a><span class="lineno"> 6918</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult IsHRESULTSuccess(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr,</div><div class="line"><a name="l06919"></a><span class="lineno"> 6919</span>&#160; <span class="keywordtype">long</span> hr); <span class="comment">// NOLINT</span></div><div class="line"><a name="l06920"></a><span class="lineno"> 6920</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult IsHRESULTFailure(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr,</div><div class="line"><a name="l06921"></a><span class="lineno"> 6921</span>&#160; <span class="keywordtype">long</span> hr); <span class="comment">// NOLINT</span></div><div class="line"><a name="l06922"></a><span class="lineno"> 6922</span>&#160;</div><div class="line"><a name="l06923"></a><span class="lineno"> 6923</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l06924"></a><span class="lineno"> 6924</span>&#160;</div><div class="line"><a name="l06925"></a><span class="lineno"> 6925</span>&#160;<span class="comment">// Types of SetUpTestSuite() and TearDownTestSuite() functions.</span></div><div class="line"><a name="l06926"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2"> 6926</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">SetUpTestSuiteFunc</a> = void (*)();</div><div class="line"><a name="l06927"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5"> 6927</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">TearDownTestSuiteFunc</a> = void (*)();</div><div class="line"><a name="l06928"></a><span class="lineno"> 6928</span>&#160;</div><div class="line"><a name="l06929"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_code_location.html"> 6929</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_code_location.html">CodeLocation</a> {</div><div class="line"><a name="l06930"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_code_location.html#a323a11851c81629d632c47b9b767b8ac"> 6930</a></span>&#160; <a class="code" href="structtesting_1_1internal_1_1_code_location.html#a323a11851c81629d632c47b9b767b8ac">CodeLocation</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; a_file, <span class="keywordtype">int</span> a_line)</div><div class="line"><a name="l06931"></a><span class="lineno"> 6931</span>&#160; : <a class="code" href="structtesting_1_1internal_1_1_code_location.html#a38118056ad3c11359920274e393bc6b3">file</a>(a_file), <a class="code" href="structtesting_1_1internal_1_1_code_location.html#a01c977c7e8834a05a6d6c40b0c416045">line</a>(a_line) {}</div><div class="line"><a name="l06932"></a><span class="lineno"> 6932</span>&#160;</div><div class="line"><a name="l06933"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_code_location.html#a38118056ad3c11359920274e393bc6b3"> 6933</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="structtesting_1_1internal_1_1_code_location.html#a38118056ad3c11359920274e393bc6b3">file</a>;</div><div class="line"><a name="l06934"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_code_location.html#a01c977c7e8834a05a6d6c40b0c416045"> 6934</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structtesting_1_1internal_1_1_code_location.html#a01c977c7e8834a05a6d6c40b0c416045">line</a>;</div><div class="line"><a name="l06935"></a><span class="lineno"> 6935</span>&#160;};</div><div class="line"><a name="l06936"></a><span class="lineno"> 6936</span>&#160;</div><div class="line"><a name="l06937"></a><span class="lineno"> 6937</span>&#160;<span class="comment">// Helper to identify which setup function for TestCase / TestSuite to call.</span></div><div class="line"><a name="l06938"></a><span class="lineno"> 6938</span>&#160;<span class="comment">// Only one function is allowed, either TestCase or TestSute but not both.</span></div><div class="line"><a name="l06939"></a><span class="lineno"> 6939</span>&#160;</div><div class="line"><a name="l06940"></a><span class="lineno"> 6940</span>&#160;<span class="comment">// Utility functions to help SuiteApiResolver</span></div><div class="line"><a name="l06941"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4"> 6941</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> = void (*)();</div><div class="line"><a name="l06942"></a><span class="lineno"> 6942</span>&#160;</div><div class="line"><a name="l06943"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336"> 6943</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> <a class="code" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">GetNotDefaultOrNull</a>(</div><div class="line"><a name="l06944"></a><span class="lineno"> 6944</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> a, <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> def) {</div><div class="line"><a name="l06945"></a><span class="lineno"> 6945</span>&#160; <span class="keywordflow">return</span> a == def ? nullptr : a;</div><div class="line"><a name="l06946"></a><span class="lineno"> 6946</span>&#160;}</div><div class="line"><a name="l06947"></a><span class="lineno"> 6947</span>&#160;</div><div class="line"><a name="l06948"></a><span class="lineno"> 6948</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l06949"></a><span class="lineno"> 6949</span>&#160;<span class="comment">// Note that SuiteApiResolver inherits from T because</span></div><div class="line"><a name="l06950"></a><span class="lineno"> 6950</span>&#160;<span class="comment">// SetUpTestSuite()/TearDownTestSuite() could be protected. Ths way</span></div><div class="line"><a name="l06951"></a><span class="lineno"> 6951</span>&#160;<span class="comment">// SuiteApiResolver can access them.</span></div><div class="line"><a name="l06952"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_suite_api_resolver.html"> 6952</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html">SuiteApiResolver</a> : T {</div><div class="line"><a name="l06953"></a><span class="lineno"> 6953</span>&#160; <span class="comment">// testing::Test is only forward declared at this point. So we make it a</span></div><div class="line"><a name="l06954"></a><span class="lineno"> 6954</span>&#160; <span class="comment">// dependend class for the compiler to be OK with it.</span></div><div class="line"><a name="l06955"></a><span class="lineno"> 6955</span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a343c36f492a946d302b1cfc930266768">Test</a> =</div><div class="line"><a name="l06956"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a343c36f492a946d302b1cfc930266768"> 6956</a></span>&#160; <span class="keyword">typename</span> std::conditional&lt;sizeof(T) != 0, ::testing::Test, void&gt;::type;</div><div class="line"><a name="l06957"></a><span class="lineno"> 6957</span>&#160;</div><div class="line"><a name="l06958"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a460c8a0039577824e9170e6c332b530f"> 6958</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a460c8a0039577824e9170e6c332b530f">GetSetUpCaseOrSuite</a>() {</div><div class="line"><a name="l06959"></a><span class="lineno"> 6959</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> test_case_fp =</div><div class="line"><a name="l06960"></a><span class="lineno"> 6960</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">GetNotDefaultOrNull</a>(&amp;T::SetUpTestCase, &amp;<a class="code" href="classtesting_1_1_test.html#a5ccbac42fee8c5b00b0bfe89b6c49d79">Test::SetUpTestCase</a>);</div><div class="line"><a name="l06961"></a><span class="lineno"> 6961</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> test_suite_fp =</div><div class="line"><a name="l06962"></a><span class="lineno"> 6962</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">GetNotDefaultOrNull</a>(&amp;T::SetUpTestSuite, &amp;<a class="code" href="classtesting_1_1_test.html#ae173b07a0fdd09fc1d417a2bb6cbdd76">Test::SetUpTestSuite</a>);</div><div class="line"><a name="l06963"></a><span class="lineno"> 6963</span>&#160;</div><div class="line"><a name="l06964"></a><span class="lineno"> 6964</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(!test_case_fp || !test_suite_fp)</div><div class="line"><a name="l06965"></a><span class="lineno"> 6965</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Test can not provide both SetUpTestSuite and SetUpTestCase, please &quot;</span></div><div class="line"><a name="l06966"></a><span class="lineno"> 6966</span>&#160; <span class="stringliteral">&quot;make sure there is only one present &quot;</span>;</div><div class="line"><a name="l06967"></a><span class="lineno"> 6967</span>&#160;</div><div class="line"><a name="l06968"></a><span class="lineno"> 6968</span>&#160; <span class="keywordflow">return</span> test_case_fp != <span class="keyword">nullptr</span> ? test_case_fp : test_suite_fp;</div><div class="line"><a name="l06969"></a><span class="lineno"> 6969</span>&#160; }</div><div class="line"><a name="l06970"></a><span class="lineno"> 6970</span>&#160;</div><div class="line"><a name="l06971"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a8495afe4e71c81842119035a71db7e18"> 6971</a></span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a8495afe4e71c81842119035a71db7e18">GetTearDownCaseOrSuite</a>() {</div><div class="line"><a name="l06972"></a><span class="lineno"> 6972</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> test_case_fp =</div><div class="line"><a name="l06973"></a><span class="lineno"> 6973</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">GetNotDefaultOrNull</a>(&amp;T::TearDownTestCase, &amp;<a class="code" href="classtesting_1_1_test.html#af374706cbaf0ffc460f4fd04e7c150f1">Test::TearDownTestCase</a>);</div><div class="line"><a name="l06974"></a><span class="lineno"> 6974</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">SetUpTearDownSuiteFuncType</a> test_suite_fp =</div><div class="line"><a name="l06975"></a><span class="lineno"> 6975</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">GetNotDefaultOrNull</a>(&amp;T::TearDownTestSuite, &amp;<a class="code" href="classtesting_1_1_test.html#a7704c8223ba28338a66ca2eaeba66383">Test::TearDownTestSuite</a>);</div><div class="line"><a name="l06976"></a><span class="lineno"> 6976</span>&#160;</div><div class="line"><a name="l06977"></a><span class="lineno"> 6977</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(!test_case_fp || !test_suite_fp)</div><div class="line"><a name="l06978"></a><span class="lineno"> 6978</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Test can not provide both TearDownTestSuite and TearDownTestCase,&quot;</span></div><div class="line"><a name="l06979"></a><span class="lineno"> 6979</span>&#160; <span class="stringliteral">&quot; please make sure there is only one present &quot;</span>;</div><div class="line"><a name="l06980"></a><span class="lineno"> 6980</span>&#160;</div><div class="line"><a name="l06981"></a><span class="lineno"> 6981</span>&#160; <span class="keywordflow">return</span> test_case_fp != <span class="keyword">nullptr</span> ? test_case_fp : test_suite_fp;</div><div class="line"><a name="l06982"></a><span class="lineno"> 6982</span>&#160; }</div><div class="line"><a name="l06983"></a><span class="lineno"> 6983</span>&#160;};</div><div class="line"><a name="l06984"></a><span class="lineno"> 6984</span>&#160;</div><div class="line"><a name="l06985"></a><span class="lineno"> 6985</span>&#160;<span class="comment">// Creates a new TestInfo object and registers it with Google Test;</span></div><div class="line"><a name="l06986"></a><span class="lineno"> 6986</span>&#160;<span class="comment">// returns the created object.</span></div><div class="line"><a name="l06987"></a><span class="lineno"> 6987</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06988"></a><span class="lineno"> 6988</span>&#160;<span class="comment">// Arguments:</span></div><div class="line"><a name="l06989"></a><span class="lineno"> 6989</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l06990"></a><span class="lineno"> 6990</span>&#160;<span class="comment">// test_suite_name: name of the test suite</span></div><div class="line"><a name="l06991"></a><span class="lineno"> 6991</span>&#160;<span class="comment">// name: name of the test</span></div><div class="line"><a name="l06992"></a><span class="lineno"> 6992</span>&#160;<span class="comment">// type_param the name of the test&#39;s type parameter, or NULL if</span></div><div class="line"><a name="l06993"></a><span class="lineno"> 6993</span>&#160;<span class="comment">// this is not a typed or a type-parameterized test.</span></div><div class="line"><a name="l06994"></a><span class="lineno"> 6994</span>&#160;<span class="comment">// value_param text representation of the test&#39;s value parameter,</span></div><div class="line"><a name="l06995"></a><span class="lineno"> 6995</span>&#160;<span class="comment">// or NULL if this is not a type-parameterized test.</span></div><div class="line"><a name="l06996"></a><span class="lineno"> 6996</span>&#160;<span class="comment">// code_location: code location where the test is defined</span></div><div class="line"><a name="l06997"></a><span class="lineno"> 6997</span>&#160;<span class="comment">// fixture_class_id: ID of the test fixture class</span></div><div class="line"><a name="l06998"></a><span class="lineno"> 6998</span>&#160;<span class="comment">// set_up_tc: pointer to the function that sets up the test suite</span></div><div class="line"><a name="l06999"></a><span class="lineno"> 6999</span>&#160;<span class="comment">// tear_down_tc: pointer to the function that tears down the test suite</span></div><div class="line"><a name="l07000"></a><span class="lineno"> 7000</span>&#160;<span class="comment">// factory: pointer to the factory that creates a test object.</span></div><div class="line"><a name="l07001"></a><span class="lineno"> 7001</span>&#160;<span class="comment">// The newly created TestInfo instance will assume</span></div><div class="line"><a name="l07002"></a><span class="lineno"> 7002</span>&#160;<span class="comment">// ownership of the factory object.</span></div><div class="line"><a name="l07003"></a><span class="lineno"> 7003</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* <a class="code" href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">MakeAndRegisterTestInfo</a>(</div><div class="line"><a name="l07004"></a><span class="lineno"> 7004</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* type_param,</div><div class="line"><a name="l07005"></a><span class="lineno"> 7005</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* value_param, CodeLocation code_location,</div><div class="line"><a name="l07006"></a><span class="lineno"> 7006</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a> fixture_class_id, <a class="code" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">SetUpTestSuiteFunc</a> set_up_tc,</div><div class="line"><a name="l07007"></a><span class="lineno"> 7007</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">TearDownTestSuiteFunc</a> tear_down_tc, TestFactoryBase* factory);</div><div class="line"><a name="l07008"></a><span class="lineno"> 7008</span>&#160;</div><div class="line"><a name="l07009"></a><span class="lineno"> 7009</span>&#160;<span class="comment">// If *pstr starts with the given prefix, modifies *pstr to be right</span></div><div class="line"><a name="l07010"></a><span class="lineno"> 7010</span>&#160;<span class="comment">// past the prefix and returns true; otherwise leaves *pstr unchanged</span></div><div class="line"><a name="l07011"></a><span class="lineno"> 7011</span>&#160;<span class="comment">// and returns false. None of pstr, *pstr, and prefix can be NULL.</span></div><div class="line"><a name="l07012"></a><span class="lineno"> 7012</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#aac72b20299ad4a99554ce161e1769560">SkipPrefix</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* prefix, <span class="keyword">const</span> <span class="keywordtype">char</span>** pstr);</div><div class="line"><a name="l07013"></a><span class="lineno"> 7013</span>&#160;</div><div class="line"><a name="l07014"></a><span class="lineno"> 7014</span>&#160;<span class="preprocessor">#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l07015"></a><span class="lineno"> 7015</span>&#160;</div><div class="line"><a name="l07016"></a><span class="lineno"> 7016</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l07017"></a><span class="lineno"> 7017</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l07018"></a><span class="lineno"> 7018</span>&#160;</div><div class="line"><a name="l07019"></a><span class="lineno"> 7019</span>&#160;<span class="comment">// State of the definition of a type-parameterized test suite.</span></div><div class="line"><a name="l07020"></a><span class="lineno"> 7020</span>&#160;class <a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> TypedTestSuitePState {</div><div class="line"><a name="l07021"></a><span class="lineno"> 7021</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07022"></a><span class="lineno"> 7022</span>&#160; TypedTestSuitePState() : registered_(false) {}</div><div class="line"><a name="l07023"></a><span class="lineno"> 7023</span>&#160;</div><div class="line"><a name="l07024"></a><span class="lineno"> 7024</span>&#160; <span class="comment">// Adds the given test name to defined_test_names_ and return true</span></div><div class="line"><a name="l07025"></a><span class="lineno"> 7025</span>&#160; <span class="comment">// if the test suite hasn&#39;t been registered; otherwise aborts the</span></div><div class="line"><a name="l07026"></a><span class="lineno"> 7026</span>&#160; <span class="comment">// program.</span></div><div class="line"><a name="l07027"></a><span class="lineno"> 7027</span>&#160; <span class="keywordtype">bool</span> AddTestName(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* case_name,</div><div class="line"><a name="l07028"></a><span class="lineno"> 7028</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_name) {</div><div class="line"><a name="l07029"></a><span class="lineno"> 7029</span>&#160; <span class="keywordflow">if</span> (registered_) {</div><div class="line"><a name="l07030"></a><span class="lineno"> 7030</span>&#160; fprintf(stderr,</div><div class="line"><a name="l07031"></a><span class="lineno"> 7031</span>&#160; <span class="stringliteral">&quot;%s Test %s must be defined before &quot;</span></div><div class="line"><a name="l07032"></a><span class="lineno"> 7032</span>&#160; <span class="stringliteral">&quot;REGISTER_TYPED_TEST_SUITE_P(%s, ...).\n&quot;</span>,</div><div class="line"><a name="l07033"></a><span class="lineno"> 7033</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a31b7c3abed4a7c395f42c61e993989f4">FormatFileLocation</a>(file, line).c_str(), test_name, case_name);</div><div class="line"><a name="l07034"></a><span class="lineno"> 7034</span>&#160; fflush(stderr);</div><div class="line"><a name="l07035"></a><span class="lineno"> 7035</span>&#160; <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">posix::Abort</a>();</div><div class="line"><a name="l07036"></a><span class="lineno"> 7036</span>&#160; }</div><div class="line"><a name="l07037"></a><span class="lineno"> 7037</span>&#160; registered_tests_.insert(</div><div class="line"><a name="l07038"></a><span class="lineno"> 7038</span>&#160; ::std::make_pair(test_name, CodeLocation(file, line)));</div><div class="line"><a name="l07039"></a><span class="lineno"> 7039</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07040"></a><span class="lineno"> 7040</span>&#160; }</div><div class="line"><a name="l07041"></a><span class="lineno"> 7041</span>&#160;</div><div class="line"><a name="l07042"></a><span class="lineno"> 7042</span>&#160; <span class="keywordtype">bool</span> TestExists(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; test_name)<span class="keyword"> const </span>{</div><div class="line"><a name="l07043"></a><span class="lineno"> 7043</span>&#160; <span class="keywordflow">return</span> registered_tests_.count(test_name) &gt; 0;</div><div class="line"><a name="l07044"></a><span class="lineno"> 7044</span>&#160; }</div><div class="line"><a name="l07045"></a><span class="lineno"> 7045</span>&#160;</div><div class="line"><a name="l07046"></a><span class="lineno"> 7046</span>&#160; <span class="keyword">const</span> CodeLocation&amp; GetCodeLocation(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; test_name)<span class="keyword"> const </span>{</div><div class="line"><a name="l07047"></a><span class="lineno"> 7047</span>&#160; RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);</div><div class="line"><a name="l07048"></a><span class="lineno"> 7048</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(it != registered_tests_.end());</div><div class="line"><a name="l07049"></a><span class="lineno"> 7049</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l07050"></a><span class="lineno"> 7050</span>&#160; }</div><div class="line"><a name="l07051"></a><span class="lineno"> 7051</span>&#160;</div><div class="line"><a name="l07052"></a><span class="lineno"> 7052</span>&#160; <span class="comment">// Verifies that registered_tests match the test names in</span></div><div class="line"><a name="l07053"></a><span class="lineno"> 7053</span>&#160; <span class="comment">// defined_test_names_; returns registered_tests if successful, or</span></div><div class="line"><a name="l07054"></a><span class="lineno"> 7054</span>&#160; <span class="comment">// aborts the program otherwise.</span></div><div class="line"><a name="l07055"></a><span class="lineno"> 7055</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* VerifyRegisteredTestNames(</div><div class="line"><a name="l07056"></a><span class="lineno"> 7056</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* registered_tests);</div><div class="line"><a name="l07057"></a><span class="lineno"> 7057</span>&#160;</div><div class="line"><a name="l07058"></a><span class="lineno"> 7058</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07059"></a><span class="lineno"> 7059</span>&#160; typedef ::std::map&lt;std::string, CodeLocation&gt; RegisteredTestsMap;</div><div class="line"><a name="l07060"></a><span class="lineno"> 7060</span>&#160;</div><div class="line"><a name="l07061"></a><span class="lineno"> 7061</span>&#160; <span class="keywordtype">bool</span> registered_;</div><div class="line"><a name="l07062"></a><span class="lineno"> 7062</span>&#160; RegisteredTestsMap registered_tests_;</div><div class="line"><a name="l07063"></a><span class="lineno"> 7063</span>&#160;};</div><div class="line"><a name="l07064"></a><span class="lineno"> 7064</span>&#160;</div><div class="line"><a name="l07065"></a><span class="lineno"> 7065</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l07066"></a><span class="lineno"> 7066</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l07067"></a><span class="lineno"> 7067</span>&#160;<span class="keyword">using</span> TypedTestCasePState = TypedTestSuitePState;</div><div class="line"><a name="l07068"></a><span class="lineno"> 7068</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l07069"></a><span class="lineno"> 7069</span>&#160;</div><div class="line"><a name="l07070"></a><span class="lineno"> 7070</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l07071"></a><span class="lineno"> 7071</span>&#160;</div><div class="line"><a name="l07072"></a><span class="lineno"> 7072</span>&#160;<span class="comment">// Skips to the first non-space char after the first comma in &#39;str&#39;;</span></div><div class="line"><a name="l07073"></a><span class="lineno"> 7073</span>&#160;<span class="comment">// returns NULL if no comma is found in &#39;str&#39;.</span></div><div class="line"><a name="l07074"></a><span class="lineno"> 7074</span>&#160;inline const <span class="keywordtype">char</span>* SkipComma(const <span class="keywordtype">char</span>* str) {</div><div class="line"><a name="l07075"></a><span class="lineno"> 7075</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* comma = strchr(str, <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l07076"></a><span class="lineno"> 7076</span>&#160; <span class="keywordflow">if</span> (comma == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l07077"></a><span class="lineno"> 7077</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l07078"></a><span class="lineno"> 7078</span>&#160; }</div><div class="line"><a name="l07079"></a><span class="lineno"> 7079</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="namespacetesting_1_1internal.html#af429e04f70f9c10f6aa76a5d1ccd389f">IsSpace</a>(*(++comma))) {}</div><div class="line"><a name="l07080"></a><span class="lineno"> 7080</span>&#160; <span class="keywordflow">return</span> comma;</div><div class="line"><a name="l07081"></a><span class="lineno"> 7081</span>&#160;}</div><div class="line"><a name="l07082"></a><span class="lineno"> 7082</span>&#160;</div><div class="line"><a name="l07083"></a><span class="lineno"> 7083</span>&#160;<span class="comment">// Returns the prefix of &#39;str&#39; before the first comma in it; returns</span></div><div class="line"><a name="l07084"></a><span class="lineno"> 7084</span>&#160;<span class="comment">// the entire string if it contains no comma.</span></div><div class="line"><a name="l07085"></a><span class="lineno"> 7085</span>&#160;<span class="keyword">inline</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> GetPrefixUntilComma(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) {</div><div class="line"><a name="l07086"></a><span class="lineno"> 7086</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* comma = strchr(str, <span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l07087"></a><span class="lineno"> 7087</span>&#160; <span class="keywordflow">return</span> comma == <span class="keyword">nullptr</span> ? str : <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>(str, comma);</div><div class="line"><a name="l07088"></a><span class="lineno"> 7088</span>&#160;}</div><div class="line"><a name="l07089"></a><span class="lineno"> 7089</span>&#160;</div><div class="line"><a name="l07090"></a><span class="lineno"> 7090</span>&#160;<span class="comment">// Splits a given string on a given delimiter, populating a given</span></div><div class="line"><a name="l07091"></a><span class="lineno"> 7091</span>&#160;<span class="comment">// vector with the fields.</span></div><div class="line"><a name="l07092"></a><span class="lineno"> 7092</span>&#160;<span class="keywordtype">void</span> SplitString(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; str, <span class="keywordtype">char</span> delimiter,</div><div class="line"><a name="l07093"></a><span class="lineno"> 7093</span>&#160; ::std::vector&lt; ::std::string&gt;* dest);</div><div class="line"><a name="l07094"></a><span class="lineno"> 7094</span>&#160;</div><div class="line"><a name="l07095"></a><span class="lineno"> 7095</span>&#160;<span class="comment">// The default argument to the template below for the case when the user does</span></div><div class="line"><a name="l07096"></a><span class="lineno"> 7096</span>&#160;<span class="comment">// not provide a name generator.</span></div><div class="line"><a name="l07097"></a><span class="lineno"> 7097</span>&#160;<span class="keyword">struct </span>DefaultNameGenerator {</div><div class="line"><a name="l07098"></a><span class="lineno"> 7098</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07099"></a><span class="lineno"> 7099</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> GetName(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l07100"></a><span class="lineno"> 7100</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#aad4beed95d0846e6ffc5da0978ef3bb9">StreamableToString</a>(i);</div><div class="line"><a name="l07101"></a><span class="lineno"> 7101</span>&#160; }</div><div class="line"><a name="l07102"></a><span class="lineno"> 7102</span>&#160;};</div><div class="line"><a name="l07103"></a><span class="lineno"> 7103</span>&#160;</div><div class="line"><a name="l07104"></a><span class="lineno"> 7104</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Prov<span class="keywordtype">id</span>ed = DefaultNameGenerator&gt;</div><div class="line"><a name="l07105"></a><span class="lineno"> 7105</span>&#160;<span class="keyword">struct </span>NameGeneratorSelector {</div><div class="line"><a name="l07106"></a><span class="lineno"> 7106</span>&#160; <span class="keyword">typedef</span> Provided type;</div><div class="line"><a name="l07107"></a><span class="lineno"> 7107</span>&#160;};</div><div class="line"><a name="l07108"></a><span class="lineno"> 7108</span>&#160;</div><div class="line"><a name="l07109"></a><span class="lineno"> 7109</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> NameGenerator&gt;</div><div class="line"><a name="l07110"></a><span class="lineno"> 7110</span>&#160;<span class="keywordtype">void</span> GenerateNamesRecursively(Types0, std::vector&lt;std::string&gt;*, <span class="keywordtype">int</span>) {}</div><div class="line"><a name="l07111"></a><span class="lineno"> 7111</span>&#160;</div><div class="line"><a name="l07112"></a><span class="lineno"> 7112</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> NameGenerator, <span class="keyword">typename</span> Types&gt;</div><div class="line"><a name="l07113"></a><span class="lineno"> 7113</span>&#160;<span class="keywordtype">void</span> GenerateNamesRecursively(Types, std::vector&lt;std::string&gt;* result, <span class="keywordtype">int</span> i) {</div><div class="line"><a name="l07114"></a><span class="lineno"> 7114</span>&#160; result-&gt;push_back(NameGenerator::template GetName&lt;typename Types::Head&gt;(i));</div><div class="line"><a name="l07115"></a><span class="lineno"> 7115</span>&#160; GenerateNamesRecursively&lt;NameGenerator&gt;(<span class="keyword">typename</span> Types::Tail(), result,</div><div class="line"><a name="l07116"></a><span class="lineno"> 7116</span>&#160; i + 1);</div><div class="line"><a name="l07117"></a><span class="lineno"> 7117</span>&#160;}</div><div class="line"><a name="l07118"></a><span class="lineno"> 7118</span>&#160;</div><div class="line"><a name="l07119"></a><span class="lineno"> 7119</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> NameGenerator, <span class="keyword">typename</span> Types&gt;</div><div class="line"><a name="l07120"></a><span class="lineno"> 7120</span>&#160;std::vector&lt;std::string&gt; GenerateNames() {</div><div class="line"><a name="l07121"></a><span class="lineno"> 7121</span>&#160; std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l07122"></a><span class="lineno"> 7122</span>&#160; GenerateNamesRecursively&lt;NameGenerator&gt;(Types(), &amp;result, 0);</div><div class="line"><a name="l07123"></a><span class="lineno"> 7123</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07124"></a><span class="lineno"> 7124</span>&#160;}</div><div class="line"><a name="l07125"></a><span class="lineno"> 7125</span>&#160;</div><div class="line"><a name="l07126"></a><span class="lineno"> 7126</span>&#160;<span class="comment">// TypeParameterizedTest&lt;Fixture, TestSel, Types&gt;::Register()</span></div><div class="line"><a name="l07127"></a><span class="lineno"> 7127</span>&#160;<span class="comment">// registers a list of type-parameterized tests with Google Test. The</span></div><div class="line"><a name="l07128"></a><span class="lineno"> 7128</span>&#160;<span class="comment">// return value is insignificant - we just need to return something</span></div><div class="line"><a name="l07129"></a><span class="lineno"> 7129</span>&#160;<span class="comment">// such that we can call this function in a namespace scope.</span></div><div class="line"><a name="l07130"></a><span class="lineno"> 7130</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07131"></a><span class="lineno"> 7131</span>&#160;<span class="comment">// Implementation note: The GTEST_TEMPLATE_ macro declares a template</span></div><div class="line"><a name="l07132"></a><span class="lineno"> 7132</span>&#160;<span class="comment">// template parameter. It&#39;s defined in gtest-type-util.h.</span></div><div class="line"><a name="l07133"></a><span class="lineno"> 7133</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ Fixture, <span class="keyword">class</span> TestSel, <span class="keyword">typename</span> Types&gt;</div><div class="line"><a name="l07134"></a><span class="lineno"> 7134</span>&#160;<span class="keyword">class </span>TypeParameterizedTest {</div><div class="line"><a name="l07135"></a><span class="lineno"> 7135</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07136"></a><span class="lineno"> 7136</span>&#160; <span class="comment">// &#39;index&#39; is the index of the test in the type list &#39;Types&#39;</span></div><div class="line"><a name="l07137"></a><span class="lineno"> 7137</span>&#160; <span class="comment">// specified in INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, TestSuite,</span></div><div class="line"><a name="l07138"></a><span class="lineno"> 7138</span>&#160; <span class="comment">// Types). Valid values for &#39;index&#39; are [0, N - 1] where N is the</span></div><div class="line"><a name="l07139"></a><span class="lineno"> 7139</span>&#160; <span class="comment">// length of Types.</span></div><div class="line"><a name="l07140"></a><span class="lineno"> 7140</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Register(<span class="keyword">const</span> <span class="keywordtype">char</span>* prefix, <span class="keyword">const</span> CodeLocation&amp; code_location,</div><div class="line"><a name="l07141"></a><span class="lineno"> 7141</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* case_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* test_names, <span class="keywordtype">int</span> index,</div><div class="line"><a name="l07142"></a><span class="lineno"> 7142</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; type_names =</div><div class="line"><a name="l07143"></a><span class="lineno"> 7143</span>&#160; GenerateNames&lt;DefaultNameGenerator, Types&gt;()) {</div><div class="line"><a name="l07144"></a><span class="lineno"> 7144</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Types::Head Type;</div><div class="line"><a name="l07145"></a><span class="lineno"> 7145</span>&#160; <span class="keyword">typedef</span> Fixture&lt;Type&gt; FixtureClass;</div><div class="line"><a name="l07146"></a><span class="lineno"> 7146</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> GTEST_BIND_(TestSel, Type) TestClass;</div><div class="line"><a name="l07147"></a><span class="lineno"> 7147</span>&#160;</div><div class="line"><a name="l07148"></a><span class="lineno"> 7148</span>&#160; <span class="comment">// First, registers the first type-parameterized test in the type</span></div><div class="line"><a name="l07149"></a><span class="lineno"> 7149</span>&#160; <span class="comment">// list.</span></div><div class="line"><a name="l07150"></a><span class="lineno"> 7150</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">MakeAndRegisterTestInfo</a>(</div><div class="line"><a name="l07151"></a><span class="lineno"> 7151</span>&#160; (<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>(prefix) + (prefix[0] == <span class="charliteral">&#39;\0&#39;</span> ? <span class="stringliteral">&quot;&quot;</span> : <span class="stringliteral">&quot;/&quot;</span>) + case_name +</div><div class="line"><a name="l07152"></a><span class="lineno"> 7152</span>&#160; <span class="stringliteral">&quot;/&quot;</span> + type_names[index])</div><div class="line"><a name="l07153"></a><span class="lineno"> 7153</span>&#160; .c_str(),</div><div class="line"><a name="l07154"></a><span class="lineno"> 7154</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa6afda12e567c353e2e9b9c2e8cae14f">StripTrailingSpaces</a>(GetPrefixUntilComma(test_names)).c_str(),</div><div class="line"><a name="l07155"></a><span class="lineno"> 7155</span>&#160; GetTypeName&lt;Type&gt;().c_str(),</div><div class="line"><a name="l07156"></a><span class="lineno"> 7156</span>&#160; <span class="keyword">nullptr</span>, <span class="comment">// No value parameter.</span></div><div class="line"><a name="l07157"></a><span class="lineno"> 7157</span>&#160; code_location, GetTypeId&lt;FixtureClass&gt;(),</div><div class="line"><a name="l07158"></a><span class="lineno"> 7158</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a460c8a0039577824e9170e6c332b530f">SuiteApiResolver&lt;TestClass&gt;::GetSetUpCaseOrSuite</a>(),</div><div class="line"><a name="l07159"></a><span class="lineno"> 7159</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a8495afe4e71c81842119035a71db7e18">SuiteApiResolver&lt;TestClass&gt;::GetTearDownCaseOrSuite</a>(),</div><div class="line"><a name="l07160"></a><span class="lineno"> 7160</span>&#160; <span class="keyword">new</span> TestFactoryImpl&lt;TestClass&gt;);</div><div class="line"><a name="l07161"></a><span class="lineno"> 7161</span>&#160;</div><div class="line"><a name="l07162"></a><span class="lineno"> 7162</span>&#160; <span class="comment">// Next, recurses (at compile time) with the tail of the type list.</span></div><div class="line"><a name="l07163"></a><span class="lineno"> 7163</span>&#160; <span class="keywordflow">return</span> TypeParameterizedTest&lt;Fixture, TestSel,</div><div class="line"><a name="l07164"></a><span class="lineno"> 7164</span>&#160; <span class="keyword">typename</span> Types::Tail&gt;::Register(prefix,</div><div class="line"><a name="l07165"></a><span class="lineno"> 7165</span>&#160; code_location,</div><div class="line"><a name="l07166"></a><span class="lineno"> 7166</span>&#160; case_name,</div><div class="line"><a name="l07167"></a><span class="lineno"> 7167</span>&#160; test_names,</div><div class="line"><a name="l07168"></a><span class="lineno"> 7168</span>&#160; index + 1,</div><div class="line"><a name="l07169"></a><span class="lineno"> 7169</span>&#160; type_names);</div><div class="line"><a name="l07170"></a><span class="lineno"> 7170</span>&#160; }</div><div class="line"><a name="l07171"></a><span class="lineno"> 7171</span>&#160;};</div><div class="line"><a name="l07172"></a><span class="lineno"> 7172</span>&#160;</div><div class="line"><a name="l07173"></a><span class="lineno"> 7173</span>&#160;<span class="comment">// The base case for the compile time recursion.</span></div><div class="line"><a name="l07174"></a><span class="lineno"> 7174</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ Fixture, <span class="keyword">class</span> TestSel&gt;</div><div class="line"><a name="l07175"></a><span class="lineno"> 7175</span>&#160;<span class="keyword">class </span>TypeParameterizedTest&lt;Fixture, TestSel, Types0&gt; {</div><div class="line"><a name="l07176"></a><span class="lineno"> 7176</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07177"></a><span class="lineno"> 7177</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Register(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*prefix*/</span>, <span class="keyword">const</span> CodeLocation&amp;,</div><div class="line"><a name="l07178"></a><span class="lineno"> 7178</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*case_name*/</span>, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*test_names*/</span>,</div><div class="line"><a name="l07179"></a><span class="lineno"> 7179</span>&#160; <span class="keywordtype">int</span> <span class="comment">/*index*/</span>,</div><div class="line"><a name="l07180"></a><span class="lineno"> 7180</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; =</div><div class="line"><a name="l07181"></a><span class="lineno"> 7181</span>&#160; std::vector&lt;std::string&gt;() <span class="comment">/*type_names*/</span>) {</div><div class="line"><a name="l07182"></a><span class="lineno"> 7182</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07183"></a><span class="lineno"> 7183</span>&#160; }</div><div class="line"><a name="l07184"></a><span class="lineno"> 7184</span>&#160;};</div><div class="line"><a name="l07185"></a><span class="lineno"> 7185</span>&#160;</div><div class="line"><a name="l07186"></a><span class="lineno"> 7186</span>&#160;<span class="comment">// TypeParameterizedTestSuite&lt;Fixture, Tests, Types&gt;::Register()</span></div><div class="line"><a name="l07187"></a><span class="lineno"> 7187</span>&#160;<span class="comment">// registers *all combinations* of &#39;Tests&#39; and &#39;Types&#39; with Google</span></div><div class="line"><a name="l07188"></a><span class="lineno"> 7188</span>&#160;<span class="comment">// Test. The return value is insignificant - we just need to return</span></div><div class="line"><a name="l07189"></a><span class="lineno"> 7189</span>&#160;<span class="comment">// something such that we can call this function in a namespace scope.</span></div><div class="line"><a name="l07190"></a><span class="lineno"> 7190</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ Fixture, <span class="keyword">typename</span> Tests, <span class="keyword">typename</span> Types&gt;</div><div class="line"><a name="l07191"></a><span class="lineno"> 7191</span>&#160;<span class="keyword">class </span>TypeParameterizedTestSuite {</div><div class="line"><a name="l07192"></a><span class="lineno"> 7192</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07193"></a><span class="lineno"> 7193</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Register(<span class="keyword">const</span> <span class="keywordtype">char</span>* prefix, CodeLocation code_location,</div><div class="line"><a name="l07194"></a><span class="lineno"> 7194</span>&#160; <span class="keyword">const</span> TypedTestSuitePState* state, <span class="keyword">const</span> <span class="keywordtype">char</span>* case_name,</div><div class="line"><a name="l07195"></a><span class="lineno"> 7195</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_names,</div><div class="line"><a name="l07196"></a><span class="lineno"> 7196</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; type_names =</div><div class="line"><a name="l07197"></a><span class="lineno"> 7197</span>&#160; GenerateNames&lt;DefaultNameGenerator, Types&gt;()) {</div><div class="line"><a name="l07198"></a><span class="lineno"> 7198</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_name = <a class="code" href="namespacetesting_1_1internal.html#aa6afda12e567c353e2e9b9c2e8cae14f">StripTrailingSpaces</a>(</div><div class="line"><a name="l07199"></a><span class="lineno"> 7199</span>&#160; GetPrefixUntilComma(test_names));</div><div class="line"><a name="l07200"></a><span class="lineno"> 7200</span>&#160; <span class="keywordflow">if</span> (!state-&gt;TestExists(test_name)) {</div><div class="line"><a name="l07201"></a><span class="lineno"> 7201</span>&#160; fprintf(stderr, <span class="stringliteral">&quot;Failed to get code location for test %s.%s at %s.&quot;</span>,</div><div class="line"><a name="l07202"></a><span class="lineno"> 7202</span>&#160; case_name, test_name.c_str(),</div><div class="line"><a name="l07203"></a><span class="lineno"> 7203</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a31b7c3abed4a7c395f42c61e993989f4">FormatFileLocation</a>(code_location.file.c_str(),</div><div class="line"><a name="l07204"></a><span class="lineno"> 7204</span>&#160; code_location.line).c_str());</div><div class="line"><a name="l07205"></a><span class="lineno"> 7205</span>&#160; fflush(stderr);</div><div class="line"><a name="l07206"></a><span class="lineno"> 7206</span>&#160; <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">posix::Abort</a>();</div><div class="line"><a name="l07207"></a><span class="lineno"> 7207</span>&#160; }</div><div class="line"><a name="l07208"></a><span class="lineno"> 7208</span>&#160; <span class="keyword">const</span> CodeLocation&amp; test_location = state-&gt;GetCodeLocation(test_name);</div><div class="line"><a name="l07209"></a><span class="lineno"> 7209</span>&#160;</div><div class="line"><a name="l07210"></a><span class="lineno"> 7210</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Tests::Head Head;</div><div class="line"><a name="l07211"></a><span class="lineno"> 7211</span>&#160;</div><div class="line"><a name="l07212"></a><span class="lineno"> 7212</span>&#160; <span class="comment">// First, register the first test in &#39;Test&#39; for each type in &#39;Types&#39;.</span></div><div class="line"><a name="l07213"></a><span class="lineno"> 7213</span>&#160; TypeParameterizedTest&lt;Fixture, Head, Types&gt;::Register(</div><div class="line"><a name="l07214"></a><span class="lineno"> 7214</span>&#160; prefix, test_location, case_name, test_names, 0, type_names);</div><div class="line"><a name="l07215"></a><span class="lineno"> 7215</span>&#160;</div><div class="line"><a name="l07216"></a><span class="lineno"> 7216</span>&#160; <span class="comment">// Next, recurses (at compile time) with the tail of the test list.</span></div><div class="line"><a name="l07217"></a><span class="lineno"> 7217</span>&#160; <span class="keywordflow">return</span> TypeParameterizedTestSuite&lt;Fixture, <span class="keyword">typename</span> Tests::Tail,</div><div class="line"><a name="l07218"></a><span class="lineno"> 7218</span>&#160; Types&gt;::Register(prefix, code_location,</div><div class="line"><a name="l07219"></a><span class="lineno"> 7219</span>&#160; state, case_name,</div><div class="line"><a name="l07220"></a><span class="lineno"> 7220</span>&#160; SkipComma(test_names),</div><div class="line"><a name="l07221"></a><span class="lineno"> 7221</span>&#160; type_names);</div><div class="line"><a name="l07222"></a><span class="lineno"> 7222</span>&#160; }</div><div class="line"><a name="l07223"></a><span class="lineno"> 7223</span>&#160;};</div><div class="line"><a name="l07224"></a><span class="lineno"> 7224</span>&#160;</div><div class="line"><a name="l07225"></a><span class="lineno"> 7225</span>&#160;<span class="comment">// The base case for the compile time recursion.</span></div><div class="line"><a name="l07226"></a><span class="lineno"> 7226</span>&#160;<span class="keyword">template</span> &lt;GTEST_TEMPLATE_ Fixture, <span class="keyword">typename</span> Types&gt;</div><div class="line"><a name="l07227"></a><span class="lineno"> 7227</span>&#160;<span class="keyword">class </span>TypeParameterizedTestSuite&lt;Fixture, Templates0, Types&gt; {</div><div class="line"><a name="l07228"></a><span class="lineno"> 7228</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07229"></a><span class="lineno"> 7229</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Register(<span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*prefix*/</span>, <span class="keyword">const</span> CodeLocation&amp;,</div><div class="line"><a name="l07230"></a><span class="lineno"> 7230</span>&#160; <span class="keyword">const</span> TypedTestSuitePState* <span class="comment">/*state*/</span>,</div><div class="line"><a name="l07231"></a><span class="lineno"> 7231</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*case_name*/</span>, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="comment">/*test_names*/</span>,</div><div class="line"><a name="l07232"></a><span class="lineno"> 7232</span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; =</div><div class="line"><a name="l07233"></a><span class="lineno"> 7233</span>&#160; std::vector&lt;std::string&gt;() <span class="comment">/*type_names*/</span>) {</div><div class="line"><a name="l07234"></a><span class="lineno"> 7234</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07235"></a><span class="lineno"> 7235</span>&#160; }</div><div class="line"><a name="l07236"></a><span class="lineno"> 7236</span>&#160;};</div><div class="line"><a name="l07237"></a><span class="lineno"> 7237</span>&#160;</div><div class="line"><a name="l07238"></a><span class="lineno"> 7238</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l07239"></a><span class="lineno"> 7239</span>&#160;</div><div class="line"><a name="l07240"></a><span class="lineno"> 7240</span>&#160;<span class="comment">// Returns the current OS stack trace as an std::string.</span></div><div class="line"><a name="l07241"></a><span class="lineno"> 7241</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07242"></a><span class="lineno"> 7242</span>&#160;<span class="comment">// The maximum number of stack frames to be included is specified by</span></div><div class="line"><a name="l07243"></a><span class="lineno"> 7243</span>&#160;<span class="comment">// the gtest_stack_trace_depth flag. The skip_count parameter</span></div><div class="line"><a name="l07244"></a><span class="lineno"> 7244</span>&#160;<span class="comment">// specifies the number of top frames to be skipped, which doesn&#39;t</span></div><div class="line"><a name="l07245"></a><span class="lineno"> 7245</span>&#160;<span class="comment">// count against the number of frames to be included.</span></div><div class="line"><a name="l07246"></a><span class="lineno"> 7246</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07247"></a><span class="lineno"> 7247</span>&#160;<span class="comment">// For example, if Foo() calls Bar(), which in turn calls</span></div><div class="line"><a name="l07248"></a><span class="lineno"> 7248</span>&#160;<span class="comment">// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in</span></div><div class="line"><a name="l07249"></a><span class="lineno"> 7249</span>&#160;<span class="comment">// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won&#39;t.</span></div><div class="line"><a name="l07250"></a><span class="lineno"> 7250</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#ae7ae495d3207e26968dfbd537c5e6dee">GetCurrentOsStackTraceExceptTop</a>(</div><div class="line"><a name="l07251"></a><span class="lineno"> 7251</span>&#160; UnitTest* unit_test, <span class="keywordtype">int</span> skip_count);</div><div class="line"><a name="l07252"></a><span class="lineno"> 7252</span>&#160;</div><div class="line"><a name="l07253"></a><span class="lineno"> 7253</span>&#160;<span class="comment">// Helpers for suppressing warnings on unreachable code or constant</span></div><div class="line"><a name="l07254"></a><span class="lineno"> 7254</span>&#160;<span class="comment">// condition.</span></div><div class="line"><a name="l07255"></a><span class="lineno"> 7255</span>&#160;</div><div class="line"><a name="l07256"></a><span class="lineno"> 7256</span>&#160;<span class="comment">// Always returns true.</span></div><div class="line"><a name="l07257"></a><span class="lineno"> 7257</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a4d46f09c3bfe68700b7f728d2cc3782f">AlwaysTrue</a>();</div><div class="line"><a name="l07258"></a><span class="lineno"> 7258</span>&#160;</div><div class="line"><a name="l07259"></a><span class="lineno"> 7259</span>&#160;<span class="comment">// Always returns false.</span></div><div class="line"><a name="l07260"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a4b24c851ab13569b1b15b3d259b60d2e"> 7260</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a4b24c851ab13569b1b15b3d259b60d2e">AlwaysFalse</a>() { <span class="keywordflow">return</span> !<a class="code" href="namespacetesting_1_1internal.html#a4d46f09c3bfe68700b7f728d2cc3782f">AlwaysTrue</a>(); }</div><div class="line"><a name="l07261"></a><span class="lineno"> 7261</span>&#160;</div><div class="line"><a name="l07262"></a><span class="lineno"> 7262</span>&#160;<span class="comment">// Helper for suppressing false warning from Clang on a const char*</span></div><div class="line"><a name="l07263"></a><span class="lineno"> 7263</span>&#160;<span class="comment">// variable declared in a conditional expression always being NULL in</span></div><div class="line"><a name="l07264"></a><span class="lineno"> 7264</span>&#160;<span class="comment">// the else branch.</span></div><div class="line"><a name="l07265"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_char_ptr.html"> 7265</a></span>&#160;<span class="keyword">struct </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="structtesting_1_1internal_1_1_const_char_ptr.html">ConstCharPtr</a> {</div><div class="line"><a name="l07266"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_char_ptr.html#ae94f6453fa679d815994eccc63062907"> 7266</a></span>&#160; <a class="code" href="structtesting_1_1internal_1_1_const_char_ptr.html#ae94f6453fa679d815994eccc63062907">ConstCharPtr</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) : value(str) {}</div><div class="line"><a name="l07267"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_char_ptr.html#a85c8174b5d4db8fe96863509ba767b27"> 7267</a></span>&#160; <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l07268"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_const_char_ptr.html#adba40d23d5986904b605946f643cf26e"> 7268</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structtesting_1_1internal_1_1_const_char_ptr.html#adba40d23d5986904b605946f643cf26e">value</a>;</div><div class="line"><a name="l07269"></a><span class="lineno"> 7269</span>&#160;};</div><div class="line"><a name="l07270"></a><span class="lineno"> 7270</span>&#160;</div><div class="line"><a name="l07271"></a><span class="lineno"> 7271</span>&#160;<span class="comment">// A simple Linear Congruential Generator for generating random</span></div><div class="line"><a name="l07272"></a><span class="lineno"> 7272</span>&#160;<span class="comment">// numbers with a uniform distribution. Unlike rand() and srand(), it</span></div><div class="line"><a name="l07273"></a><span class="lineno"> 7273</span>&#160;<span class="comment">// doesn&#39;t use global state (and therefore can&#39;t interfere with user</span></div><div class="line"><a name="l07274"></a><span class="lineno"> 7274</span>&#160;<span class="comment">// code). Unlike rand_r(), it&#39;s portable. An LCG isn&#39;t very random,</span></div><div class="line"><a name="l07275"></a><span class="lineno"> 7275</span>&#160;<span class="comment">// but it&#39;s good enough for our purposes.</span></div><div class="line"><a name="l07276"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_random.html"> 7276</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1internal_1_1_random.html">Random</a> {</div><div class="line"><a name="l07277"></a><span class="lineno"> 7277</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07278"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_random.html#a36d72dd7063d0b5338f229e75382fdd2"> 7278</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> kMaxRange = 1u &lt;&lt; 31;</div><div class="line"><a name="l07279"></a><span class="lineno"> 7279</span>&#160;</div><div class="line"><a name="l07280"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_random.html#a6e112be5e7cce00551f6383025f69460"> 7280</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_random.html#a6e112be5e7cce00551f6383025f69460">Random</a>(<a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> seed) : state_(seed) {}</div><div class="line"><a name="l07281"></a><span class="lineno"> 7281</span>&#160;</div><div class="line"><a name="l07282"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_random.html#adf2f24199318a46f885c78f50d89a69e"> 7282</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_random.html#adf2f24199318a46f885c78f50d89a69e">Reseed</a>(<a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> seed) { state_ = seed; }</div><div class="line"><a name="l07283"></a><span class="lineno"> 7283</span>&#160;</div><div class="line"><a name="l07284"></a><span class="lineno"> 7284</span>&#160; <span class="comment">// Generates a random number from [0, range). Crashes if &#39;range&#39; is</span></div><div class="line"><a name="l07285"></a><span class="lineno"> 7285</span>&#160; <span class="comment">// 0 or greater than kMaxRange.</span></div><div class="line"><a name="l07286"></a><span class="lineno"> 7286</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> Generate(<a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> range);</div><div class="line"><a name="l07287"></a><span class="lineno"> 7287</span>&#160;</div><div class="line"><a name="l07288"></a><span class="lineno"> 7288</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07289"></a><span class="lineno"> 7289</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">UInt32</a> state_;</div><div class="line"><a name="l07290"></a><span class="lineno"> 7290</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_random.html">Random</a>);</div><div class="line"><a name="l07291"></a><span class="lineno"> 7291</span>&#160;};</div><div class="line"><a name="l07292"></a><span class="lineno"> 7292</span>&#160;</div><div class="line"><a name="l07293"></a><span class="lineno"> 7293</span>&#160;<span class="comment">// Defining a variable of type CompileAssertTypesEqual&lt;T1, T2&gt; will cause a</span></div><div class="line"><a name="l07294"></a><span class="lineno"> 7294</span>&#160;<span class="comment">// compiler error iff T1 and T2 are different types.</span></div><div class="line"><a name="l07295"></a><span class="lineno"> 7295</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l07296"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_compile_assert_types_equal.html"> 7296</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_compile_assert_types_equal.html">CompileAssertTypesEqual</a>;</div><div class="line"><a name="l07297"></a><span class="lineno"> 7297</span>&#160;</div><div class="line"><a name="l07298"></a><span class="lineno"> 7298</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07299"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_compile_assert_types_equal_3_01_t_00_01_t_01_4.html"> 7299</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_compile_assert_types_equal.html">CompileAssertTypesEqual</a>&lt;T, T&gt; {</div><div class="line"><a name="l07300"></a><span class="lineno"> 7300</span>&#160;};</div><div class="line"><a name="l07301"></a><span class="lineno"> 7301</span>&#160;</div><div class="line"><a name="l07302"></a><span class="lineno"> 7302</span>&#160;<span class="comment">// Removes the reference from a type if it is a reference type,</span></div><div class="line"><a name="l07303"></a><span class="lineno"> 7303</span>&#160;<span class="comment">// otherwise leaves it unchanged. This is the same as</span></div><div class="line"><a name="l07304"></a><span class="lineno"> 7304</span>&#160;<span class="comment">// tr1::remove_reference, which is not widely available yet.</span></div><div class="line"><a name="l07305"></a><span class="lineno"> 7305</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07306"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_reference.html#a9ca4f6499579225f7986b789ee4b2895"> 7306</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_remove_reference.html">RemoveReference</a> { <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_remove_reference.html#a9ca4f6499579225f7986b789ee4b2895">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07307"></a><span class="lineno"> 7307</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07308"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_reference_3_01_t_01_6_01_4.html#a3d0f32a66759f333c2dd66aa31005e6d"> 7308</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_remove_reference.html">RemoveReference</a>&lt;T&amp;&gt; { <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_remove_reference_3_01_t_01_6_01_4.html#a3d0f32a66759f333c2dd66aa31005e6d">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07309"></a><span class="lineno"> 7309</span>&#160;</div><div class="line"><a name="l07310"></a><span class="lineno"> 7310</span>&#160;<span class="comment">// A handy wrapper around RemoveReference that works when the argument</span></div><div class="line"><a name="l07311"></a><span class="lineno"> 7311</span>&#160;<span class="comment">// T depends on template parameters.</span></div><div class="line"><a name="l07312"></a><span class="lineno"><a class="line" href="gtest_8h.html#a84c72f25a6a6600e3ff8381ca6982ae9"> 7312</a></span>&#160;<span class="preprocessor">#define GTEST_REMOVE_REFERENCE_(T) \</span></div><div class="line"><a name="l07313"></a><span class="lineno"> 7313</span>&#160;<span class="preprocessor"> typename ::testing::internal::RemoveReference&lt;T&gt;::type</span></div><div class="line"><a name="l07314"></a><span class="lineno"> 7314</span>&#160;</div><div class="line"><a name="l07315"></a><span class="lineno"> 7315</span>&#160;<span class="comment">// Removes const from a type if it is a const type, otherwise leaves</span></div><div class="line"><a name="l07316"></a><span class="lineno"> 7316</span>&#160;<span class="comment">// it unchanged. This is the same as tr1::remove_const, which is not</span></div><div class="line"><a name="l07317"></a><span class="lineno"> 7317</span>&#160;<span class="comment">// widely available yet.</span></div><div class="line"><a name="l07318"></a><span class="lineno"> 7318</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07319"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_const.html#a1be32027ea4edcc0d15abd59aba4a97f"> 7319</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_remove_const.html">RemoveConst</a> { <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_remove_const.html#a1be32027ea4edcc0d15abd59aba4a97f">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07320"></a><span class="lineno"> 7320</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07321"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_const_3_01const_01_t_01_4.html#ac88c6824d228ab05091e5a4f1c1a95fc"> 7321</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_remove_const.html">RemoveConst</a>&lt;const T&gt; { <span class="keyword">typedef</span> T <a class="code" href="structtesting_1_1internal_1_1_remove_const_3_01const_01_t_01_4.html#ac88c6824d228ab05091e5a4f1c1a95fc">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07322"></a><span class="lineno"> 7322</span>&#160;</div><div class="line"><a name="l07323"></a><span class="lineno"> 7323</span>&#160;<span class="comment">// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above</span></div><div class="line"><a name="l07324"></a><span class="lineno"> 7324</span>&#160;<span class="comment">// definition to fail to remove the const in &#39;const int[3]&#39; and &#39;const</span></div><div class="line"><a name="l07325"></a><span class="lineno"> 7325</span>&#160;<span class="comment">// char[3][4]&#39;. The following specialization works around the bug.</span></div><div class="line"><a name="l07326"></a><span class="lineno"> 7326</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l07327"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_const_3_01const_01_t[_n]_4.html"> 7327</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_remove_const.html">RemoveConst</a>&lt;const T[N]&gt; {</div><div class="line"><a name="l07328"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_remove_const_3_01const_01_t[_n]_4.html#ac976b53cb5d031a120fafbe790650068"> 7328</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_remove_const.html#a1be32027ea4edcc0d15abd59aba4a97f">RemoveConst&lt;T&gt;::type</a> <a class="code" href="structtesting_1_1internal_1_1_remove_const.html#a1be32027ea4edcc0d15abd59aba4a97f">type</a>[N];</div><div class="line"><a name="l07329"></a><span class="lineno"> 7329</span>&#160;};</div><div class="line"><a name="l07330"></a><span class="lineno"> 7330</span>&#160;</div><div class="line"><a name="l07331"></a><span class="lineno"> 7331</span>&#160;<span class="comment">// A handy wrapper around RemoveConst that works when the argument</span></div><div class="line"><a name="l07332"></a><span class="lineno"> 7332</span>&#160;<span class="comment">// T depends on template parameters.</span></div><div class="line"><a name="l07333"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2ffec8c60510eb130af387f5ce9a756a"> 7333</a></span>&#160;<span class="preprocessor">#define GTEST_REMOVE_CONST_(T) \</span></div><div class="line"><a name="l07334"></a><span class="lineno"> 7334</span>&#160;<span class="preprocessor"> typename ::testing::internal::RemoveConst&lt;T&gt;::type</span></div><div class="line"><a name="l07335"></a><span class="lineno"> 7335</span>&#160;</div><div class="line"><a name="l07336"></a><span class="lineno"> 7336</span>&#160;<span class="comment">// Turns const U&amp;, U&amp;, const U, and U all into U.</span></div><div class="line"><a name="l07337"></a><span class="lineno"><a class="line" href="gtest_8h.html#a874567b176266188fabfffb8393267ce"> 7337</a></span>&#160;<span class="preprocessor">#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \</span></div><div class="line"><a name="l07338"></a><span class="lineno"> 7338</span>&#160;<span class="preprocessor"> GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))</span></div><div class="line"><a name="l07339"></a><span class="lineno"> 7339</span>&#160;</div><div class="line"><a name="l07340"></a><span class="lineno"> 7340</span>&#160;<span class="comment">// ImplicitlyConvertible&lt;From, To&gt;::value is a compile-time bool</span></div><div class="line"><a name="l07341"></a><span class="lineno"> 7341</span>&#160;<span class="comment">// constant that&#39;s true iff type From can be implicitly converted to</span></div><div class="line"><a name="l07342"></a><span class="lineno"> 7342</span>&#160;<span class="comment">// type To.</span></div><div class="line"><a name="l07343"></a><span class="lineno"> 7343</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> From, <span class="keyword">typename</span> To&gt;</div><div class="line"><a name="l07344"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_implicitly_convertible.html"> 7344</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html">ImplicitlyConvertible</a> {</div><div class="line"><a name="l07345"></a><span class="lineno"> 7345</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07346"></a><span class="lineno"> 7346</span>&#160; <span class="comment">// We need the following helper functions only for their types.</span></div><div class="line"><a name="l07347"></a><span class="lineno"> 7347</span>&#160; <span class="comment">// They have no implementations.</span></div><div class="line"><a name="l07348"></a><span class="lineno"> 7348</span>&#160;</div><div class="line"><a name="l07349"></a><span class="lineno"> 7349</span>&#160; <span class="comment">// MakeFrom() is an expression whose type is From. We cannot simply</span></div><div class="line"><a name="l07350"></a><span class="lineno"> 7350</span>&#160; <span class="comment">// use From(), as the type From may not have a public default</span></div><div class="line"><a name="l07351"></a><span class="lineno"> 7351</span>&#160; <span class="comment">// constructor.</span></div><div class="line"><a name="l07352"></a><span class="lineno"> 7352</span>&#160; <span class="keyword">static</span> <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_add_reference.html#a2df8dd7c4e41f6390e6e66b1a9a67bb4">AddReference&lt;From&gt;::type</a> MakeFrom();</div><div class="line"><a name="l07353"></a><span class="lineno"> 7353</span>&#160;</div><div class="line"><a name="l07354"></a><span class="lineno"> 7354</span>&#160; <span class="comment">// These two functions are overloaded. Given an expression</span></div><div class="line"><a name="l07355"></a><span class="lineno"> 7355</span>&#160; <span class="comment">// Helper(x), the compiler will pick the first version if x can be</span></div><div class="line"><a name="l07356"></a><span class="lineno"> 7356</span>&#160; <span class="comment">// implicitly converted to type To; otherwise it will pick the</span></div><div class="line"><a name="l07357"></a><span class="lineno"> 7357</span>&#160; <span class="comment">// second version.</span></div><div class="line"><a name="l07358"></a><span class="lineno"> 7358</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l07359"></a><span class="lineno"> 7359</span>&#160; <span class="comment">// The first version returns a value of size 1, and the second</span></div><div class="line"><a name="l07360"></a><span class="lineno"> 7360</span>&#160; <span class="comment">// version returns a value of size 2. Therefore, by checking the</span></div><div class="line"><a name="l07361"></a><span class="lineno"> 7361</span>&#160; <span class="comment">// size of Helper(x), which can be done at compile time, we can tell</span></div><div class="line"><a name="l07362"></a><span class="lineno"> 7362</span>&#160; <span class="comment">// which version of Helper() is used, and hence whether x can be</span></div><div class="line"><a name="l07363"></a><span class="lineno"> 7363</span>&#160; <span class="comment">// implicitly converted to type To.</span></div><div class="line"><a name="l07364"></a><span class="lineno"> 7364</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> Helper(To);</div><div class="line"><a name="l07365"></a><span class="lineno"> 7365</span>&#160; <span class="keyword">static</span> char (&amp;Helper(...))[2]; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07366"></a><span class="lineno"> 7366</span>&#160;</div><div class="line"><a name="l07367"></a><span class="lineno"> 7367</span>&#160; <span class="comment">// We have to put the &#39;public&#39; section after the &#39;private&#39; section,</span></div><div class="line"><a name="l07368"></a><span class="lineno"> 7368</span>&#160; <span class="comment">// or MSVC refuses to compile the code.</span></div><div class="line"><a name="l07369"></a><span class="lineno"> 7369</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07370"></a><span class="lineno"> 7370</span>&#160;<span class="preprocessor">#if defined(__BORLANDC__)</span></div><div class="line"><a name="l07371"></a><span class="lineno"> 7371</span>&#160; <span class="comment">// C++Builder cannot use member overload resolution during template</span></div><div class="line"><a name="l07372"></a><span class="lineno"> 7372</span>&#160; <span class="comment">// instantiation. The simplest workaround is to use its C++0x type traits</span></div><div class="line"><a name="l07373"></a><span class="lineno"> 7373</span>&#160; <span class="comment">// functions (C++Builder 2009 and above only).</span></div><div class="line"><a name="l07374"></a><span class="lineno"> 7374</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html#aea51cecabca681fb75659e224771b7b7">value</a> = __is_convertible(From, To);</div><div class="line"><a name="l07375"></a><span class="lineno"> 7375</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l07376"></a><span class="lineno"> 7376</span>&#160; <span class="comment">// MSVC warns about implicitly converting from double to int for</span></div><div class="line"><a name="l07377"></a><span class="lineno"> 7377</span>&#160; <span class="comment">// possible loss of data, so we need to temporarily disable the</span></div><div class="line"><a name="l07378"></a><span class="lineno"> 7378</span>&#160; <span class="comment">// warning.</span></div><div class="line"><a name="l07379"></a><span class="lineno"> 7379</span>&#160; <a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4244)</div><div class="line"><a name="l07380"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_implicitly_convertible.html#aea51cecabca681fb75659e224771b7b7"> 7380</a></span>&#160; static const <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html#aea51cecabca681fb75659e224771b7b7">value</a> =</div><div class="line"><a name="l07381"></a><span class="lineno"> 7381</span>&#160; sizeof(Helper(<a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html">ImplicitlyConvertible</a>::MakeFrom())) == 1;</div><div class="line"><a name="l07382"></a><span class="lineno"> 7382</span>&#160; <a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>()</div><div class="line"><a name="l07383"></a><span class="lineno"> 7383</span>&#160;<span class="preprocessor">#endif // __BORLANDC__</span></div><div class="line"><a name="l07384"></a><span class="lineno"> 7384</span>&#160;};</div><div class="line"><a name="l07385"></a><span class="lineno"> 7385</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> From, <span class="keyword">typename</span> To&gt;</div><div class="line"><a name="l07386"></a><span class="lineno"> 7386</span>&#160;<span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html">ImplicitlyConvertible&lt;From, To&gt;::value</a>;</div><div class="line"><a name="l07387"></a><span class="lineno"> 7387</span>&#160;</div><div class="line"><a name="l07388"></a><span class="lineno"> 7388</span>&#160;<span class="comment">// IsAProtocolMessage&lt;T&gt;::value is a compile-time bool constant that&#39;s</span></div><div class="line"><a name="l07389"></a><span class="lineno"> 7389</span>&#160;<span class="comment">// true iff T is type ProtocolMessage, proto2::Message, or a subclass</span></div><div class="line"><a name="l07390"></a><span class="lineno"> 7390</span>&#160;<span class="comment">// of those.</span></div><div class="line"><a name="l07391"></a><span class="lineno"> 7391</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07392"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_a_protocol_message.html"> 7392</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_a_protocol_message.html">IsAProtocolMessage</a></div><div class="line"><a name="l07393"></a><span class="lineno"> 7393</span>&#160; : <span class="keyword">public</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">bool_constant</a>&lt;</div><div class="line"><a name="l07394"></a><span class="lineno"> 7394</span>&#160; ImplicitlyConvertible&lt;const T*, const ::ProtocolMessage*&gt;::value ||</div><div class="line"><a name="l07395"></a><span class="lineno"> 7395</span>&#160; ImplicitlyConvertible&lt;const T*, const ::proto2::Message*&gt;::value&gt; {</div><div class="line"><a name="l07396"></a><span class="lineno"> 7396</span>&#160;};</div><div class="line"><a name="l07397"></a><span class="lineno"> 7397</span>&#160;</div><div class="line"><a name="l07398"></a><span class="lineno"> 7398</span>&#160;<span class="comment">// When the compiler sees expression IsContainerTest&lt;C&gt;(0), if C is an</span></div><div class="line"><a name="l07399"></a><span class="lineno"> 7399</span>&#160;<span class="comment">// STL-style container class, the first overload of IsContainerTest</span></div><div class="line"><a name="l07400"></a><span class="lineno"> 7400</span>&#160;<span class="comment">// will be viable (since both C::iterator* and C::const_iterator* are</span></div><div class="line"><a name="l07401"></a><span class="lineno"> 7401</span>&#160;<span class="comment">// valid types and NULL can be implicitly converted to them). It will</span></div><div class="line"><a name="l07402"></a><span class="lineno"> 7402</span>&#160;<span class="comment">// be picked over the second overload as &#39;int&#39; is a perfect match for</span></div><div class="line"><a name="l07403"></a><span class="lineno"> 7403</span>&#160;<span class="comment">// the type of argument 0. If C::iterator or C::const_iterator is not</span></div><div class="line"><a name="l07404"></a><span class="lineno"> 7404</span>&#160;<span class="comment">// a valid type, the first overload is not viable, and the second</span></div><div class="line"><a name="l07405"></a><span class="lineno"> 7405</span>&#160;<span class="comment">// overload will be picked. Therefore, we can determine whether C is</span></div><div class="line"><a name="l07406"></a><span class="lineno"> 7406</span>&#160;<span class="comment">// a container class by checking the type of IsContainerTest&lt;C&gt;(0).</span></div><div class="line"><a name="l07407"></a><span class="lineno"> 7407</span>&#160;<span class="comment">// The value of the expression is insignificant.</span></div><div class="line"><a name="l07408"></a><span class="lineno"> 7408</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07409"></a><span class="lineno"> 7409</span>&#160;<span class="comment">// In C++11 mode we check the existence of a const_iterator and that an</span></div><div class="line"><a name="l07410"></a><span class="lineno"> 7410</span>&#160;<span class="comment">// iterator is properly implemented for the container.</span></div><div class="line"><a name="l07411"></a><span class="lineno"> 7411</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07412"></a><span class="lineno"> 7412</span>&#160;<span class="comment">// For pre-C++11 that we look for both C::iterator and C::const_iterator.</span></div><div class="line"><a name="l07413"></a><span class="lineno"> 7413</span>&#160;<span class="comment">// The reason is that C++ injects the name of a class as a member of the</span></div><div class="line"><a name="l07414"></a><span class="lineno"> 7414</span>&#160;<span class="comment">// class itself (e.g. you can refer to class iterator as either</span></div><div class="line"><a name="l07415"></a><span class="lineno"> 7415</span>&#160;<span class="comment">// &#39;iterator&#39; or &#39;iterator::iterator&#39;). If we look for C::iterator</span></div><div class="line"><a name="l07416"></a><span class="lineno"> 7416</span>&#160;<span class="comment">// only, for example, we would mistakenly think that a class named</span></div><div class="line"><a name="l07417"></a><span class="lineno"> 7417</span>&#160;<span class="comment">// iterator is an STL container.</span></div><div class="line"><a name="l07418"></a><span class="lineno"> 7418</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07419"></a><span class="lineno"> 7419</span>&#160;<span class="comment">// Also note that the simpler approach of overloading</span></div><div class="line"><a name="l07420"></a><span class="lineno"> 7420</span>&#160;<span class="comment">// IsContainerTest(typename C::const_iterator*) and</span></div><div class="line"><a name="l07421"></a><span class="lineno"> 7421</span>&#160;<span class="comment">// IsContainerTest(...) doesn&#39;t work with Visual Age C++ and Sun C++.</span></div><div class="line"><a name="l07422"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3"> 7422</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3">IsContainer</a>;</div><div class="line"><a name="l07423"></a><span class="lineno"> 7423</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>C,</div><div class="line"><a name="l07424"></a><span class="lineno"> 7424</span>&#160; <span class="keyword">class </span>Iterator = decltype(::std::declval&lt;const C&amp;&gt;().begin()),</div><div class="line"><a name="l07425"></a><span class="lineno"> 7425</span>&#160; <span class="keyword">class </span>= decltype(::std::declval&lt;const C&amp;&gt;().end()),</div><div class="line"><a name="l07426"></a><span class="lineno"> 7426</span>&#160; <span class="keyword">class </span>= decltype(++::std::declval&lt;Iterator&amp;&gt;()),</div><div class="line"><a name="l07427"></a><span class="lineno"> 7427</span>&#160; <span class="keyword">class </span>= decltype(*::std::declval&lt;Iterator&gt;()),</div><div class="line"><a name="l07428"></a><span class="lineno"> 7428</span>&#160; <span class="keyword">class </span>= <span class="keyword">typename</span> C::const_iterator&gt;</div><div class="line"><a name="l07429"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a764748b94f628bdd1dcd39dc81e8b71f"> 7429</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3">IsContainer</a> <a class="code" href="namespacetesting_1_1internal.html#a764748b94f628bdd1dcd39dc81e8b71f">IsContainerTest</a>(<span class="keywordtype">int</span> <span class="comment">/* dummy */</span>) {</div><div class="line"><a name="l07430"></a><span class="lineno"> 7430</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l07431"></a><span class="lineno"> 7431</span>&#160;}</div><div class="line"><a name="l07432"></a><span class="lineno"> 7432</span>&#160;</div><div class="line"><a name="l07433"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#abf080521ce135deb510e0a7830fd3d33"> 7433</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">char</span> <a class="code" href="namespacetesting_1_1internal.html#abf080521ce135deb510e0a7830fd3d33">IsNotContainer</a>;</div><div class="line"><a name="l07434"></a><span class="lineno"> 7434</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> C&gt;</div><div class="line"><a name="l07435"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#af545a2ae928b8a9e7581978234464275"> 7435</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#abf080521ce135deb510e0a7830fd3d33">IsNotContainer</a> <a class="code" href="namespacetesting_1_1internal.html#a764748b94f628bdd1dcd39dc81e8b71f">IsContainerTest</a>(<span class="keywordtype">long</span> <span class="comment">/* dummy */</span>) { <span class="keywordflow">return</span> <span class="charliteral">&#39;\0&#39;</span>; }</div><div class="line"><a name="l07436"></a><span class="lineno"> 7436</span>&#160;</div><div class="line"><a name="l07437"></a><span class="lineno"> 7437</span>&#160;<span class="comment">// Trait to detect whether a type T is a hash table.</span></div><div class="line"><a name="l07438"></a><span class="lineno"> 7438</span>&#160;<span class="comment">// The heuristic used is that the type contains an inner type `hasher` and does</span></div><div class="line"><a name="l07439"></a><span class="lineno"> 7439</span>&#160;<span class="comment">// not contain an inner type `reverse_iterator`.</span></div><div class="line"><a name="l07440"></a><span class="lineno"> 7440</span>&#160;<span class="comment">// If the container is iterable in reverse, then order might actually matter.</span></div><div class="line"><a name="l07441"></a><span class="lineno"> 7441</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07442"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_hash_table.html"> 7442</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_hash_table.html">IsHashTable</a> {</div><div class="line"><a name="l07443"></a><span class="lineno"> 7443</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07444"></a><span class="lineno"> 7444</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07445"></a><span class="lineno"> 7445</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> test(<span class="keyword">typename</span> U::hasher*, <span class="keyword">typename</span> U::reverse_iterator*);</div><div class="line"><a name="l07446"></a><span class="lineno"> 7446</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07447"></a><span class="lineno"> 7447</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> test(<span class="keyword">typename</span> U::hasher*, ...);</div><div class="line"><a name="l07448"></a><span class="lineno"> 7448</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07449"></a><span class="lineno"> 7449</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> test(...);</div><div class="line"><a name="l07450"></a><span class="lineno"> 7450</span>&#160;</div><div class="line"><a name="l07451"></a><span class="lineno"> 7451</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07452"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_hash_table.html#a165e0a3eddfa5fadf9b950be6432d848"> 7452</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="structtesting_1_1internal_1_1_is_hash_table.html#a165e0a3eddfa5fadf9b950be6432d848">value</a> = <span class="keyword">sizeof</span>(test&lt;T&gt;(<span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>)) == <span class="keyword">sizeof</span>(int);</div><div class="line"><a name="l07453"></a><span class="lineno"> 7453</span>&#160;};</div><div class="line"><a name="l07454"></a><span class="lineno"> 7454</span>&#160;</div><div class="line"><a name="l07455"></a><span class="lineno"> 7455</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l07456"></a><span class="lineno"> 7456</span>&#160;<span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="structtesting_1_1internal_1_1_is_hash_table.html">IsHashTable&lt;T&gt;::value</a>;</div><div class="line"><a name="l07457"></a><span class="lineno"> 7457</span>&#160;</div><div class="line"><a name="l07458"></a><span class="lineno"> 7458</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C,</div><div class="line"><a name="l07459"></a><span class="lineno"> 7459</span>&#160; <span class="keywordtype">bool</span> = <span class="keyword">sizeof</span>(IsContainerTest&lt;C&gt;(0)) == <span class="keyword">sizeof</span>(<a class="code" href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3">IsContainer</a>)&gt;</div><div class="line"><a name="l07460"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container_impl.html"> 7460</a></span>&#160;<span class="keyword">struct</span> <a class="code" href="structtesting_1_1internal_1_1_is_recursive_container_impl.html">IsRecursiveContainerImpl</a>;</div><div class="line"><a name="l07461"></a><span class="lineno"> 7461</span>&#160;</div><div class="line"><a name="l07462"></a><span class="lineno"> 7462</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l07463"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01false_01_4.html"> 7463</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01false_01_4.html">IsRecursiveContainerImpl&lt;C, false&gt;</a> : <span class="keyword">public</span> <a class="code" href="structtesting_1_1internal_1_1bool__constant.html">false_type</a> {};</div><div class="line"><a name="l07464"></a><span class="lineno"> 7464</span>&#160;</div><div class="line"><a name="l07465"></a><span class="lineno"> 7465</span>&#160;<span class="comment">// Since the IsRecursiveContainerImpl depends on the IsContainerTest we need to</span></div><div class="line"><a name="l07466"></a><span class="lineno"> 7466</span>&#160;<span class="comment">// obey the same inconsistencies as the IsContainerTest, namely check if</span></div><div class="line"><a name="l07467"></a><span class="lineno"> 7467</span>&#160;<span class="comment">// something is a container is relying on only const_iterator in C++11 and</span></div><div class="line"><a name="l07468"></a><span class="lineno"> 7468</span>&#160;<span class="comment">// is relying on both const_iterator and iterator otherwise</span></div><div class="line"><a name="l07469"></a><span class="lineno"> 7469</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l07470"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html"> 7470</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html">IsRecursiveContainerImpl&lt;C, true&gt;</a> {</div><div class="line"><a name="l07471"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html#a5e8e2cf58f0d2581e9e3ab5f5630cd61"> 7471</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html#a5e8e2cf58f0d2581e9e3ab5f5630cd61">value_type</a> = decltype(*std::declval&lt;typename C::const_iterator&gt;());</div><div class="line"><a name="l07472"></a><span class="lineno"> 7472</span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1is__same.html">type</a> =</div><div class="line"><a name="l07473"></a><span class="lineno"> 7473</span>&#160; <a class="code" href="structtesting_1_1internal_1_1is__same.html">is_same</a>&lt;<span class="keyword">typename</span> std::remove_const&lt;</div><div class="line"><a name="l07474"></a><span class="lineno"> 7474</span>&#160; <span class="keyword">typename</span> std::remove_reference&lt;value_type&gt;::type&gt;<a class="code" href="structtesting_1_1internal_1_1is__same.html">::type</a>,</div><div class="line"><a name="l07475"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html#a24b611fbe1b9a7c524ee54ae01324388"> 7475</a></span>&#160; C&gt;;</div><div class="line"><a name="l07476"></a><span class="lineno"> 7476</span>&#160;};</div><div class="line"><a name="l07477"></a><span class="lineno"> 7477</span>&#160;</div><div class="line"><a name="l07478"></a><span class="lineno"> 7478</span>&#160;<span class="comment">// IsRecursiveContainer&lt;Type&gt; is a unary compile-time predicate that</span></div><div class="line"><a name="l07479"></a><span class="lineno"> 7479</span>&#160;<span class="comment">// evaluates whether C is a recursive container type. A recursive container</span></div><div class="line"><a name="l07480"></a><span class="lineno"> 7480</span>&#160;<span class="comment">// type is a container type whose value_type is equal to the container type</span></div><div class="line"><a name="l07481"></a><span class="lineno"> 7481</span>&#160;<span class="comment">// itself. An example for a recursive container type is</span></div><div class="line"><a name="l07482"></a><span class="lineno"> 7482</span>&#160;<span class="comment">// boost::filesystem::path, whose iterator has a value_type that is equal to</span></div><div class="line"><a name="l07483"></a><span class="lineno"> 7483</span>&#160;<span class="comment">// boost::filesystem::path.</span></div><div class="line"><a name="l07484"></a><span class="lineno"> 7484</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l07485"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_is_recursive_container.html"> 7485</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_is_recursive_container.html">IsRecursiveContainer</a> : <span class="keyword">public</span> <a class="code" href="structtesting_1_1internal_1_1_is_recursive_container_impl.html">IsRecursiveContainerImpl</a>&lt;C&gt;::type {};</div><div class="line"><a name="l07486"></a><span class="lineno"> 7486</span>&#160;</div><div class="line"><a name="l07487"></a><span class="lineno"> 7487</span>&#160;<span class="comment">// EnableIf&lt;condition&gt;::type is void when &#39;Cond&#39; is true, and</span></div><div class="line"><a name="l07488"></a><span class="lineno"> 7488</span>&#160;<span class="comment">// undefined when &#39;Cond&#39; is false. To use SFINAE to make a function</span></div><div class="line"><a name="l07489"></a><span class="lineno"> 7489</span>&#160;<span class="comment">// overload only apply when a particular expression is true, add</span></div><div class="line"><a name="l07490"></a><span class="lineno"> 7490</span>&#160;<span class="comment">// &quot;typename EnableIf&lt;expression&gt;::type* = 0&quot; as the last parameter.</span></div><div class="line"><a name="l07491"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_enable_if.html"> 7491</a></span>&#160;<span class="keyword">template</span>&lt;<span class="keywordtype">bool</span>&gt; <span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_enable_if.html">EnableIf</a>;</div><div class="line"><a name="l07492"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_enable_if_3_01true_01_4.html#a9398d803f1fdd99ff41823746f6299ff"> 7492</a></span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_enable_if.html">EnableIf</a>&lt;true&gt; { <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="structtesting_1_1internal_1_1_enable_if_3_01true_01_4.html#a9398d803f1fdd99ff41823746f6299ff">type</a>; }; <span class="comment">// NOLINT</span></div><div class="line"><a name="l07493"></a><span class="lineno"> 7493</span>&#160;</div><div class="line"><a name="l07494"></a><span class="lineno"> 7494</span>&#160;<span class="comment">// Utilities for native arrays.</span></div><div class="line"><a name="l07495"></a><span class="lineno"> 7495</span>&#160;</div><div class="line"><a name="l07496"></a><span class="lineno"> 7496</span>&#160;<span class="comment">// ArrayEq() compares two k-dimensional native arrays using the</span></div><div class="line"><a name="l07497"></a><span class="lineno"> 7497</span>&#160;<span class="comment">// elements&#39; operator==, where k can be any integer &gt;= 0. When k is</span></div><div class="line"><a name="l07498"></a><span class="lineno"> 7498</span>&#160;<span class="comment">// 0, ArrayEq() degenerates into comparing a single pair of values.</span></div><div class="line"><a name="l07499"></a><span class="lineno"> 7499</span>&#160;</div><div class="line"><a name="l07500"></a><span class="lineno"> 7500</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07501"></a><span class="lineno"> 7501</span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">ArrayEq</a>(<span class="keyword">const</span> T* lhs, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>, <span class="keyword">const</span> U* rhs);</div><div class="line"><a name="l07502"></a><span class="lineno"> 7502</span>&#160;</div><div class="line"><a name="l07503"></a><span class="lineno"> 7503</span>&#160;<span class="comment">// This generic version is used when k is 0.</span></div><div class="line"><a name="l07504"></a><span class="lineno"> 7504</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07505"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a49b4d0ee49c0f8c93bab29ebd20630cc"> 7505</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">ArrayEq</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> U&amp; rhs) { <span class="keywordflow">return</span> lhs == rhs; }</div><div class="line"><a name="l07506"></a><span class="lineno"> 7506</span>&#160;</div><div class="line"><a name="l07507"></a><span class="lineno"> 7507</span>&#160;<span class="comment">// This overload is used when k &gt;= 1.</span></div><div class="line"><a name="l07508"></a><span class="lineno"> 7508</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l07509"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a5cb6f81ee827130024261121c742b26c"> 7509</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">ArrayEq</a>(<span class="keyword">const</span> T(&amp;lhs)[N], <span class="keyword">const</span> U(&amp;rhs)[N]) {</div><div class="line"><a name="l07510"></a><span class="lineno"> 7510</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">internal::ArrayEq</a>(lhs, N, rhs);</div><div class="line"><a name="l07511"></a><span class="lineno"> 7511</span>&#160;}</div><div class="line"><a name="l07512"></a><span class="lineno"> 7512</span>&#160;</div><div class="line"><a name="l07513"></a><span class="lineno"> 7513</span>&#160;<span class="comment">// This helper reduces code bloat. If we instead put its logic inside</span></div><div class="line"><a name="l07514"></a><span class="lineno"> 7514</span>&#160;<span class="comment">// the previous ArrayEq() function, arrays with different sizes would</span></div><div class="line"><a name="l07515"></a><span class="lineno"> 7515</span>&#160;<span class="comment">// lead to different copies of the template code.</span></div><div class="line"><a name="l07516"></a><span class="lineno"> 7516</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07517"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47"> 7517</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">ArrayEq</a>(<span class="keyword">const</span> T* lhs, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>, <span class="keyword">const</span> U* rhs) {</div><div class="line"><a name="l07518"></a><span class="lineno"> 7518</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i != <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>; i++) {</div><div class="line"><a name="l07519"></a><span class="lineno"> 7519</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">internal::ArrayEq</a>(lhs[i], rhs[i]))</div><div class="line"><a name="l07520"></a><span class="lineno"> 7520</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l07521"></a><span class="lineno"> 7521</span>&#160; }</div><div class="line"><a name="l07522"></a><span class="lineno"> 7522</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l07523"></a><span class="lineno"> 7523</span>&#160;}</div><div class="line"><a name="l07524"></a><span class="lineno"> 7524</span>&#160;</div><div class="line"><a name="l07525"></a><span class="lineno"> 7525</span>&#160;<span class="comment">// Finds the first element in the iterator range [begin, end) that</span></div><div class="line"><a name="l07526"></a><span class="lineno"> 7526</span>&#160;<span class="comment">// equals elem. Element may be a native array type itself.</span></div><div class="line"><a name="l07527"></a><span class="lineno"> 7527</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Iter, <span class="keyword">typename</span> Element&gt;</div><div class="line"><a name="l07528"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a94a857fe6ff32cf4fdc4769a4071f239"> 7528</a></span>&#160;Iter <a class="code" href="namespacetesting_1_1internal.html#a94a857fe6ff32cf4fdc4769a4071f239">ArrayAwareFind</a>(Iter begin, Iter end, <span class="keyword">const</span> Element&amp; elem) {</div><div class="line"><a name="l07529"></a><span class="lineno"> 7529</span>&#160; <span class="keywordflow">for</span> (Iter it = begin; it != end; ++it) {</div><div class="line"><a name="l07530"></a><span class="lineno"> 7530</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">internal::ArrayEq</a>(*it, elem))</div><div class="line"><a name="l07531"></a><span class="lineno"> 7531</span>&#160; <span class="keywordflow">return</span> it;</div><div class="line"><a name="l07532"></a><span class="lineno"> 7532</span>&#160; }</div><div class="line"><a name="l07533"></a><span class="lineno"> 7533</span>&#160; <span class="keywordflow">return</span> end;</div><div class="line"><a name="l07534"></a><span class="lineno"> 7534</span>&#160;}</div><div class="line"><a name="l07535"></a><span class="lineno"> 7535</span>&#160;</div><div class="line"><a name="l07536"></a><span class="lineno"> 7536</span>&#160;<span class="comment">// CopyArray() copies a k-dimensional native array using the elements&#39;</span></div><div class="line"><a name="l07537"></a><span class="lineno"> 7537</span>&#160;<span class="comment">// operator=, where k can be any integer &gt;= 0. When k is 0,</span></div><div class="line"><a name="l07538"></a><span class="lineno"> 7538</span>&#160;<span class="comment">// CopyArray() degenerates into copying a single value.</span></div><div class="line"><a name="l07539"></a><span class="lineno"> 7539</span>&#160;</div><div class="line"><a name="l07540"></a><span class="lineno"> 7540</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07541"></a><span class="lineno"> 7541</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">CopyArray</a>(<span class="keyword">const</span> T* from, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>, U* to);</div><div class="line"><a name="l07542"></a><span class="lineno"> 7542</span>&#160;</div><div class="line"><a name="l07543"></a><span class="lineno"> 7543</span>&#160;<span class="comment">// This generic version is used when k is 0.</span></div><div class="line"><a name="l07544"></a><span class="lineno"> 7544</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07545"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a84d0e746ba0827cc52b53d22000de0e8"> 7545</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">CopyArray</a>(<span class="keyword">const</span> T&amp; from, U* to) { *to = from; }</div><div class="line"><a name="l07546"></a><span class="lineno"> 7546</span>&#160;</div><div class="line"><a name="l07547"></a><span class="lineno"> 7547</span>&#160;<span class="comment">// This overload is used when k &gt;= 1.</span></div><div class="line"><a name="l07548"></a><span class="lineno"> 7548</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l07549"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a1e7ae855686720615dcd5754c8181c62"> 7549</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">CopyArray</a>(<span class="keyword">const</span> T(&amp;from)[N], U(*to)[N]) {</div><div class="line"><a name="l07550"></a><span class="lineno"> 7550</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">internal::CopyArray</a>(from, N, *to);</div><div class="line"><a name="l07551"></a><span class="lineno"> 7551</span>&#160;}</div><div class="line"><a name="l07552"></a><span class="lineno"> 7552</span>&#160;</div><div class="line"><a name="l07553"></a><span class="lineno"> 7553</span>&#160;<span class="comment">// This helper reduces code bloat. If we instead put its logic inside</span></div><div class="line"><a name="l07554"></a><span class="lineno"> 7554</span>&#160;<span class="comment">// the previous CopyArray() function, arrays with different sizes</span></div><div class="line"><a name="l07555"></a><span class="lineno"> 7555</span>&#160;<span class="comment">// would lead to different copies of the template code.</span></div><div class="line"><a name="l07556"></a><span class="lineno"> 7556</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l07557"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5"> 7557</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">CopyArray</a>(<span class="keyword">const</span> T* from, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>, U* to) {</div><div class="line"><a name="l07558"></a><span class="lineno"> 7558</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i != <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>; i++) {</div><div class="line"><a name="l07559"></a><span class="lineno"> 7559</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">internal::CopyArray</a>(from[i], to + i);</div><div class="line"><a name="l07560"></a><span class="lineno"> 7560</span>&#160; }</div><div class="line"><a name="l07561"></a><span class="lineno"> 7561</span>&#160;}</div><div class="line"><a name="l07562"></a><span class="lineno"> 7562</span>&#160;</div><div class="line"><a name="l07563"></a><span class="lineno"> 7563</span>&#160;<span class="comment">// The relation between an NativeArray object (see below) and the</span></div><div class="line"><a name="l07564"></a><span class="lineno"> 7564</span>&#160;<span class="comment">// native array it represents.</span></div><div class="line"><a name="l07565"></a><span class="lineno"> 7565</span>&#160;<span class="comment">// We use 2 different structs to allow non-copyable types to be used, as long</span></div><div class="line"><a name="l07566"></a><span class="lineno"> 7566</span>&#160;<span class="comment">// as RelationToSourceReference() is passed.</span></div><div class="line"><a name="l07567"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_relation_to_source_reference.html"> 7567</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_relation_to_source_reference.html">RelationToSourceReference</a> {};</div><div class="line"><a name="l07568"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_relation_to_source_copy.html"> 7568</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_relation_to_source_copy.html">RelationToSourceCopy</a> {};</div><div class="line"><a name="l07569"></a><span class="lineno"> 7569</span>&#160;</div><div class="line"><a name="l07570"></a><span class="lineno"> 7570</span>&#160;<span class="comment">// Adapts a native array to a read-only STL-style container. Instead</span></div><div class="line"><a name="l07571"></a><span class="lineno"> 7571</span>&#160;<span class="comment">// of the complete STL container concept, this adaptor only implements</span></div><div class="line"><a name="l07572"></a><span class="lineno"> 7572</span>&#160;<span class="comment">// members useful for Google Mock&#39;s container matchers. New members</span></div><div class="line"><a name="l07573"></a><span class="lineno"> 7573</span>&#160;<span class="comment">// should be added as needed. To simplify the implementation, we only</span></div><div class="line"><a name="l07574"></a><span class="lineno"> 7574</span>&#160;<span class="comment">// support Element being a raw type (i.e. having no top-level const or</span></div><div class="line"><a name="l07575"></a><span class="lineno"> 7575</span>&#160;<span class="comment">// reference modifier). It&#39;s the client&#39;s responsibility to satisfy</span></div><div class="line"><a name="l07576"></a><span class="lineno"> 7576</span>&#160;<span class="comment">// this requirement. Element can be an array type itself (hence</span></div><div class="line"><a name="l07577"></a><span class="lineno"> 7577</span>&#160;<span class="comment">// multi-dimensional arrays are supported).</span></div><div class="line"><a name="l07578"></a><span class="lineno"> 7578</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Element&gt;</div><div class="line"><a name="l07579"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html"> 7579</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_native_array.html">NativeArray</a> {</div><div class="line"><a name="l07580"></a><span class="lineno"> 7580</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07581"></a><span class="lineno"> 7581</span>&#160; <span class="comment">// STL-style container typedefs.</span></div><div class="line"><a name="l07582"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a12216d686e16e4cc63d952fada5b2ba9"> 7582</a></span>&#160; <span class="keyword">typedef</span> Element <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a12216d686e16e4cc63d952fada5b2ba9">value_type</a>;</div><div class="line"><a name="l07583"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#ac1301a57977b57a1ad013e4e25fc2a72"> 7583</a></span>&#160; <span class="keyword">typedef</span> Element* <a class="code" href="classtesting_1_1internal_1_1_native_array.html#ac1301a57977b57a1ad013e4e25fc2a72">iterator</a>;</div><div class="line"><a name="l07584"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a9ce7c8408460d7158a2870456d134557"> 7584</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> Element* <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a9ce7c8408460d7158a2870456d134557">const_iterator</a>;</div><div class="line"><a name="l07585"></a><span class="lineno"> 7585</span>&#160;</div><div class="line"><a name="l07586"></a><span class="lineno"> 7586</span>&#160; <span class="comment">// Constructs from a native array. References the source.</span></div><div class="line"><a name="l07587"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a52b3689c62532703d11e9d82939a7141"> 7587</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a52b3689c62532703d11e9d82939a7141">NativeArray</a>(<span class="keyword">const</span> Element* array, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>, <a class="code" href="structtesting_1_1internal_1_1_relation_to_source_reference.html">RelationToSourceReference</a>) {</div><div class="line"><a name="l07588"></a><span class="lineno"> 7588</span>&#160; InitRef(array, <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>);</div><div class="line"><a name="l07589"></a><span class="lineno"> 7589</span>&#160; }</div><div class="line"><a name="l07590"></a><span class="lineno"> 7590</span>&#160;</div><div class="line"><a name="l07591"></a><span class="lineno"> 7591</span>&#160; <span class="comment">// Constructs from a native array. Copies the source.</span></div><div class="line"><a name="l07592"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#ac184ee5741af5be3402213819c834405"> 7592</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#ac184ee5741af5be3402213819c834405">NativeArray</a>(<span class="keyword">const</span> Element* array, <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>, <a class="code" href="structtesting_1_1internal_1_1_relation_to_source_copy.html">RelationToSourceCopy</a>) {</div><div class="line"><a name="l07593"></a><span class="lineno"> 7593</span>&#160; InitCopy(array, <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>);</div><div class="line"><a name="l07594"></a><span class="lineno"> 7594</span>&#160; }</div><div class="line"><a name="l07595"></a><span class="lineno"> 7595</span>&#160;</div><div class="line"><a name="l07596"></a><span class="lineno"> 7596</span>&#160; <span class="comment">// Copy constructor.</span></div><div class="line"><a name="l07597"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#abb346ac3040f5da733f594cc2d5958bc"> 7597</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#abb346ac3040f5da733f594cc2d5958bc">NativeArray</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_native_array.html">NativeArray</a>&amp; rhs) {</div><div class="line"><a name="l07598"></a><span class="lineno"> 7598</span>&#160; (this-&gt;*rhs.clone_)(rhs.array_, rhs.size_);</div><div class="line"><a name="l07599"></a><span class="lineno"> 7599</span>&#160; }</div><div class="line"><a name="l07600"></a><span class="lineno"> 7600</span>&#160;</div><div class="line"><a name="l07601"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a55ab5948d473a487303dcf6e02ad1f60"> 7601</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a55ab5948d473a487303dcf6e02ad1f60">~NativeArray</a>() {</div><div class="line"><a name="l07602"></a><span class="lineno"> 7602</span>&#160; <span class="keywordflow">if</span> (clone_ != &amp;NativeArray::InitRef)</div><div class="line"><a name="l07603"></a><span class="lineno"> 7603</span>&#160; <span class="keyword">delete</span>[] array_;</div><div class="line"><a name="l07604"></a><span class="lineno"> 7604</span>&#160; }</div><div class="line"><a name="l07605"></a><span class="lineno"> 7605</span>&#160;</div><div class="line"><a name="l07606"></a><span class="lineno"> 7606</span>&#160; <span class="comment">// STL-style container methods.</span></div><div class="line"><a name="l07607"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89"> 7607</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> size_; }</div><div class="line"><a name="l07608"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a3046d93cfa23097e7b7c91f5f982dc78"> 7608</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a9ce7c8408460d7158a2870456d134557">const_iterator</a> <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a3046d93cfa23097e7b7c91f5f982dc78">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> array_; }</div><div class="line"><a name="l07609"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#ae1cda748e49c6906421c6183c4d07c5a"> 7609</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a9ce7c8408460d7158a2870456d134557">const_iterator</a> <a class="code" href="classtesting_1_1internal_1_1_native_array.html#ae1cda748e49c6906421c6183c4d07c5a">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> array_ + size_; }</div><div class="line"><a name="l07610"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_native_array.html#a81b90f5739ed812610e68dc34c9e3850"> 7610</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_native_array.html#a81b90f5739ed812610e68dc34c9e3850">operator==</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_native_array.html">NativeArray</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l07611"></a><span class="lineno"> 7611</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89">size</a>() == rhs.<a class="code" href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89">size</a>() &amp;&amp;</div><div class="line"><a name="l07612"></a><span class="lineno"> 7612</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">ArrayEq</a>(<a class="code" href="classtesting_1_1internal_1_1_native_array.html#a3046d93cfa23097e7b7c91f5f982dc78">begin</a>(), <a class="code" href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89">size</a>(), rhs.<a class="code" href="classtesting_1_1internal_1_1_native_array.html#a3046d93cfa23097e7b7c91f5f982dc78">begin</a>());</div><div class="line"><a name="l07613"></a><span class="lineno"> 7613</span>&#160; }</div><div class="line"><a name="l07614"></a><span class="lineno"> 7614</span>&#160;</div><div class="line"><a name="l07615"></a><span class="lineno"> 7615</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07616"></a><span class="lineno"> 7616</span>&#160; <span class="keyword">enum</span> {</div><div class="line"><a name="l07617"></a><span class="lineno"> 7617</span>&#160; kCheckTypeIsNotConstOrAReference = <a class="code" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html">StaticAssertTypeEqHelper</a>&lt;</div><div class="line"><a name="l07618"></a><span class="lineno"> 7618</span>&#160; Element, <a class="code" href="gtest_8h.html#a874567b176266188fabfffb8393267ce">GTEST_REMOVE_REFERENCE_AND_CONST_</a>(Element)&gt;::value</div><div class="line"><a name="l07619"></a><span class="lineno"> 7619</span>&#160; };</div><div class="line"><a name="l07620"></a><span class="lineno"> 7620</span>&#160;</div><div class="line"><a name="l07621"></a><span class="lineno"> 7621</span>&#160; <span class="comment">// Initializes this object with a copy of the input.</span></div><div class="line"><a name="l07622"></a><span class="lineno"> 7622</span>&#160; <span class="keywordtype">void</span> InitCopy(<span class="keyword">const</span> Element* array, <span class="keywordtype">size_t</span> a_size) {</div><div class="line"><a name="l07623"></a><span class="lineno"> 7623</span>&#160; Element* <span class="keyword">const</span> copy = <span class="keyword">new</span> Element[a_size];</div><div class="line"><a name="l07624"></a><span class="lineno"> 7624</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">CopyArray</a>(array, a_size, copy);</div><div class="line"><a name="l07625"></a><span class="lineno"> 7625</span>&#160; array_ = copy;</div><div class="line"><a name="l07626"></a><span class="lineno"> 7626</span>&#160; size_ = a_size;</div><div class="line"><a name="l07627"></a><span class="lineno"> 7627</span>&#160; clone_ = &amp;NativeArray::InitCopy;</div><div class="line"><a name="l07628"></a><span class="lineno"> 7628</span>&#160; }</div><div class="line"><a name="l07629"></a><span class="lineno"> 7629</span>&#160;</div><div class="line"><a name="l07630"></a><span class="lineno"> 7630</span>&#160; <span class="comment">// Initializes this object with a reference of the input.</span></div><div class="line"><a name="l07631"></a><span class="lineno"> 7631</span>&#160; <span class="keywordtype">void</span> InitRef(<span class="keyword">const</span> Element* array, <span class="keywordtype">size_t</span> a_size) {</div><div class="line"><a name="l07632"></a><span class="lineno"> 7632</span>&#160; array_ = array;</div><div class="line"><a name="l07633"></a><span class="lineno"> 7633</span>&#160; size_ = a_size;</div><div class="line"><a name="l07634"></a><span class="lineno"> 7634</span>&#160; clone_ = &amp;NativeArray::InitRef;</div><div class="line"><a name="l07635"></a><span class="lineno"> 7635</span>&#160; }</div><div class="line"><a name="l07636"></a><span class="lineno"> 7636</span>&#160;</div><div class="line"><a name="l07637"></a><span class="lineno"> 7637</span>&#160; <span class="keyword">const</span> Element* array_;</div><div class="line"><a name="l07638"></a><span class="lineno"> 7638</span>&#160; <span class="keywordtype">size_t</span> size_;</div><div class="line"><a name="l07639"></a><span class="lineno"> 7639</span>&#160; void (<a class="code" href="classtesting_1_1internal_1_1_native_array.html#a52b3689c62532703d11e9d82939a7141">NativeArray</a>::*clone_)(<span class="keyword">const</span> Element*, <a class="code" href="namespaceutl.html#a22cbecb50ee5c1032de66133e96cbac6">size_t</a>);</div><div class="line"><a name="l07640"></a><span class="lineno"> 7640</span>&#160;</div><div class="line"><a name="l07641"></a><span class="lineno"> 7641</span>&#160; GTEST_DISALLOW_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_native_array.html#a52b3689c62532703d11e9d82939a7141">NativeArray</a>);</div><div class="line"><a name="l07642"></a><span class="lineno"> 7642</span>&#160;};</div><div class="line"><a name="l07643"></a><span class="lineno"> 7643</span>&#160;</div><div class="line"><a name="l07644"></a><span class="lineno"> 7644</span>&#160;<span class="comment">// Backport of std::index_sequence.</span></div><div class="line"><a name="l07645"></a><span class="lineno"> 7645</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span>... Is&gt;</div><div class="line"><a name="l07646"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_index_sequence.html"> 7646</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a> {</div><div class="line"><a name="l07647"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_index_sequence.html#a89bb13a7b5d169b69659f395dcec2b2d"> 7647</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">type</a> = <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>;</div><div class="line"><a name="l07648"></a><span class="lineno"> 7648</span>&#160;};</div><div class="line"><a name="l07649"></a><span class="lineno"> 7649</span>&#160;</div><div class="line"><a name="l07650"></a><span class="lineno"> 7650</span>&#160;<span class="comment">// Double the IndexSequence, and one if plus_one is true.</span></div><div class="line"><a name="l07651"></a><span class="lineno"> 7651</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> plus_one, <span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> sizeofT&gt;</div><div class="line"><a name="l07652"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_double_sequence.html"> 7652</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_double_sequence.html">DoubleSequence</a>;</div><div class="line"><a name="l07653"></a><span class="lineno"> 7653</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span>... I, <span class="keywordtype">size_t</span> sizeofT&gt;</div><div class="line"><a name="l07654"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_double_sequence_3_01true_00_01_index_sequence_3_01_i_8_8_8_01_4_00_01sizeof_t_01_4.html"> 7654</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_double_sequence.html">DoubleSequence</a>&lt;true, <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;I...&gt;, sizeofT&gt; {</div><div class="line"><a name="l07655"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_double_sequence_3_01true_00_01_index_sequence_3_01_i_8_8_8_01_4_00_01sizeof_t_01_4.html#a6f0fbcc14f5264c7db52f3ba3e264545"> 7655</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">type</a> = <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;I..., (sizeofT + I)..., 2 * sizeofT&gt;;</div><div class="line"><a name="l07656"></a><span class="lineno"> 7656</span>&#160;};</div><div class="line"><a name="l07657"></a><span class="lineno"> 7657</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span>... I, <span class="keywordtype">size_t</span> sizeofT&gt;</div><div class="line"><a name="l07658"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_double_sequence_3_01false_00_01_index_sequence_3_01_i_8_8_8_01_4_00_01sizeof_t_01_4.html"> 7658</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_double_sequence.html">DoubleSequence</a>&lt;false, <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;I...&gt;, sizeofT&gt; {</div><div class="line"><a name="l07659"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_double_sequence_3_01false_00_01_index_sequence_3_01_i_8_8_8_01_4_00_01sizeof_t_01_4.html#af11568320fe19e984e2eb5ab9ad026aa"> 7659</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">type</a> = <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;I..., (sizeofT + I)...&gt;;</div><div class="line"><a name="l07660"></a><span class="lineno"> 7660</span>&#160;};</div><div class="line"><a name="l07661"></a><span class="lineno"> 7661</span>&#160;</div><div class="line"><a name="l07662"></a><span class="lineno"> 7662</span>&#160;<span class="comment">// Backport of std::make_index_sequence.</span></div><div class="line"><a name="l07663"></a><span class="lineno"> 7663</span>&#160;<span class="comment">// It uses O(ln(N)) instantiation depth.</span></div><div class="line"><a name="l07664"></a><span class="lineno"> 7664</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l07665"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_make_index_sequence.html"> 7665</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_make_index_sequence.html">MakeIndexSequence</a></div><div class="line"><a name="l07666"></a><span class="lineno"> 7666</span>&#160; : <a class="code" href="structtesting_1_1internal_1_1_double_sequence.html">DoubleSequence</a>&lt;N % 2 == 1, typename MakeIndexSequence&lt;N / 2&gt;::type,</div><div class="line"><a name="l07667"></a><span class="lineno"> 7667</span>&#160; N / 2&gt;::type {};</div><div class="line"><a name="l07668"></a><span class="lineno"> 7668</span>&#160;</div><div class="line"><a name="l07669"></a><span class="lineno"> 7669</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l07670"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_make_index_sequence_3_010_01_4.html"> 7670</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_make_index_sequence.html">MakeIndexSequence</a>&lt;0&gt; : <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;&gt; {};</div><div class="line"><a name="l07671"></a><span class="lineno"> 7671</span>&#160;</div><div class="line"><a name="l07672"></a><span class="lineno"> 7672</span>&#160;<span class="comment">// FIXME: This implementation of ElemFromList is O(1) in instantiation depth,</span></div><div class="line"><a name="l07673"></a><span class="lineno"> 7673</span>&#160;<span class="comment">// but it is O(N^2) in total instantiations. Not sure if this is the best</span></div><div class="line"><a name="l07674"></a><span class="lineno"> 7674</span>&#160;<span class="comment">// tradeoff, as it will make it somewhat slow to compile.</span></div><div class="line"><a name="l07675"></a><span class="lineno"> 7675</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span>, <span class="keywordtype">size_t</span>&gt;</div><div class="line"><a name="l07676"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_elem_from_list_impl.html"> 7676</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_elem_from_list_impl.html">ElemFromListImpl</a> {};</div><div class="line"><a name="l07677"></a><span class="lineno"> 7677</span>&#160;</div><div class="line"><a name="l07678"></a><span class="lineno"> 7678</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l07679"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_elem_from_list_impl_3_01_t_00_01_i_00_01_i_01_4.html"> 7679</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_elem_from_list_impl.html">ElemFromListImpl</a>&lt;T, I, I&gt; {</div><div class="line"><a name="l07680"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_elem_from_list_impl_3_01_t_00_01_i_00_01_i_01_4.html#ab1552e339cc1ff1e0aa448d684ffaf39"> 7680</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_elem_from_list_impl_3_01_t_00_01_i_00_01_i_01_4.html#ab1552e339cc1ff1e0aa448d684ffaf39">type</a> = T;</div><div class="line"><a name="l07681"></a><span class="lineno"> 7681</span>&#160;};</div><div class="line"><a name="l07682"></a><span class="lineno"> 7682</span>&#160;</div><div class="line"><a name="l07683"></a><span class="lineno"> 7683</span>&#160;<span class="comment">// Get the Nth element from T...</span></div><div class="line"><a name="l07684"></a><span class="lineno"> 7684</span>&#160;<span class="comment">// It uses O(1) instantiation depth.</span></div><div class="line"><a name="l07685"></a><span class="lineno"> 7685</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> I, <span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l07686"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_elem_from_list.html"> 7686</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_elem_from_list.html">ElemFromList</a>;</div><div class="line"><a name="l07687"></a><span class="lineno"> 7687</span>&#160;</div><div class="line"><a name="l07688"></a><span class="lineno"> 7688</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> N, <span class="keywordtype">size_t</span>... I, <span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l07689"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_elem_from_list_3_01_n_00_01_index_sequence_3_01_i_8_8_8_01_4_00_01_t_8_8_8_01_4.html"> 7689</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_elem_from_list.html">ElemFromList</a>&lt;N, <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;I...&gt;, T...&gt;</div><div class="line"><a name="l07690"></a><span class="lineno"> 7690</span>&#160; : <a class="code" href="structtesting_1_1internal_1_1_elem_from_list_impl.html">ElemFromListImpl</a>&lt;T, N, I&gt;... {};</div><div class="line"><a name="l07691"></a><span class="lineno"> 7691</span>&#160;</div><div class="line"><a name="l07692"></a><span class="lineno"> 7692</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l07693"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_flat_tuple.html"> 7693</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html">FlatTuple</a>;</div><div class="line"><a name="l07694"></a><span class="lineno"> 7694</span>&#160;</div><div class="line"><a name="l07695"></a><span class="lineno"> 7695</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Derived, <span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l07696"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html"> 7696</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase</a>;</div><div class="line"><a name="l07697"></a><span class="lineno"> 7697</span>&#160;</div><div class="line"><a name="l07698"></a><span class="lineno"> 7698</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... T, <span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l07699"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html"> 7699</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase</a>&lt;<a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html">FlatTuple</a>&lt;T...&gt;, I&gt; {</div><div class="line"><a name="l07700"></a><span class="lineno"> 7700</span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a6b87a445f87724f9363b348e6c697766">value_type</a> =</div><div class="line"><a name="l07701"></a><span class="lineno"> 7701</span>&#160; <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_elem_from_list.html">ElemFromList</a>&lt;I, <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_make_index_sequence.html">MakeIndexSequence</a>&lt;<span class="keyword">sizeof</span>...(T)&gt;::type,</div><div class="line"><a name="l07702"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a6b87a445f87724f9363b348e6c697766"> 7702</a></span>&#160; T...&gt;::type;</div><div class="line"><a name="l07703"></a><span class="lineno"> 7703</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l07704"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a153da382b00977dfb5974f85dd31ea58"> 7704</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a153da382b00977dfb5974f85dd31ea58">FlatTupleElemBase</a>(<a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a6b87a445f87724f9363b348e6c697766">value_type</a> t) : value(std::move(t)) {}</div><div class="line"><a name="l07705"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#ac175518e7807c0b49c0ba8c1c78269ec"> 7705</a></span>&#160; <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a6b87a445f87724f9363b348e6c697766">value_type</a> <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#ac175518e7807c0b49c0ba8c1c78269ec">value</a>;</div><div class="line"><a name="l07706"></a><span class="lineno"> 7706</span>&#160;};</div><div class="line"><a name="l07707"></a><span class="lineno"> 7707</span>&#160;</div><div class="line"><a name="l07708"></a><span class="lineno"> 7708</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Derived, <span class="keyword">typename</span> Idx&gt;</div><div class="line"><a name="l07709"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_base.html"> 7709</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_base.html">FlatTupleBase</a>;</div><div class="line"><a name="l07710"></a><span class="lineno"> 7710</span>&#160;</div><div class="line"><a name="l07711"></a><span class="lineno"> 7711</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span>... Idx, <span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l07712"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4.html"> 7712</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_base.html">FlatTupleBase</a>&lt;<a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html">FlatTuple</a>&lt;T...&gt;, <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;Idx...&gt;&gt;</div><div class="line"><a name="l07713"></a><span class="lineno"> 7713</span>&#160; : <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase</a>&lt;FlatTuple&lt;T...&gt;, Idx&gt;... {</div><div class="line"><a name="l07714"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4.html#ada1941ebde1ec1c844b72970e0ccb304"> 7714</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">Indices</a> = <a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence</a>&lt;Idx...&gt;;</div><div class="line"><a name="l07715"></a><span class="lineno"> 7715</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_base.html">FlatTupleBase</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l07716"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4.html#ac515eec5c0647748bf8fa4ff553c706e"> 7716</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4.html#ac515eec5c0647748bf8fa4ff553c706e">FlatTupleBase</a>(T... t)</div><div class="line"><a name="l07717"></a><span class="lineno"> 7717</span>&#160; : <a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase</a>&lt;<a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html">FlatTuple</a>&lt;T...&gt;, Idx&gt;(std::move(t))... {}</div><div class="line"><a name="l07718"></a><span class="lineno"> 7718</span>&#160;};</div><div class="line"><a name="l07719"></a><span class="lineno"> 7719</span>&#160;</div><div class="line"><a name="l07720"></a><span class="lineno"> 7720</span>&#160;<span class="comment">// Analog to std::tuple but with different tradeoffs.</span></div><div class="line"><a name="l07721"></a><span class="lineno"> 7721</span>&#160;<span class="comment">// This class minimizes the template instantiation depth, thus allowing more</span></div><div class="line"><a name="l07722"></a><span class="lineno"> 7722</span>&#160;<span class="comment">// elements that std::tuple would. std::tuple has been seen to require an</span></div><div class="line"><a name="l07723"></a><span class="lineno"> 7723</span>&#160;<span class="comment">// instantiation depth of more than 10x the number of elements in some</span></div><div class="line"><a name="l07724"></a><span class="lineno"> 7724</span>&#160;<span class="comment">// implementations.</span></div><div class="line"><a name="l07725"></a><span class="lineno"> 7725</span>&#160;<span class="comment">// FlatTuple and ElemFromList are not recursive and have a fixed depth</span></div><div class="line"><a name="l07726"></a><span class="lineno"> 7726</span>&#160;<span class="comment">// regardless of T...</span></div><div class="line"><a name="l07727"></a><span class="lineno"> 7727</span>&#160;<span class="comment">// MakeIndexSequence, on the other hand, it is recursive but with an</span></div><div class="line"><a name="l07728"></a><span class="lineno"> 7728</span>&#160;<span class="comment">// instantiation depth of O(ln(N)).</span></div><div class="line"><a name="l07729"></a><span class="lineno"> 7729</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l07730"></a><span class="lineno"> 7730</span>&#160;<span class="keyword">class </span>FlatTuple</div><div class="line"><a name="l07731"></a><span class="lineno"> 7731</span>&#160; : <span class="keyword">private</span> FlatTupleBase&lt;FlatTuple&lt;T...&gt;,</div><div class="line"><a name="l07732"></a><span class="lineno"> 7732</span>&#160; typename MakeIndexSequence&lt;sizeof...(T)&gt;::type&gt; {</div><div class="line"><a name="l07733"></a><span class="lineno"> 7733</span>&#160; <span class="keyword">using</span> Indices = <span class="keyword">typename</span> FlatTuple::FlatTupleBase::Indices;</div><div class="line"><a name="l07734"></a><span class="lineno"> 7734</span>&#160;</div><div class="line"><a name="l07735"></a><span class="lineno"> 7735</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07736"></a><span class="lineno"> 7736</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html#a056c58b5dd85f470ec5db1db9956c702">FlatTuple</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l07737"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_flat_tuple.html#a611d01b9ff2437e4b9cfe3bbedc6d6ae"> 7737</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html#a611d01b9ff2437e4b9cfe3bbedc6d6ae">FlatTuple</a>(T... t) : <a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html">FlatTuple</a>::<a class="code" href="structtesting_1_1internal_1_1_flat_tuple_base.html">FlatTupleBase</a>(std::move(t)...) {}</div><div class="line"><a name="l07738"></a><span class="lineno"> 7738</span>&#160;</div><div class="line"><a name="l07739"></a><span class="lineno"> 7739</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l07740"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_flat_tuple.html#a9ea6508fa6413ceca5e38b8077c67938"> 7740</a></span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_elem_from_list.html">ElemFromList</a>&lt;I, Indices, T...&gt;::type&amp; <a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html#a9ea6508fa6413ceca5e38b8077c67938">Get</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l07741"></a><span class="lineno"> 7741</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase&lt;FlatTuple, I&gt;</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;value;</div><div class="line"><a name="l07742"></a><span class="lineno"> 7742</span>&#160; }</div><div class="line"><a name="l07743"></a><span class="lineno"> 7743</span>&#160;</div><div class="line"><a name="l07744"></a><span class="lineno"> 7744</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l07745"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_flat_tuple.html#a48a13560f8963f727d81a7922e3b3e50"> 7745</a></span>&#160; <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_elem_from_list.html">ElemFromList</a>&lt;I, Indices, T...&gt;::type&amp; <a class="code" href="classtesting_1_1internal_1_1_flat_tuple.html#a48a13560f8963f727d81a7922e3b3e50">Get</a>() {</div><div class="line"><a name="l07746"></a><span class="lineno"> 7746</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">FlatTupleElemBase&lt;FlatTuple, I&gt;</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;value;</div><div class="line"><a name="l07747"></a><span class="lineno"> 7747</span>&#160; }</div><div class="line"><a name="l07748"></a><span class="lineno"> 7748</span>&#160;};</div><div class="line"><a name="l07749"></a><span class="lineno"> 7749</span>&#160;</div><div class="line"><a name="l07750"></a><span class="lineno"> 7750</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l07751"></a><span class="lineno"> 7751</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l07752"></a><span class="lineno"> 7752</span>&#160;</div><div class="line"><a name="l07753"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8d70025c45a47a493780746dfd66d565"> 7753</a></span>&#160;<span class="preprocessor">#define GTEST_MESSAGE_AT_(file, line, message, result_type) \</span></div><div class="line"><a name="l07754"></a><span class="lineno"> 7754</span>&#160;<span class="preprocessor"> ::testing::internal::AssertHelper(result_type, file, line, message) \</span></div><div class="line"><a name="l07755"></a><span class="lineno"> 7755</span>&#160;<span class="preprocessor"> = ::testing::Message()</span></div><div class="line"><a name="l07756"></a><span class="lineno"> 7756</span>&#160;</div><div class="line"><a name="l07757"></a><span class="lineno"><a class="line" href="gtest_8h.html#a94c73d5368ec946bc354d0992ad00810"> 7757</a></span>&#160;<span class="preprocessor">#define GTEST_MESSAGE_(message, result_type) \</span></div><div class="line"><a name="l07758"></a><span class="lineno"> 7758</span>&#160;<span class="preprocessor"> GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)</span></div><div class="line"><a name="l07759"></a><span class="lineno"> 7759</span>&#160;</div><div class="line"><a name="l07760"></a><span class="lineno"><a class="line" href="gtest_8h.html#a0f9a4c3ea82cc7bf4478eaffdc168358"> 7760</a></span>&#160;<span class="preprocessor">#define GTEST_FATAL_FAILURE_(message) \</span></div><div class="line"><a name="l07761"></a><span class="lineno"> 7761</span>&#160;<span class="preprocessor"> return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)</span></div><div class="line"><a name="l07762"></a><span class="lineno"> 7762</span>&#160;</div><div class="line"><a name="l07763"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6cb7482cfa03661a91c698eb5895f642"> 7763</a></span>&#160;<span class="preprocessor">#define GTEST_NONFATAL_FAILURE_(message) \</span></div><div class="line"><a name="l07764"></a><span class="lineno"> 7764</span>&#160;<span class="preprocessor"> GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)</span></div><div class="line"><a name="l07765"></a><span class="lineno"> 7765</span>&#160;</div><div class="line"><a name="l07766"></a><span class="lineno"><a class="line" href="gtest_8h.html#abe012b550eb3807e8c49f7e161bd1567"> 7766</a></span>&#160;<span class="preprocessor">#define GTEST_SUCCESS_(message) \</span></div><div class="line"><a name="l07767"></a><span class="lineno"> 7767</span>&#160;<span class="preprocessor"> GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)</span></div><div class="line"><a name="l07768"></a><span class="lineno"> 7768</span>&#160;</div><div class="line"><a name="l07769"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab75ed7a6cd9e466944ce680c1c07ab47"> 7769</a></span>&#160;<span class="preprocessor">#define GTEST_SKIP_(message) \</span></div><div class="line"><a name="l07770"></a><span class="lineno"> 7770</span>&#160;<span class="preprocessor"> return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip)</span></div><div class="line"><a name="l07771"></a><span class="lineno"> 7771</span>&#160;</div><div class="line"><a name="l07772"></a><span class="lineno"> 7772</span>&#160;<span class="comment">// Suppress MSVC warning 4072 (unreachable code) for the code following</span></div><div class="line"><a name="l07773"></a><span class="lineno"> 7773</span>&#160;<span class="comment">// statement if it returns or throws (or doesn&#39;t return or throw in some</span></div><div class="line"><a name="l07774"></a><span class="lineno"> 7774</span>&#160;<span class="comment">// situations).</span></div><div class="line"><a name="l07775"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2e66f7dfc5cb87e0fa0289f653173c69"> 7775</a></span>&#160;<span class="preprocessor">#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \</span></div><div class="line"><a name="l07776"></a><span class="lineno"> 7776</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { statement; }</span></div><div class="line"><a name="l07777"></a><span class="lineno"> 7777</span>&#160;</div><div class="line"><a name="l07778"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3f71db93eaf30b0cfca9612b9ac32106"> 7778</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_THROW_(statement, expected_exception, fail) \</span></div><div class="line"><a name="l07779"></a><span class="lineno"> 7779</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l07780"></a><span class="lineno"> 7780</span>&#160;<span class="preprocessor"> if (::testing::internal::ConstCharPtr gtest_msg = &quot;&quot;) { \</span></div><div class="line"><a name="l07781"></a><span class="lineno"> 7781</span>&#160;<span class="preprocessor"> bool gtest_caught_expected = false; \</span></div><div class="line"><a name="l07782"></a><span class="lineno"> 7782</span>&#160;<span class="preprocessor"> try { \</span></div><div class="line"><a name="l07783"></a><span class="lineno"> 7783</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l07784"></a><span class="lineno"> 7784</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07785"></a><span class="lineno"> 7785</span>&#160;<span class="preprocessor"> catch (expected_exception const&amp;) { \</span></div><div class="line"><a name="l07786"></a><span class="lineno"> 7786</span>&#160;<span class="preprocessor"> gtest_caught_expected = true; \</span></div><div class="line"><a name="l07787"></a><span class="lineno"> 7787</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07788"></a><span class="lineno"> 7788</span>&#160;<span class="preprocessor"> catch (...) { \</span></div><div class="line"><a name="l07789"></a><span class="lineno"> 7789</span>&#160;<span class="preprocessor"> gtest_msg.value = \</span></div><div class="line"><a name="l07790"></a><span class="lineno"> 7790</span>&#160;<span class="preprocessor"> &quot;Expected: &quot; #statement &quot; throws an exception of type &quot; \</span></div><div class="line"><a name="l07791"></a><span class="lineno"> 7791</span>&#160;<span class="preprocessor"> #expected_exception &quot;.\n Actual: it throws a different type.&quot;; \</span></div><div class="line"><a name="l07792"></a><span class="lineno"> 7792</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \</span></div><div class="line"><a name="l07793"></a><span class="lineno"> 7793</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07794"></a><span class="lineno"> 7794</span>&#160;<span class="preprocessor"> if (!gtest_caught_expected) { \</span></div><div class="line"><a name="l07795"></a><span class="lineno"> 7795</span>&#160;<span class="preprocessor"> gtest_msg.value = \</span></div><div class="line"><a name="l07796"></a><span class="lineno"> 7796</span>&#160;<span class="preprocessor"> &quot;Expected: &quot; #statement &quot; throws an exception of type &quot; \</span></div><div class="line"><a name="l07797"></a><span class="lineno"> 7797</span>&#160;<span class="preprocessor"> #expected_exception &quot;.\n Actual: it throws nothing.&quot;; \</span></div><div class="line"><a name="l07798"></a><span class="lineno"> 7798</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \</span></div><div class="line"><a name="l07799"></a><span class="lineno"> 7799</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07800"></a><span class="lineno"> 7800</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l07801"></a><span class="lineno"> 7801</span>&#160;<span class="preprocessor"> GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \</span></div><div class="line"><a name="l07802"></a><span class="lineno"> 7802</span>&#160;<span class="preprocessor"> fail(gtest_msg.value)</span></div><div class="line"><a name="l07803"></a><span class="lineno"> 7803</span>&#160;</div><div class="line"><a name="l07804"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9a109d026b5a904646437d7570e13581"> 7804</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_NO_THROW_(statement, fail) \</span></div><div class="line"><a name="l07805"></a><span class="lineno"> 7805</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l07806"></a><span class="lineno"> 7806</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l07807"></a><span class="lineno"> 7807</span>&#160;<span class="preprocessor"> try { \</span></div><div class="line"><a name="l07808"></a><span class="lineno"> 7808</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l07809"></a><span class="lineno"> 7809</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07810"></a><span class="lineno"> 7810</span>&#160;<span class="preprocessor"> catch (...) { \</span></div><div class="line"><a name="l07811"></a><span class="lineno"> 7811</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \</span></div><div class="line"><a name="l07812"></a><span class="lineno"> 7812</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07813"></a><span class="lineno"> 7813</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l07814"></a><span class="lineno"> 7814</span>&#160;<span class="preprocessor"> GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \</span></div><div class="line"><a name="l07815"></a><span class="lineno"> 7815</span>&#160;<span class="preprocessor"> fail(&quot;Expected: &quot; #statement &quot; doesn&#39;t throw an exception.\n&quot; \</span></div><div class="line"><a name="l07816"></a><span class="lineno"> 7816</span>&#160;<span class="preprocessor"> &quot; Actual: it throws.&quot;)</span></div><div class="line"><a name="l07817"></a><span class="lineno"> 7817</span>&#160;</div><div class="line"><a name="l07818"></a><span class="lineno"><a class="line" href="gtest_8h.html#af48bbd26d54d4afc5e4cef39b1c76ba3"> 7818</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_ANY_THROW_(statement, fail) \</span></div><div class="line"><a name="l07819"></a><span class="lineno"> 7819</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l07820"></a><span class="lineno"> 7820</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l07821"></a><span class="lineno"> 7821</span>&#160;<span class="preprocessor"> bool gtest_caught_any = false; \</span></div><div class="line"><a name="l07822"></a><span class="lineno"> 7822</span>&#160;<span class="preprocessor"> try { \</span></div><div class="line"><a name="l07823"></a><span class="lineno"> 7823</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l07824"></a><span class="lineno"> 7824</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07825"></a><span class="lineno"> 7825</span>&#160;<span class="preprocessor"> catch (...) { \</span></div><div class="line"><a name="l07826"></a><span class="lineno"> 7826</span>&#160;<span class="preprocessor"> gtest_caught_any = true; \</span></div><div class="line"><a name="l07827"></a><span class="lineno"> 7827</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07828"></a><span class="lineno"> 7828</span>&#160;<span class="preprocessor"> if (!gtest_caught_any) { \</span></div><div class="line"><a name="l07829"></a><span class="lineno"> 7829</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \</span></div><div class="line"><a name="l07830"></a><span class="lineno"> 7830</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07831"></a><span class="lineno"> 7831</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l07832"></a><span class="lineno"> 7832</span>&#160;<span class="preprocessor"> GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \</span></div><div class="line"><a name="l07833"></a><span class="lineno"> 7833</span>&#160;<span class="preprocessor"> fail(&quot;Expected: &quot; #statement &quot; throws an exception.\n&quot; \</span></div><div class="line"><a name="l07834"></a><span class="lineno"> 7834</span>&#160;<span class="preprocessor"> &quot; Actual: it doesn&#39;t.&quot;)</span></div><div class="line"><a name="l07835"></a><span class="lineno"> 7835</span>&#160;</div><div class="line"><a name="l07836"></a><span class="lineno"> 7836</span>&#160;</div><div class="line"><a name="l07837"></a><span class="lineno"> 7837</span>&#160;<span class="comment">// Implements Boolean test assertions such as EXPECT_TRUE. expression can be</span></div><div class="line"><a name="l07838"></a><span class="lineno"> 7838</span>&#160;<span class="comment">// either a boolean expression or an AssertionResult. text is a textual</span></div><div class="line"><a name="l07839"></a><span class="lineno"> 7839</span>&#160;<span class="comment">// represenation of expression as it was passed into the EXPECT_TRUE.</span></div><div class="line"><a name="l07840"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae8912365e1d00a7a2bd248268c64aa1a"> 7840</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \</span></div><div class="line"><a name="l07841"></a><span class="lineno"> 7841</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l07842"></a><span class="lineno"> 7842</span>&#160;<span class="preprocessor"> if (const ::testing::AssertionResult gtest_ar_ = \</span></div><div class="line"><a name="l07843"></a><span class="lineno"> 7843</span>&#160;<span class="preprocessor"> ::testing::AssertionResult(expression)) \</span></div><div class="line"><a name="l07844"></a><span class="lineno"> 7844</span>&#160;<span class="preprocessor"> ; \</span></div><div class="line"><a name="l07845"></a><span class="lineno"> 7845</span>&#160;<span class="preprocessor"> else \</span></div><div class="line"><a name="l07846"></a><span class="lineno"> 7846</span>&#160;<span class="preprocessor"> fail(::testing::internal::GetBoolAssertionFailureMessage(\</span></div><div class="line"><a name="l07847"></a><span class="lineno"> 7847</span>&#160;<span class="preprocessor"> gtest_ar_, text, #actual, #expected).c_str())</span></div><div class="line"><a name="l07848"></a><span class="lineno"> 7848</span>&#160;</div><div class="line"><a name="l07849"></a><span class="lineno"><a class="line" href="gtest_8h.html#a1b37a3c446836d33040f3266a6236081"> 7849</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \</span></div><div class="line"><a name="l07850"></a><span class="lineno"> 7850</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l07851"></a><span class="lineno"> 7851</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l07852"></a><span class="lineno"> 7852</span>&#160;<span class="preprocessor"> ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \</span></div><div class="line"><a name="l07853"></a><span class="lineno"> 7853</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l07854"></a><span class="lineno"> 7854</span>&#160;<span class="preprocessor"> if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \</span></div><div class="line"><a name="l07855"></a><span class="lineno"> 7855</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \</span></div><div class="line"><a name="l07856"></a><span class="lineno"> 7856</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l07857"></a><span class="lineno"> 7857</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l07858"></a><span class="lineno"> 7858</span>&#160;<span class="preprocessor"> GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \</span></div><div class="line"><a name="l07859"></a><span class="lineno"> 7859</span>&#160;<span class="preprocessor"> fail(&quot;Expected: &quot; #statement &quot; doesn&#39;t generate new fatal &quot; \</span></div><div class="line"><a name="l07860"></a><span class="lineno"> 7860</span>&#160;<span class="preprocessor"> &quot;failures in the current thread.\n&quot; \</span></div><div class="line"><a name="l07861"></a><span class="lineno"> 7861</span>&#160;<span class="preprocessor"> &quot; Actual: it does.&quot;)</span></div><div class="line"><a name="l07862"></a><span class="lineno"> 7862</span>&#160;</div><div class="line"><a name="l07863"></a><span class="lineno"> 7863</span>&#160;<span class="comment">// Expands to the name of the class that implements the given test.</span></div><div class="line"><a name="l07864"></a><span class="lineno"><a class="line" href="gtest_8h.html#ad4bc4ec847a06e7de981e81c9bb116cf"> 7864</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \</span></div><div class="line"><a name="l07865"></a><span class="lineno"> 7865</span>&#160;<span class="preprocessor"> test_suite_name##_##test_name##_Test</span></div><div class="line"><a name="l07866"></a><span class="lineno"> 7866</span>&#160;</div><div class="line"><a name="l07867"></a><span class="lineno"> 7867</span>&#160;<span class="comment">// Helper macro for defining tests.</span></div><div class="line"><a name="l07868"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab43103f7842de04474e362689f782a46"> 7868</a></span>&#160;<span class="preprocessor">#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id) \</span></div><div class="line"><a name="l07869"></a><span class="lineno"> 7869</span>&#160;<span class="preprocessor"> class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \</span></div><div class="line"><a name="l07870"></a><span class="lineno"> 7870</span>&#160;<span class="preprocessor"> : public parent_class { \</span></div><div class="line"><a name="l07871"></a><span class="lineno"> 7871</span>&#160;<span class="preprocessor"> public: \</span></div><div class="line"><a name="l07872"></a><span class="lineno"> 7872</span>&#160;<span class="preprocessor"> GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \</span></div><div class="line"><a name="l07873"></a><span class="lineno"> 7873</span>&#160;<span class="preprocessor"> \</span></div><div class="line"><a name="l07874"></a><span class="lineno"> 7874</span>&#160;<span class="preprocessor"> private: \</span></div><div class="line"><a name="l07875"></a><span class="lineno"> 7875</span>&#160;<span class="preprocessor"> virtual void TestBody(); \</span></div><div class="line"><a name="l07876"></a><span class="lineno"> 7876</span>&#160;<span class="preprocessor"> static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_; \</span></div><div class="line"><a name="l07877"></a><span class="lineno"> 7877</span>&#160;<span class="preprocessor"> GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \</span></div><div class="line"><a name="l07878"></a><span class="lineno"> 7878</span>&#160;<span class="preprocessor"> test_name)); \</span></div><div class="line"><a name="l07879"></a><span class="lineno"> 7879</span>&#160;<span class="preprocessor"> }; \</span></div><div class="line"><a name="l07880"></a><span class="lineno"> 7880</span>&#160;<span class="preprocessor"> \</span></div><div class="line"><a name="l07881"></a><span class="lineno"> 7881</span>&#160;<span class="preprocessor"> ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name, \</span></div><div class="line"><a name="l07882"></a><span class="lineno"> 7882</span>&#160;<span class="preprocessor"> test_name)::test_info_ = \</span></div><div class="line"><a name="l07883"></a><span class="lineno"> 7883</span>&#160;<span class="preprocessor"> ::testing::internal::MakeAndRegisterTestInfo( \</span></div><div class="line"><a name="l07884"></a><span class="lineno"> 7884</span>&#160;<span class="preprocessor"> #test_suite_name, #test_name, nullptr, nullptr, \</span></div><div class="line"><a name="l07885"></a><span class="lineno"> 7885</span>&#160;<span class="preprocessor"> ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \</span></div><div class="line"><a name="l07886"></a><span class="lineno"> 7886</span>&#160;<span class="preprocessor"> ::testing::internal::SuiteApiResolver&lt; \</span></div><div class="line"><a name="l07887"></a><span class="lineno"> 7887</span>&#160;<span class="preprocessor"> parent_class&gt;::GetSetUpCaseOrSuite(), \</span></div><div class="line"><a name="l07888"></a><span class="lineno"> 7888</span>&#160;<span class="preprocessor"> ::testing::internal::SuiteApiResolver&lt; \</span></div><div class="line"><a name="l07889"></a><span class="lineno"> 7889</span>&#160;<span class="preprocessor"> parent_class&gt;::GetTearDownCaseOrSuite(), \</span></div><div class="line"><a name="l07890"></a><span class="lineno"> 7890</span>&#160;<span class="preprocessor"> new ::testing::internal::TestFactoryImpl&lt;GTEST_TEST_CLASS_NAME_( \</span></div><div class="line"><a name="l07891"></a><span class="lineno"> 7891</span>&#160;<span class="preprocessor"> test_suite_name, test_name)&gt;); \</span></div><div class="line"><a name="l07892"></a><span class="lineno"> 7892</span>&#160;<span class="preprocessor"> void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()</span></div><div class="line"><a name="l07893"></a><span class="lineno"> 7893</span>&#160;</div><div class="line"><a name="l07894"></a><span class="lineno"> 7894</span>&#160;<span class="comment">// Internal Macro to mark an API deprecated, for googletest usage only</span></div><div class="line"><a name="l07895"></a><span class="lineno"> 7895</span>&#160;<span class="comment">// Usage: class GTEST_INTERNAL_DEPRECATED(message) MyClass or</span></div><div class="line"><a name="l07896"></a><span class="lineno"> 7896</span>&#160;<span class="comment">// GTEST_INTERNAL_DEPRECATED(message) &lt;return_type&gt; myFunction(); Every usage of</span></div><div class="line"><a name="l07897"></a><span class="lineno"> 7897</span>&#160;<span class="comment">// a deprecated entity will trigger a warning when compiled with</span></div><div class="line"><a name="l07898"></a><span class="lineno"> 7898</span>&#160;<span class="comment">// `-Wdeprecated-declarations` option (clang, gcc, any __GNUC__ compiler).</span></div><div class="line"><a name="l07899"></a><span class="lineno"> 7899</span>&#160;<span class="comment">// For msvc /W3 option will need to be used</span></div><div class="line"><a name="l07900"></a><span class="lineno"> 7900</span>&#160;<span class="comment">// Note that for &#39;other&#39; compilers this macro evaluates to nothing to prevent</span></div><div class="line"><a name="l07901"></a><span class="lineno"> 7901</span>&#160;<span class="comment">// compilations errors.</span></div><div class="line"><a name="l07902"></a><span class="lineno"> 7902</span>&#160;<span class="preprocessor">#if defined(_MSC_VER)</span></div><div class="line"><a name="l07903"></a><span class="lineno"> 7903</span>&#160;<span class="preprocessor">#define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message))</span></div><div class="line"><a name="l07904"></a><span class="lineno"> 7904</span>&#160;<span class="preprocessor">#elif defined(__GNUC__)</span></div><div class="line"><a name="l07905"></a><span class="lineno"> 7905</span>&#160;<span class="preprocessor">#define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message)))</span></div><div class="line"><a name="l07906"></a><span class="lineno"> 7906</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l07907"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6aa594029905b65753d0e85f2db521ab"> 7907</a></span>&#160;<span class="preprocessor">#define GTEST_INTERNAL_DEPRECATED(message)</span></div><div class="line"><a name="l07908"></a><span class="lineno"> 7908</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l07909"></a><span class="lineno"> 7909</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_</span></div><div class="line"><a name="l07910"></a><span class="lineno"> 7910</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l07911"></a><span class="lineno"> 7911</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l07912"></a><span class="lineno"> 7912</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07913"></a><span class="lineno"> 7913</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l07914"></a><span class="lineno"> 7914</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l07915"></a><span class="lineno"> 7915</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l07916"></a><span class="lineno"> 7916</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07917"></a><span class="lineno"> 7917</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l07918"></a><span class="lineno"> 7918</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l07919"></a><span class="lineno"> 7919</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l07920"></a><span class="lineno"> 7920</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l07921"></a><span class="lineno"> 7921</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l07922"></a><span class="lineno"> 7922</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l07923"></a><span class="lineno"> 7923</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l07924"></a><span class="lineno"> 7924</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l07925"></a><span class="lineno"> 7925</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l07926"></a><span class="lineno"> 7926</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07927"></a><span class="lineno"> 7927</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l07928"></a><span class="lineno"> 7928</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l07929"></a><span class="lineno"> 7929</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l07930"></a><span class="lineno"> 7930</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l07931"></a><span class="lineno"> 7931</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l07932"></a><span class="lineno"> 7932</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l07933"></a><span class="lineno"> 7933</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l07934"></a><span class="lineno"> 7934</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l07935"></a><span class="lineno"> 7935</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l07936"></a><span class="lineno"> 7936</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l07937"></a><span class="lineno"> 7937</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l07938"></a><span class="lineno"> 7938</span>&#160;</div><div class="line"><a name="l07939"></a><span class="lineno"> 7939</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07940"></a><span class="lineno"> 7940</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l07941"></a><span class="lineno"> 7941</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07942"></a><span class="lineno"> 7942</span>&#160;<span class="comment">// This header file defines the public API for death tests. It is</span></div><div class="line"><a name="l07943"></a><span class="lineno"> 7943</span>&#160;<span class="comment">// #included by gtest.h so a user doesn&#39;t need to include this</span></div><div class="line"><a name="l07944"></a><span class="lineno"> 7944</span>&#160;<span class="comment">// directly.</span></div><div class="line"><a name="l07945"></a><span class="lineno"> 7945</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l07946"></a><span class="lineno"> 7946</span>&#160;</div><div class="line"><a name="l07947"></a><span class="lineno"> 7947</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_</span></div><div class="line"><a name="l07948"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9be22723f67d5ad4d6d26214a84a19f9"> 7948</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_</span></div><div class="line"><a name="l07949"></a><span class="lineno"> 7949</span>&#160;</div><div class="line"><a name="l07950"></a><span class="lineno"> 7950</span>&#160;<span class="comment">// Copyright 2005, Google Inc.</span></div><div class="line"><a name="l07951"></a><span class="lineno"> 7951</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l07952"></a><span class="lineno"> 7952</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07953"></a><span class="lineno"> 7953</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l07954"></a><span class="lineno"> 7954</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l07955"></a><span class="lineno"> 7955</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l07956"></a><span class="lineno"> 7956</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07957"></a><span class="lineno"> 7957</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l07958"></a><span class="lineno"> 7958</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l07959"></a><span class="lineno"> 7959</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l07960"></a><span class="lineno"> 7960</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l07961"></a><span class="lineno"> 7961</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l07962"></a><span class="lineno"> 7962</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l07963"></a><span class="lineno"> 7963</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l07964"></a><span class="lineno"> 7964</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l07965"></a><span class="lineno"> 7965</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l07966"></a><span class="lineno"> 7966</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07967"></a><span class="lineno"> 7967</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l07968"></a><span class="lineno"> 7968</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l07969"></a><span class="lineno"> 7969</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l07970"></a><span class="lineno"> 7970</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l07971"></a><span class="lineno"> 7971</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l07972"></a><span class="lineno"> 7972</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l07973"></a><span class="lineno"> 7973</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l07974"></a><span class="lineno"> 7974</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l07975"></a><span class="lineno"> 7975</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l07976"></a><span class="lineno"> 7976</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l07977"></a><span class="lineno"> 7977</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l07978"></a><span class="lineno"> 7978</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07979"></a><span class="lineno"> 7979</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l07980"></a><span class="lineno"> 7980</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07981"></a><span class="lineno"> 7981</span>&#160;<span class="comment">// This header file defines internal utilities needed for implementing</span></div><div class="line"><a name="l07982"></a><span class="lineno"> 7982</span>&#160;<span class="comment">// death tests. They are subject to change without notice.</span></div><div class="line"><a name="l07983"></a><span class="lineno"> 7983</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l07984"></a><span class="lineno"> 7984</span>&#160;</div><div class="line"><a name="l07985"></a><span class="lineno"> 7985</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_</span></div><div class="line"><a name="l07986"></a><span class="lineno"><a class="line" href="gtest_8h.html#a83e03f206a1c53a656f7eac87c122d16"> 7986</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_</span></div><div class="line"><a name="l07987"></a><span class="lineno"> 7987</span>&#160;</div><div class="line"><a name="l07988"></a><span class="lineno"> 7988</span>&#160;<span class="comment">// Copyright 2007, Google Inc.</span></div><div class="line"><a name="l07989"></a><span class="lineno"> 7989</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l07990"></a><span class="lineno"> 7990</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07991"></a><span class="lineno"> 7991</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l07992"></a><span class="lineno"> 7992</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l07993"></a><span class="lineno"> 7993</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l07994"></a><span class="lineno"> 7994</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l07995"></a><span class="lineno"> 7995</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l07996"></a><span class="lineno"> 7996</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l07997"></a><span class="lineno"> 7997</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l07998"></a><span class="lineno"> 7998</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l07999"></a><span class="lineno"> 7999</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l08000"></a><span class="lineno"> 8000</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l08001"></a><span class="lineno"> 8001</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l08002"></a><span class="lineno"> 8002</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l08003"></a><span class="lineno"> 8003</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l08004"></a><span class="lineno"> 8004</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08005"></a><span class="lineno"> 8005</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l08006"></a><span class="lineno"> 8006</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l08007"></a><span class="lineno"> 8007</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l08008"></a><span class="lineno"> 8008</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l08009"></a><span class="lineno"> 8009</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l08010"></a><span class="lineno"> 8010</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l08011"></a><span class="lineno"> 8011</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l08012"></a><span class="lineno"> 8012</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l08013"></a><span class="lineno"> 8013</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l08014"></a><span class="lineno"> 8014</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l08015"></a><span class="lineno"> 8015</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l08016"></a><span class="lineno"> 8016</span>&#160;</div><div class="line"><a name="l08017"></a><span class="lineno"> 8017</span>&#160;<span class="comment">// The Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l08018"></a><span class="lineno"> 8018</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08019"></a><span class="lineno"> 8019</span>&#160;<span class="comment">// This file implements just enough of the matcher interface to allow</span></div><div class="line"><a name="l08020"></a><span class="lineno"> 8020</span>&#160;<span class="comment">// EXPECT_DEATH and friends to accept a matcher argument.</span></div><div class="line"><a name="l08021"></a><span class="lineno"> 8021</span>&#160;</div><div class="line"><a name="l08022"></a><span class="lineno"> 8022</span>&#160;<span class="comment">// IWYU pragma: private, include &quot;testing/base/public/gunit.h&quot;</span></div><div class="line"><a name="l08023"></a><span class="lineno"> 8023</span>&#160;<span class="comment">// IWYU pragma: friend third_party/googletest/googlemock/.*</span></div><div class="line"><a name="l08024"></a><span class="lineno"> 8024</span>&#160;<span class="comment">// IWYU pragma: friend third_party/googletest/googletest/.*</span></div><div class="line"><a name="l08025"></a><span class="lineno"> 8025</span>&#160;</div><div class="line"><a name="l08026"></a><span class="lineno"> 8026</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_</span></div><div class="line"><a name="l08027"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac5d82b7725576c4a54ae99ce1cc861e0"> 8027</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_</span></div><div class="line"><a name="l08028"></a><span class="lineno"> 8028</span>&#160;</div><div class="line"><a name="l08029"></a><span class="lineno"> 8029</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l08030"></a><span class="lineno"> 8030</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div><div class="line"><a name="l08031"></a><span class="lineno"> 8031</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l08032"></a><span class="lineno"> 8032</span>&#160;</div><div class="line"><a name="l08033"></a><span class="lineno"> 8033</span>&#160;<span class="comment">// Copyright 2007, Google Inc.</span></div><div class="line"><a name="l08034"></a><span class="lineno"> 8034</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l08035"></a><span class="lineno"> 8035</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08036"></a><span class="lineno"> 8036</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l08037"></a><span class="lineno"> 8037</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l08038"></a><span class="lineno"> 8038</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l08039"></a><span class="lineno"> 8039</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08040"></a><span class="lineno"> 8040</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l08041"></a><span class="lineno"> 8041</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l08042"></a><span class="lineno"> 8042</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l08043"></a><span class="lineno"> 8043</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l08044"></a><span class="lineno"> 8044</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l08045"></a><span class="lineno"> 8045</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l08046"></a><span class="lineno"> 8046</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l08047"></a><span class="lineno"> 8047</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l08048"></a><span class="lineno"> 8048</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l08049"></a><span class="lineno"> 8049</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08050"></a><span class="lineno"> 8050</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l08051"></a><span class="lineno"> 8051</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l08052"></a><span class="lineno"> 8052</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l08053"></a><span class="lineno"> 8053</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l08054"></a><span class="lineno"> 8054</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l08055"></a><span class="lineno"> 8055</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l08056"></a><span class="lineno"> 8056</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l08057"></a><span class="lineno"> 8057</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l08058"></a><span class="lineno"> 8058</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l08059"></a><span class="lineno"> 8059</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l08060"></a><span class="lineno"> 8060</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l08061"></a><span class="lineno"> 8061</span>&#160;</div><div class="line"><a name="l08062"></a><span class="lineno"> 8062</span>&#160;</div><div class="line"><a name="l08063"></a><span class="lineno"> 8063</span>&#160;<span class="comment">// Google Test - The Google C++ Testing and Mocking Framework</span></div><div class="line"><a name="l08064"></a><span class="lineno"> 8064</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08065"></a><span class="lineno"> 8065</span>&#160;<span class="comment">// This file implements a universal value printer that can print a</span></div><div class="line"><a name="l08066"></a><span class="lineno"> 8066</span>&#160;<span class="comment">// value of any type T:</span></div><div class="line"><a name="l08067"></a><span class="lineno"> 8067</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08068"></a><span class="lineno"> 8068</span>&#160;<span class="comment">// void ::testing::internal::UniversalPrinter&lt;T&gt;::Print(value, ostream_ptr);</span></div><div class="line"><a name="l08069"></a><span class="lineno"> 8069</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08070"></a><span class="lineno"> 8070</span>&#160;<span class="comment">// A user can teach this function how to print a class type T by</span></div><div class="line"><a name="l08071"></a><span class="lineno"> 8071</span>&#160;<span class="comment">// defining either operator&lt;&lt;() or PrintTo() in the namespace that</span></div><div class="line"><a name="l08072"></a><span class="lineno"> 8072</span>&#160;<span class="comment">// defines T. More specifically, the FIRST defined function in the</span></div><div class="line"><a name="l08073"></a><span class="lineno"> 8073</span>&#160;<span class="comment">// following list will be used (assuming T is defined in namespace</span></div><div class="line"><a name="l08074"></a><span class="lineno"> 8074</span>&#160;<span class="comment">// foo):</span></div><div class="line"><a name="l08075"></a><span class="lineno"> 8075</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08076"></a><span class="lineno"> 8076</span>&#160;<span class="comment">// 1. foo::PrintTo(const T&amp;, ostream*)</span></div><div class="line"><a name="l08077"></a><span class="lineno"> 8077</span>&#160;<span class="comment">// 2. operator&lt;&lt;(ostream&amp;, const T&amp;) defined in either foo or the</span></div><div class="line"><a name="l08078"></a><span class="lineno"> 8078</span>&#160;<span class="comment">// global namespace.</span></div><div class="line"><a name="l08079"></a><span class="lineno"> 8079</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08080"></a><span class="lineno"> 8080</span>&#160;<span class="comment">// However if T is an STL-style container then it is printed element-wise</span></div><div class="line"><a name="l08081"></a><span class="lineno"> 8081</span>&#160;<span class="comment">// unless foo::PrintTo(const T&amp;, ostream*) is defined. Note that</span></div><div class="line"><a name="l08082"></a><span class="lineno"> 8082</span>&#160;<span class="comment">// operator&lt;&lt;() is ignored for container types.</span></div><div class="line"><a name="l08083"></a><span class="lineno"> 8083</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08084"></a><span class="lineno"> 8084</span>&#160;<span class="comment">// If none of the above is defined, it will print the debug string of</span></div><div class="line"><a name="l08085"></a><span class="lineno"> 8085</span>&#160;<span class="comment">// the value if it is a protocol buffer, or print the raw bytes in the</span></div><div class="line"><a name="l08086"></a><span class="lineno"> 8086</span>&#160;<span class="comment">// value otherwise.</span></div><div class="line"><a name="l08087"></a><span class="lineno"> 8087</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08088"></a><span class="lineno"> 8088</span>&#160;<span class="comment">// To aid debugging: when T is a reference type, the address of the</span></div><div class="line"><a name="l08089"></a><span class="lineno"> 8089</span>&#160;<span class="comment">// value is also printed; when T is a (const) char pointer, both the</span></div><div class="line"><a name="l08090"></a><span class="lineno"> 8090</span>&#160;<span class="comment">// pointer value and the NUL-terminated string it points to are</span></div><div class="line"><a name="l08091"></a><span class="lineno"> 8091</span>&#160;<span class="comment">// printed.</span></div><div class="line"><a name="l08092"></a><span class="lineno"> 8092</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08093"></a><span class="lineno"> 8093</span>&#160;<span class="comment">// We also provide some convenient wrappers:</span></div><div class="line"><a name="l08094"></a><span class="lineno"> 8094</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08095"></a><span class="lineno"> 8095</span>&#160;<span class="comment">// // Prints a value to a string. For a (const or not) char</span></div><div class="line"><a name="l08096"></a><span class="lineno"> 8096</span>&#160;<span class="comment">// // pointer, the NUL-terminated string (but not the pointer) is</span></div><div class="line"><a name="l08097"></a><span class="lineno"> 8097</span>&#160;<span class="comment">// // printed.</span></div><div class="line"><a name="l08098"></a><span class="lineno"> 8098</span>&#160;<span class="comment">// std::string ::testing::PrintToString(const T&amp; value);</span></div><div class="line"><a name="l08099"></a><span class="lineno"> 8099</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08100"></a><span class="lineno"> 8100</span>&#160;<span class="comment">// // Prints a value tersely: for a reference type, the referenced</span></div><div class="line"><a name="l08101"></a><span class="lineno"> 8101</span>&#160;<span class="comment">// // value (but not the address) is printed; for a (const or not) char</span></div><div class="line"><a name="l08102"></a><span class="lineno"> 8102</span>&#160;<span class="comment">// // pointer, the NUL-terminated string (but not the pointer) is</span></div><div class="line"><a name="l08103"></a><span class="lineno"> 8103</span>&#160;<span class="comment">// // printed.</span></div><div class="line"><a name="l08104"></a><span class="lineno"> 8104</span>&#160;<span class="comment">// void ::testing::internal::UniversalTersePrint(const T&amp; value, ostream*);</span></div><div class="line"><a name="l08105"></a><span class="lineno"> 8105</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08106"></a><span class="lineno"> 8106</span>&#160;<span class="comment">// // Prints value using the type inferred by the compiler. The difference</span></div><div class="line"><a name="l08107"></a><span class="lineno"> 8107</span>&#160;<span class="comment">// // from UniversalTersePrint() is that this function prints both the</span></div><div class="line"><a name="l08108"></a><span class="lineno"> 8108</span>&#160;<span class="comment">// // pointer and the NUL-terminated string for a (const or not) char pointer.</span></div><div class="line"><a name="l08109"></a><span class="lineno"> 8109</span>&#160;<span class="comment">// void ::testing::internal::UniversalPrint(const T&amp; value, ostream*);</span></div><div class="line"><a name="l08110"></a><span class="lineno"> 8110</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08111"></a><span class="lineno"> 8111</span>&#160;<span class="comment">// // Prints the fields of a tuple tersely to a string vector, one</span></div><div class="line"><a name="l08112"></a><span class="lineno"> 8112</span>&#160;<span class="comment">// // element for each field. Tuple support must be enabled in</span></div><div class="line"><a name="l08113"></a><span class="lineno"> 8113</span>&#160;<span class="comment">// // gtest-port.h.</span></div><div class="line"><a name="l08114"></a><span class="lineno"> 8114</span>&#160;<span class="comment">// std::vector&lt;string&gt; UniversalTersePrintTupleFieldsToStrings(</span></div><div class="line"><a name="l08115"></a><span class="lineno"> 8115</span>&#160;<span class="comment">// const Tuple&amp; value);</span></div><div class="line"><a name="l08116"></a><span class="lineno"> 8116</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08117"></a><span class="lineno"> 8117</span>&#160;<span class="comment">// Known limitation:</span></div><div class="line"><a name="l08118"></a><span class="lineno"> 8118</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08119"></a><span class="lineno"> 8119</span>&#160;<span class="comment">// The print primitives print the elements of an STL-style container</span></div><div class="line"><a name="l08120"></a><span class="lineno"> 8120</span>&#160;<span class="comment">// using the compiler-inferred type of *iter where iter is a</span></div><div class="line"><a name="l08121"></a><span class="lineno"> 8121</span>&#160;<span class="comment">// const_iterator of the container. When const_iterator is an input</span></div><div class="line"><a name="l08122"></a><span class="lineno"> 8122</span>&#160;<span class="comment">// iterator but not a forward iterator, this inferred type may not</span></div><div class="line"><a name="l08123"></a><span class="lineno"> 8123</span>&#160;<span class="comment">// match value_type, and the print output may be incorrect. In</span></div><div class="line"><a name="l08124"></a><span class="lineno"> 8124</span>&#160;<span class="comment">// practice, this is rarely a problem as for most containers</span></div><div class="line"><a name="l08125"></a><span class="lineno"> 8125</span>&#160;<span class="comment">// const_iterator is a forward iterator. We&#39;ll fix this if there&#39;s an</span></div><div class="line"><a name="l08126"></a><span class="lineno"> 8126</span>&#160;<span class="comment">// actual need for it. Note that this fix cannot rely on value_type</span></div><div class="line"><a name="l08127"></a><span class="lineno"> 8127</span>&#160;<span class="comment">// being defined as many user-defined container types don&#39;t have</span></div><div class="line"><a name="l08128"></a><span class="lineno"> 8128</span>&#160;<span class="comment">// value_type.</span></div><div class="line"><a name="l08129"></a><span class="lineno"> 8129</span>&#160;</div><div class="line"><a name="l08130"></a><span class="lineno"> 8130</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l08131"></a><span class="lineno"> 8131</span>&#160;</div><div class="line"><a name="l08132"></a><span class="lineno"> 8132</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l08133"></a><span class="lineno"><a class="line" href="gtest_8h.html#a146e4a81159ecfdc33030e147a024346"> 8133</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l08134"></a><span class="lineno"> 8134</span>&#160;</div><div class="line"><a name="l08135"></a><span class="lineno"> 8135</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l08136"></a><span class="lineno"> 8136</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span> <span class="comment">// NOLINT</span></div><div class="line"><a name="l08137"></a><span class="lineno"> 8137</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l08138"></a><span class="lineno"> 8138</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l08139"></a><span class="lineno"> 8139</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div><div class="line"><a name="l08140"></a><span class="lineno"> 8140</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l08141"></a><span class="lineno"> 8141</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l08142"></a><span class="lineno"> 8142</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l08143"></a><span class="lineno"> 8143</span>&#160;</div><div class="line"><a name="l08144"></a><span class="lineno"> 8144</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08145"></a><span class="lineno"> 8145</span>&#160;<span class="preprocessor">#include &quot;absl/strings/string_view.h&quot;</span></div><div class="line"><a name="l08146"></a><span class="lineno"> 8146</span>&#160;<span class="preprocessor">#include &quot;absl/types/optional.h&quot;</span></div><div class="line"><a name="l08147"></a><span class="lineno"> 8147</span>&#160;<span class="preprocessor">#include &quot;absl/types/variant.h&quot;</span></div><div class="line"><a name="l08148"></a><span class="lineno"> 8148</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_ABSL</span></div><div class="line"><a name="l08149"></a><span class="lineno"> 8149</span>&#160;</div><div class="line"><a name="l08150"></a><span class="lineno"> 8150</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l08151"></a><span class="lineno"> 8151</span>&#160;</div><div class="line"><a name="l08152"></a><span class="lineno"> 8152</span>&#160;<span class="comment">// Definitions in the &#39;internal&#39; and &#39;internal2&#39; name spaces are</span></div><div class="line"><a name="l08153"></a><span class="lineno"> 8153</span>&#160;<span class="comment">// subject to change without notice. DO NOT USE THEM IN USER CODE!</span></div><div class="line"><a name="l08154"></a><span class="lineno"> 8154</span>&#160;<span class="keyword">namespace </span>internal2 {</div><div class="line"><a name="l08155"></a><span class="lineno"> 8155</span>&#160;</div><div class="line"><a name="l08156"></a><span class="lineno"> 8156</span>&#160;<span class="comment">// Prints the given number of bytes in the given object to the given</span></div><div class="line"><a name="l08157"></a><span class="lineno"> 8157</span>&#160;<span class="comment">// ostream.</span></div><div class="line"><a name="l08158"></a><span class="lineno"> 8158</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal2.html#abfb9aa80365f93b952e9a4bea09947a8">PrintBytesInObjectTo</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* obj_bytes,</div><div class="line"><a name="l08159"></a><span class="lineno"> 8159</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>,</div><div class="line"><a name="l08160"></a><span class="lineno"> 8160</span>&#160; ::std::ostream* os);</div><div class="line"><a name="l08161"></a><span class="lineno"> 8161</span>&#160;</div><div class="line"><a name="l08162"></a><span class="lineno"> 8162</span>&#160;<span class="comment">// For selecting which printer to use when a given type has neither &lt;&lt;</span></div><div class="line"><a name="l08163"></a><span class="lineno"> 8163</span>&#160;<span class="comment">// nor PrintTo().</span></div><div class="line"><a name="l08164"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57"> 8164</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57">TypeKind</a> {</div><div class="line"><a name="l08165"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383"> 8165</a></span>&#160; <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383">kProtobuf</a>, <span class="comment">// a protobuf type</span></div><div class="line"><a name="l08166"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224"> 8166</a></span>&#160; <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224">kConvertibleToInteger</a>, <span class="comment">// a type implicitly convertible to BiggestInt</span></div><div class="line"><a name="l08167"></a><span class="lineno"> 8167</span>&#160; <span class="comment">// (e.g. a named or unnamed enum type)</span></div><div class="line"><a name="l08168"></a><span class="lineno"> 8168</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08169"></a><span class="lineno"> 8169</span>&#160; kConvertibleToStringView, <span class="comment">// a type implicitly convertible to</span></div><div class="line"><a name="l08170"></a><span class="lineno"> 8170</span>&#160; <span class="comment">// absl::string_view</span></div><div class="line"><a name="l08171"></a><span class="lineno"> 8171</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08172"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57abe8aaea44751d6ebd0cdf5bd94451db1"> 8172</a></span>&#160; <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57abe8aaea44751d6ebd0cdf5bd94451db1">kOtherType</a> <span class="comment">// anything else</span></div><div class="line"><a name="l08173"></a><span class="lineno"> 8173</span>&#160;};</div><div class="line"><a name="l08174"></a><span class="lineno"> 8174</span>&#160;</div><div class="line"><a name="l08175"></a><span class="lineno"> 8175</span>&#160;<span class="comment">// TypeWithoutFormatter&lt;T, kTypeKind&gt;::PrintValue(value, os) is called</span></div><div class="line"><a name="l08176"></a><span class="lineno"> 8176</span>&#160;<span class="comment">// by the universal printer to print a value of type T when neither</span></div><div class="line"><a name="l08177"></a><span class="lineno"> 8177</span>&#160;<span class="comment">// operator&lt;&lt; nor PrintTo() is defined for T, where kTypeKind is the</span></div><div class="line"><a name="l08178"></a><span class="lineno"> 8178</span>&#160;<span class="comment">// &quot;kind&quot; of T as defined by enum TypeKind.</span></div><div class="line"><a name="l08179"></a><span class="lineno"> 8179</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, TypeKind kTypeKind&gt;</div><div class="line"><a name="l08180"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter.html"> 8180</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html">TypeWithoutFormatter</a> {</div><div class="line"><a name="l08181"></a><span class="lineno"> 8181</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08182"></a><span class="lineno"> 8182</span>&#160; <span class="comment">// This default version is called when kTypeKind is kOtherType.</span></div><div class="line"><a name="l08183"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter.html#a6651f6f7be2c0f899729eeb6038f76d3"> 8183</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html#a6651f6f7be2c0f899729eeb6038f76d3">PrintValue</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08184"></a><span class="lineno"> 8184</span>&#160; <a class="code" href="namespacetesting_1_1internal2.html#abfb9aa80365f93b952e9a4bea09947a8">PrintBytesInObjectTo</a>(static_cast&lt;const unsigned char*&gt;(</div><div class="line"><a name="l08185"></a><span class="lineno"> 8185</span>&#160; reinterpret_cast&lt;const void*&gt;(&amp;value)),</div><div class="line"><a name="l08186"></a><span class="lineno"> 8186</span>&#160; <span class="keyword">sizeof</span>(value), os);</div><div class="line"><a name="l08187"></a><span class="lineno"> 8187</span>&#160; }</div><div class="line"><a name="l08188"></a><span class="lineno"> 8188</span>&#160;};</div><div class="line"><a name="l08189"></a><span class="lineno"> 8189</span>&#160;</div><div class="line"><a name="l08190"></a><span class="lineno"> 8190</span>&#160;<span class="comment">// We print a protobuf using its ShortDebugString() when the string</span></div><div class="line"><a name="l08191"></a><span class="lineno"> 8191</span>&#160;<span class="comment">// doesn&#39;t exceed this many characters; otherwise we print it using</span></div><div class="line"><a name="l08192"></a><span class="lineno"> 8192</span>&#160;<span class="comment">// DebugString() for better readability.</span></div><div class="line"><a name="l08193"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#a140c8efd51e63a3def98445bff107518"> 8193</a></span>&#160;<span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="namespacetesting_1_1internal2.html#a140c8efd51e63a3def98445bff107518">kProtobufOneLinerMaxLength</a> = 50;</div><div class="line"><a name="l08194"></a><span class="lineno"> 8194</span>&#160;</div><div class="line"><a name="l08195"></a><span class="lineno"> 8195</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08196"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_protobuf_01_4.html"> 8196</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html">TypeWithoutFormatter</a>&lt;T, <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383">kProtobuf</a>&gt; {</div><div class="line"><a name="l08197"></a><span class="lineno"> 8197</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08198"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_protobuf_01_4.html#ac96fb775dc776f02da9a671ea0e04599"> 8198</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_protobuf_01_4.html#ac96fb775dc776f02da9a671ea0e04599">PrintValue</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08199"></a><span class="lineno"> 8199</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> pretty_str = value.ShortDebugString();</div><div class="line"><a name="l08200"></a><span class="lineno"> 8200</span>&#160; <span class="keywordflow">if</span> (pretty_str.length() &gt; <a class="code" href="namespacetesting_1_1internal2.html#a140c8efd51e63a3def98445bff107518">kProtobufOneLinerMaxLength</a>) {</div><div class="line"><a name="l08201"></a><span class="lineno"> 8201</span>&#160; pretty_str = <span class="stringliteral">&quot;\n&quot;</span> + value.DebugString();</div><div class="line"><a name="l08202"></a><span class="lineno"> 8202</span>&#160; }</div><div class="line"><a name="l08203"></a><span class="lineno"> 8203</span>&#160; *os &lt;&lt; (<span class="stringliteral">&quot;&lt;&quot;</span> + pretty_str + <span class="stringliteral">&quot;&gt;&quot;</span>);</div><div class="line"><a name="l08204"></a><span class="lineno"> 8204</span>&#160; }</div><div class="line"><a name="l08205"></a><span class="lineno"> 8205</span>&#160;};</div><div class="line"><a name="l08206"></a><span class="lineno"> 8206</span>&#160;</div><div class="line"><a name="l08207"></a><span class="lineno"> 8207</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08208"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_convertible_to_integer_01_4.html"> 8208</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html">TypeWithoutFormatter</a>&lt;T, <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224">kConvertibleToInteger</a>&gt; {</div><div class="line"><a name="l08209"></a><span class="lineno"> 8209</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08210"></a><span class="lineno"> 8210</span>&#160; <span class="comment">// Since T has no &lt;&lt; operator or PrintTo() but can be implicitly</span></div><div class="line"><a name="l08211"></a><span class="lineno"> 8211</span>&#160; <span class="comment">// converted to BiggestInt, we print it as a BiggestInt.</span></div><div class="line"><a name="l08212"></a><span class="lineno"> 8212</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08213"></a><span class="lineno"> 8213</span>&#160; <span class="comment">// Most likely T is an enum type (either named or unnamed), in which</span></div><div class="line"><a name="l08214"></a><span class="lineno"> 8214</span>&#160; <span class="comment">// case printing it as an integer is the desired behavior. In case</span></div><div class="line"><a name="l08215"></a><span class="lineno"> 8215</span>&#160; <span class="comment">// T is not an enum, printing it as an integer is the best we can do</span></div><div class="line"><a name="l08216"></a><span class="lineno"> 8216</span>&#160; <span class="comment">// given that it has no user-defined printer.</span></div><div class="line"><a name="l08217"></a><span class="lineno"><a class="line" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_convertible_to_integer_01_4.html#ab27a411afb608e730a57d232b3f4f486"> 8217</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_convertible_to_integer_01_4.html#ab27a411afb608e730a57d232b3f4f486">PrintValue</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08218"></a><span class="lineno"> 8218</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">internal::BiggestInt</a> kBigInt = value;</div><div class="line"><a name="l08219"></a><span class="lineno"> 8219</span>&#160; *os &lt;&lt; kBigInt;</div><div class="line"><a name="l08220"></a><span class="lineno"> 8220</span>&#160; }</div><div class="line"><a name="l08221"></a><span class="lineno"> 8221</span>&#160;};</div><div class="line"><a name="l08222"></a><span class="lineno"> 8222</span>&#160;</div><div class="line"><a name="l08223"></a><span class="lineno"> 8223</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08224"></a><span class="lineno"> 8224</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08225"></a><span class="lineno"> 8225</span>&#160;<span class="keyword">class </span>TypeWithoutFormatter&lt;T, kConvertibleToStringView&gt; {</div><div class="line"><a name="l08226"></a><span class="lineno"> 8226</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08227"></a><span class="lineno"> 8227</span>&#160; <span class="comment">// Since T has neither operator&lt;&lt; nor PrintTo() but can be implicitly</span></div><div class="line"><a name="l08228"></a><span class="lineno"> 8228</span>&#160; <span class="comment">// converted to absl::string_view, we print it as a absl::string_view.</span></div><div class="line"><a name="l08229"></a><span class="lineno"> 8229</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08230"></a><span class="lineno"> 8230</span>&#160; <span class="comment">// Note: the implementation is further below, as it depends on</span></div><div class="line"><a name="l08231"></a><span class="lineno"> 8231</span>&#160; <span class="comment">// internal::PrintTo symbol which is defined later in the file.</span></div><div class="line"><a name="l08232"></a><span class="lineno"> 8232</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html#a6651f6f7be2c0f899729eeb6038f76d3">PrintValue</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os);</div><div class="line"><a name="l08233"></a><span class="lineno"> 8233</span>&#160;};</div><div class="line"><a name="l08234"></a><span class="lineno"> 8234</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08235"></a><span class="lineno"> 8235</span>&#160;</div><div class="line"><a name="l08236"></a><span class="lineno"> 8236</span>&#160;<span class="comment">// Prints the given value to the given ostream. If the value is a</span></div><div class="line"><a name="l08237"></a><span class="lineno"> 8237</span>&#160;<span class="comment">// protocol message, its debug string is printed; if it&#39;s an enum or</span></div><div class="line"><a name="l08238"></a><span class="lineno"> 8238</span>&#160;<span class="comment">// of a type implicitly convertible to BiggestInt, it&#39;s printed as an</span></div><div class="line"><a name="l08239"></a><span class="lineno"> 8239</span>&#160;<span class="comment">// integer; otherwise the bytes in the value are printed. This is</span></div><div class="line"><a name="l08240"></a><span class="lineno"> 8240</span>&#160;<span class="comment">// what UniversalPrinter&lt;T&gt;::Print() does when it knows nothing about</span></div><div class="line"><a name="l08241"></a><span class="lineno"> 8241</span>&#160;<span class="comment">// type T and T has neither &lt;&lt; operator nor PrintTo().</span></div><div class="line"><a name="l08242"></a><span class="lineno"> 8242</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08243"></a><span class="lineno"> 8243</span>&#160;<span class="comment">// A user can override this behavior for a class type Foo by defining</span></div><div class="line"><a name="l08244"></a><span class="lineno"> 8244</span>&#160;<span class="comment">// a &lt;&lt; operator in the namespace where Foo is defined.</span></div><div class="line"><a name="l08245"></a><span class="lineno"> 8245</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08246"></a><span class="lineno"> 8246</span>&#160;<span class="comment">// We put this operator in namespace &#39;internal2&#39; instead of &#39;internal&#39;</span></div><div class="line"><a name="l08247"></a><span class="lineno"> 8247</span>&#160;<span class="comment">// to simplify the implementation, as much code in &#39;internal&#39; needs to</span></div><div class="line"><a name="l08248"></a><span class="lineno"> 8248</span>&#160;<span class="comment">// use &lt;&lt; in STL, which would conflict with our own &lt;&lt; were it defined</span></div><div class="line"><a name="l08249"></a><span class="lineno"> 8249</span>&#160;<span class="comment">// in &#39;internal&#39;.</span></div><div class="line"><a name="l08250"></a><span class="lineno"> 8250</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08251"></a><span class="lineno"> 8251</span>&#160;<span class="comment">// Note that this operator&lt;&lt; takes a generic std::basic_ostream&lt;Char,</span></div><div class="line"><a name="l08252"></a><span class="lineno"> 8252</span>&#160;<span class="comment">// CharTraits&gt; type instead of the more restricted std::ostream. If</span></div><div class="line"><a name="l08253"></a><span class="lineno"> 8253</span>&#160;<span class="comment">// we define it to take an std::ostream instead, we&#39;ll get an</span></div><div class="line"><a name="l08254"></a><span class="lineno"> 8254</span>&#160;<span class="comment">// &quot;ambiguous overloads&quot; compiler error when trying to print a type</span></div><div class="line"><a name="l08255"></a><span class="lineno"> 8255</span>&#160;<span class="comment">// Foo that supports streaming to std::basic_ostream&lt;Char,</span></div><div class="line"><a name="l08256"></a><span class="lineno"> 8256</span>&#160;<span class="comment">// CharTraits&gt;, as the compiler cannot tell whether</span></div><div class="line"><a name="l08257"></a><span class="lineno"> 8257</span>&#160;<span class="comment">// operator&lt;&lt;(std::ostream&amp;, const T&amp;) or</span></div><div class="line"><a name="l08258"></a><span class="lineno"> 8258</span>&#160;<span class="comment">// operator&lt;&lt;(std::basic_stream&lt;Char, CharTraits&gt;, const Foo&amp;) is more</span></div><div class="line"><a name="l08259"></a><span class="lineno"> 8259</span>&#160;<span class="comment">// specific.</span></div><div class="line"><a name="l08260"></a><span class="lineno"> 8260</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Char, <span class="keyword">typename</span> CharTraits, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08261"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b"> 8261</a></span>&#160;::std::basic_ostream&lt;Char, CharTraits&gt;&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator&lt;&lt;</a>(</div><div class="line"><a name="l08262"></a><span class="lineno"> 8262</span>&#160; ::std::basic_ostream&lt;Char, CharTraits&gt;&amp; os, <span class="keyword">const</span> T&amp; x) {</div><div class="line"><a name="l08263"></a><span class="lineno"> 8263</span>&#160; <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html">TypeWithoutFormatter&lt;T, (internal::IsAProtocolMessage&lt;T&gt;::value</a></div><div class="line"><a name="l08264"></a><span class="lineno"> 8264</span>&#160; ? <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383">kProtobuf</a></div><div class="line"><a name="l08265"></a><span class="lineno"> 8265</span>&#160; : <a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html">internal::ImplicitlyConvertible</a>&lt;</div><div class="line"><a name="l08266"></a><span class="lineno"> 8266</span>&#160; <span class="keyword">const</span> T&amp;, <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">internal::BiggestInt</a>&gt;::value</div><div class="line"><a name="l08267"></a><span class="lineno"> 8267</span>&#160; ? <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224">kConvertibleToInteger</a></div><div class="line"><a name="l08268"></a><span class="lineno"> 8268</span>&#160; :</div><div class="line"><a name="l08269"></a><span class="lineno"> 8269</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08270"></a><span class="lineno"> 8270</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_implicitly_convertible.html">internal::ImplicitlyConvertible</a>&lt;</div><div class="line"><a name="l08271"></a><span class="lineno"> 8271</span>&#160; <span class="keyword">const</span> T&amp;, absl::string_view&gt;::value</div><div class="line"><a name="l08272"></a><span class="lineno"> 8272</span>&#160; ? kConvertibleToStringView</div><div class="line"><a name="l08273"></a><span class="lineno"> 8273</span>&#160; :</div><div class="line"><a name="l08274"></a><span class="lineno"> 8274</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08275"></a><span class="lineno"> 8275</span>&#160; <a class="code" href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57abe8aaea44751d6ebd0cdf5bd94451db1">kOtherType</a>)&gt;::PrintValue(x, &amp;os);</div><div class="line"><a name="l08276"></a><span class="lineno"> 8276</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l08277"></a><span class="lineno"> 8277</span>&#160;}</div><div class="line"><a name="l08278"></a><span class="lineno"> 8278</span>&#160;</div><div class="line"><a name="l08279"></a><span class="lineno"> 8279</span>&#160;} <span class="comment">// namespace internal2</span></div><div class="line"><a name="l08280"></a><span class="lineno"> 8280</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l08281"></a><span class="lineno"> 8281</span>&#160;</div><div class="line"><a name="l08282"></a><span class="lineno"> 8282</span>&#160;<span class="comment">// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up</span></div><div class="line"><a name="l08283"></a><span class="lineno"> 8283</span>&#160;<span class="comment">// magic needed for implementing UniversalPrinter won&#39;t work.</span></div><div class="line"><a name="l08284"></a><span class="lineno"><a class="line" href="namespacetesting__internal.html"> 8284</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting__internal.html">testing_internal</a> {</div><div class="line"><a name="l08285"></a><span class="lineno"> 8285</span>&#160;</div><div class="line"><a name="l08286"></a><span class="lineno"> 8286</span>&#160;<span class="comment">// Used to print a value that is not an STL-style container when the</span></div><div class="line"><a name="l08287"></a><span class="lineno"> 8287</span>&#160;<span class="comment">// user doesn&#39;t define PrintTo() for it.</span></div><div class="line"><a name="l08288"></a><span class="lineno"> 8288</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08289"></a><span class="lineno"><a class="line" href="namespacetesting__internal.html#a3f49d3d0c996242f9d383c850097a656"> 8289</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting__internal.html#a3f49d3d0c996242f9d383c850097a656">DefaultPrintNonContainerTo</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08290"></a><span class="lineno"> 8290</span>&#160; <span class="comment">// With the following statement, during unqualified name lookup,</span></div><div class="line"><a name="l08291"></a><span class="lineno"> 8291</span>&#160; <span class="comment">// testing::internal2::operator&lt;&lt; appears as if it was declared in</span></div><div class="line"><a name="l08292"></a><span class="lineno"> 8292</span>&#160; <span class="comment">// the nearest enclosing namespace that contains both</span></div><div class="line"><a name="l08293"></a><span class="lineno"> 8293</span>&#160; <span class="comment">// ::testing_internal and ::testing::internal2, i.e. the global</span></div><div class="line"><a name="l08294"></a><span class="lineno"> 8294</span>&#160; <span class="comment">// namespace. For more details, refer to the C++ Standard section</span></div><div class="line"><a name="l08295"></a><span class="lineno"> 8295</span>&#160; <span class="comment">// 7.3.4-1 [namespace.udir]. This allows us to fall back onto</span></div><div class="line"><a name="l08296"></a><span class="lineno"> 8296</span>&#160; <span class="comment">// testing::internal2::operator&lt;&lt; in case T doesn&#39;t come with a &lt;&lt;</span></div><div class="line"><a name="l08297"></a><span class="lineno"> 8297</span>&#160; <span class="comment">// operator.</span></div><div class="line"><a name="l08298"></a><span class="lineno"> 8298</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08299"></a><span class="lineno"> 8299</span>&#160; <span class="comment">// We cannot write &#39;using ::testing::internal2::operator&lt;&lt;;&#39;, which</span></div><div class="line"><a name="l08300"></a><span class="lineno"> 8300</span>&#160; <span class="comment">// gcc 3.3 fails to compile due to a compiler bug.</span></div><div class="line"><a name="l08301"></a><span class="lineno"> 8301</span>&#160; <span class="keyword">using namespace </span>::<a class="code" href="namespacetesting_1_1internal2.html">testing::internal2</a>; <span class="comment">// NOLINT</span></div><div class="line"><a name="l08302"></a><span class="lineno"> 8302</span>&#160;</div><div class="line"><a name="l08303"></a><span class="lineno"> 8303</span>&#160; <span class="comment">// Assuming T is defined in namespace foo, in the next statement,</span></div><div class="line"><a name="l08304"></a><span class="lineno"> 8304</span>&#160; <span class="comment">// the compiler will consider all of:</span></div><div class="line"><a name="l08305"></a><span class="lineno"> 8305</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08306"></a><span class="lineno"> 8306</span>&#160; <span class="comment">// 1. foo::operator&lt;&lt; (thanks to Koenig look-up),</span></div><div class="line"><a name="l08307"></a><span class="lineno"> 8307</span>&#160; <span class="comment">// 2. ::operator&lt;&lt; (as the current namespace is enclosed in ::),</span></div><div class="line"><a name="l08308"></a><span class="lineno"> 8308</span>&#160; <span class="comment">// 3. testing::internal2::operator&lt;&lt; (thanks to the using statement above).</span></div><div class="line"><a name="l08309"></a><span class="lineno"> 8309</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08310"></a><span class="lineno"> 8310</span>&#160; <span class="comment">// The operator&lt;&lt; whose type matches T best will be picked.</span></div><div class="line"><a name="l08311"></a><span class="lineno"> 8311</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08312"></a><span class="lineno"> 8312</span>&#160; <span class="comment">// We deliberately allow #2 to be a candidate, as sometimes it&#39;s</span></div><div class="line"><a name="l08313"></a><span class="lineno"> 8313</span>&#160; <span class="comment">// impossible to define #1 (e.g. when foo is ::std, defining</span></div><div class="line"><a name="l08314"></a><span class="lineno"> 8314</span>&#160; <span class="comment">// anything in it is undefined behavior unless you are a compiler</span></div><div class="line"><a name="l08315"></a><span class="lineno"> 8315</span>&#160; <span class="comment">// vendor.).</span></div><div class="line"><a name="l08316"></a><span class="lineno"> 8316</span>&#160; *os &lt;&lt; value;</div><div class="line"><a name="l08317"></a><span class="lineno"> 8317</span>&#160;}</div><div class="line"><a name="l08318"></a><span class="lineno"> 8318</span>&#160;</div><div class="line"><a name="l08319"></a><span class="lineno"> 8319</span>&#160;} <span class="comment">// namespace testing_internal</span></div><div class="line"><a name="l08320"></a><span class="lineno"> 8320</span>&#160;</div><div class="line"><a name="l08321"></a><span class="lineno"> 8321</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l08322"></a><span class="lineno"> 8322</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l08323"></a><span class="lineno"> 8323</span>&#160;</div><div class="line"><a name="l08324"></a><span class="lineno"> 8324</span>&#160;<span class="comment">// FormatForComparison&lt;ToPrint, OtherOperand&gt;::Format(value) formats a</span></div><div class="line"><a name="l08325"></a><span class="lineno"> 8325</span>&#160;<span class="comment">// value of type ToPrint that is an operand of a comparison assertion</span></div><div class="line"><a name="l08326"></a><span class="lineno"> 8326</span>&#160;<span class="comment">// (e.g. ASSERT_EQ). OtherOperand is the type of the other operand in</span></div><div class="line"><a name="l08327"></a><span class="lineno"> 8327</span>&#160;<span class="comment">// the comparison, and is used to help determine the best way to</span></div><div class="line"><a name="l08328"></a><span class="lineno"> 8328</span>&#160;<span class="comment">// format the value. In particular, when the value is a C string</span></div><div class="line"><a name="l08329"></a><span class="lineno"> 8329</span>&#160;<span class="comment">// (char pointer) and the other operand is an STL string object, we</span></div><div class="line"><a name="l08330"></a><span class="lineno"> 8330</span>&#160;<span class="comment">// want to format the C string as a string, since we know it is</span></div><div class="line"><a name="l08331"></a><span class="lineno"> 8331</span>&#160;<span class="comment">// compared by value with the string object. If the value is a char</span></div><div class="line"><a name="l08332"></a><span class="lineno"> 8332</span>&#160;<span class="comment">// pointer but the other operand is not an STL string object, we don&#39;t</span></div><div class="line"><a name="l08333"></a><span class="lineno"> 8333</span>&#160;<span class="comment">// know whether the pointer is supposed to point to a NUL-terminated</span></div><div class="line"><a name="l08334"></a><span class="lineno"> 8334</span>&#160;<span class="comment">// string, and thus want to print it as a pointer to be safe.</span></div><div class="line"><a name="l08335"></a><span class="lineno"> 8335</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08336"></a><span class="lineno"> 8336</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l08337"></a><span class="lineno"> 8337</span>&#160;</div><div class="line"><a name="l08338"></a><span class="lineno"> 8338</span>&#160;<span class="comment">// The default case.</span></div><div class="line"><a name="l08339"></a><span class="lineno"> 8339</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ToPr<span class="keywordtype">int</span>, <span class="keyword">typename</span> OtherOperand&gt;</div><div class="line"><a name="l08340"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_format_for_comparison.html"> 8340</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_format_for_comparison.html">FormatForComparison</a> {</div><div class="line"><a name="l08341"></a><span class="lineno"> 8341</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08342"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_format_for_comparison.html#a2aeb688fc55b57abd3021d82eccad896"> 8342</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">static ::std::string</a> <a class="code" href="classtesting_1_1internal_1_1_format_for_comparison.html#a2aeb688fc55b57abd3021d82eccad896">Format</a>(<span class="keyword">const</span> ToPrint&amp; value) {</div><div class="line"><a name="l08343"></a><span class="lineno"> 8343</span>&#160; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">return ::testing::PrintToString</a>(value);</div><div class="line"><a name="l08344"></a><span class="lineno"> 8344</span>&#160; }</div><div class="line"><a name="l08345"></a><span class="lineno"> 8345</span>&#160;};</div><div class="line"><a name="l08346"></a><span class="lineno"> 8346</span>&#160;</div><div class="line"><a name="l08347"></a><span class="lineno"> 8347</span>&#160;<span class="comment">// Array.</span></div><div class="line"><a name="l08348"></a><span class="lineno"> 8348</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ToPr<span class="keywordtype">int</span>, <span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> OtherOperand&gt;</div><div class="line"><a name="l08349"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_format_for_comparison_3_01_to_print[_n]_00_01_other_operand_01_4.html"> 8349</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_format_for_comparison.html">FormatForComparison</a>&lt;ToPrint[N], OtherOperand&gt; {</div><div class="line"><a name="l08350"></a><span class="lineno"> 8350</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08351"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_format_for_comparison_3_01_to_print[_n]_00_01_other_operand_01_4.html#a76c526461c8fa7df75f7b32ab889b9e0"> 8351</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">static ::std::string</a> <a class="code" href="classtesting_1_1internal_1_1_format_for_comparison_3_01_to_print[_n]_00_01_other_operand_01_4.html#a76c526461c8fa7df75f7b32ab889b9e0">Format</a>(<span class="keyword">const</span> ToPrint* value) {</div><div class="line"><a name="l08352"></a><span class="lineno"> 8352</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_format_for_comparison.html#a2aeb688fc55b57abd3021d82eccad896">FormatForComparison&lt;const ToPrint*, OtherOperand&gt;::Format</a>(value);</div><div class="line"><a name="l08353"></a><span class="lineno"> 8353</span>&#160; }</div><div class="line"><a name="l08354"></a><span class="lineno"> 8354</span>&#160;};</div><div class="line"><a name="l08355"></a><span class="lineno"> 8355</span>&#160;</div><div class="line"><a name="l08356"></a><span class="lineno"> 8356</span>&#160;<span class="comment">// By default, print C string as pointers to be safe, as we don&#39;t know</span></div><div class="line"><a name="l08357"></a><span class="lineno"> 8357</span>&#160;<span class="comment">// whether they actually point to a NUL-terminated string.</span></div><div class="line"><a name="l08358"></a><span class="lineno"> 8358</span>&#160;</div><div class="line"><a name="l08359"></a><span class="lineno"><a class="line" href="gtest_8h.html#a79d4724b4bc2a1dd8493c366b5ca626a"> 8359</a></span>&#160;<span class="preprocessor">#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType) \</span></div><div class="line"><a name="l08360"></a><span class="lineno"> 8360</span>&#160;<span class="preprocessor"> template &lt;typename OtherOperand&gt; \</span></div><div class="line"><a name="l08361"></a><span class="lineno"> 8361</span>&#160;<span class="preprocessor"> class FormatForComparison&lt;CharType*, OtherOperand&gt; { \</span></div><div class="line"><a name="l08362"></a><span class="lineno"> 8362</span>&#160;<span class="preprocessor"> public: \</span></div><div class="line"><a name="l08363"></a><span class="lineno"> 8363</span>&#160;<span class="preprocessor"> static ::std::string Format(CharType* value) { \</span></div><div class="line"><a name="l08364"></a><span class="lineno"> 8364</span>&#160;<span class="preprocessor"> return ::testing::PrintToString(static_cast&lt;const void*&gt;(value)); \</span></div><div class="line"><a name="l08365"></a><span class="lineno"> 8365</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l08366"></a><span class="lineno"> 8366</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l08367"></a><span class="lineno"> 8367</span>&#160;</div><div class="line"><a name="l08368"></a><span class="lineno"> 8368</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3682f962ae0ec1c0eca6444ca0a09e91">GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</a>(<span class="keywordtype">char</span>);</div><div class="line"><a name="l08369"></a><span class="lineno"> 8369</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3682f962ae0ec1c0eca6444ca0a09e91">GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>);</div><div class="line"><a name="l08370"></a><span class="lineno"> 8370</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3682f962ae0ec1c0eca6444ca0a09e91">GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</a>(<span class="keywordtype">wchar_t</span>);</div><div class="line"><a name="l08371"></a><span class="lineno"> 8371</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a3682f962ae0ec1c0eca6444ca0a09e91">GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>);</div><div class="line"><a name="l08372"></a><span class="lineno"> 8372</span>&#160;</div><div class="line"><a name="l08373"></a><span class="lineno"> 8373</span>&#160;<span class="preprocessor">#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</span></div><div class="line"><a name="l08374"></a><span class="lineno"> 8374</span>&#160;</div><div class="line"><a name="l08375"></a><span class="lineno"> 8375</span>&#160;<span class="comment">// If a C string is compared with an STL string object, we know it&#39;s meant</span></div><div class="line"><a name="l08376"></a><span class="lineno"> 8376</span>&#160;<span class="comment">// to point to a NUL-terminated string, and thus can print it as a string.</span></div><div class="line"><a name="l08377"></a><span class="lineno"> 8377</span>&#160;</div><div class="line"><a name="l08378"></a><span class="lineno"><a class="line" href="gtest_8h.html#ad6102ed2a0571d5196e606a061c16a10"> 8378</a></span>&#160;<span class="preprocessor">#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \</span></div><div class="line"><a name="l08379"></a><span class="lineno"> 8379</span>&#160;<span class="preprocessor"> template &lt;&gt; \</span></div><div class="line"><a name="l08380"></a><span class="lineno"> 8380</span>&#160;<span class="preprocessor"> class FormatForComparison&lt;CharType*, OtherStringType&gt; { \</span></div><div class="line"><a name="l08381"></a><span class="lineno"> 8381</span>&#160;<span class="preprocessor"> public: \</span></div><div class="line"><a name="l08382"></a><span class="lineno"> 8382</span>&#160;<span class="preprocessor"> static ::std::string Format(CharType* value) { \</span></div><div class="line"><a name="l08383"></a><span class="lineno"> 8383</span>&#160;<span class="preprocessor"> return ::testing::PrintToString(value); \</span></div><div class="line"><a name="l08384"></a><span class="lineno"> 8384</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l08385"></a><span class="lineno"> 8385</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l08386"></a><span class="lineno"> 8386</span>&#160;</div><div class="line"><a name="l08387"></a><span class="lineno"> 8387</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keywordtype">char</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>);</div><div class="line"><a name="l08388"></a><span class="lineno"> 8388</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>);</div><div class="line"><a name="l08389"></a><span class="lineno"> 8389</span>&#160;</div><div class="line"><a name="l08390"></a><span class="lineno"> 8390</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l08391"></a><span class="lineno"> 8391</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keywordtype">char</span>, ::<span class="keywordtype">string</span>);</div><div class="line"><a name="l08392"></a><span class="lineno"> 8392</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>, ::<span class="keywordtype">string</span>);</div><div class="line"><a name="l08393"></a><span class="lineno"> 8393</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08394"></a><span class="lineno"> 8394</span>&#160;</div><div class="line"><a name="l08395"></a><span class="lineno"> 8395</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l08396"></a><span class="lineno"> 8396</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keywordtype">wchar_t</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">wstring</a>);</div><div class="line"><a name="l08397"></a><span class="lineno"> 8397</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">wstring</a>);</div><div class="line"><a name="l08398"></a><span class="lineno"> 8398</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08399"></a><span class="lineno"> 8399</span>&#160;</div><div class="line"><a name="l08400"></a><span class="lineno"> 8400</span>&#160;<span class="preprocessor">#if GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l08401"></a><span class="lineno"> 8401</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keywordtype">wchar_t</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">std::wstring</a>);</div><div class="line"><a name="l08402"></a><span class="lineno"> 8402</span>&#160;<a class="code" href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>, ::<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">std::wstring</a>);</div><div class="line"><a name="l08403"></a><span class="lineno"> 8403</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08404"></a><span class="lineno"> 8404</span>&#160;</div><div class="line"><a name="l08405"></a><span class="lineno"> 8405</span>&#160;<span class="preprocessor">#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</span></div><div class="line"><a name="l08406"></a><span class="lineno"> 8406</span>&#160;</div><div class="line"><a name="l08407"></a><span class="lineno"> 8407</span>&#160;<span class="comment">// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)</span></div><div class="line"><a name="l08408"></a><span class="lineno"> 8408</span>&#160;<span class="comment">// operand to be used in a failure message. The type (but not value)</span></div><div class="line"><a name="l08409"></a><span class="lineno"> 8409</span>&#160;<span class="comment">// of the other operand may affect the format. This allows us to</span></div><div class="line"><a name="l08410"></a><span class="lineno"> 8410</span>&#160;<span class="comment">// print a char* as a raw pointer when it is compared against another</span></div><div class="line"><a name="l08411"></a><span class="lineno"> 8411</span>&#160;<span class="comment">// char* or void*, and print it as a C string when it is compared</span></div><div class="line"><a name="l08412"></a><span class="lineno"> 8412</span>&#160;<span class="comment">// against an std::string object, for example.</span></div><div class="line"><a name="l08413"></a><span class="lineno"> 8413</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08414"></a><span class="lineno"> 8414</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l08415"></a><span class="lineno"> 8415</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l08416"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518"> 8416</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">FormatForComparisonFailureMessage</a>(</div><div class="line"><a name="l08417"></a><span class="lineno"> 8417</span>&#160; <span class="keyword">const</span> T1&amp; value, <span class="keyword">const</span> T2&amp; <span class="comment">/* other_operand */</span>) {</div><div class="line"><a name="l08418"></a><span class="lineno"> 8418</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_format_for_comparison.html#a2aeb688fc55b57abd3021d82eccad896">FormatForComparison&lt;T1, T2&gt;::Format</a>(value);</div><div class="line"><a name="l08419"></a><span class="lineno"> 8419</span>&#160;}</div><div class="line"><a name="l08420"></a><span class="lineno"> 8420</span>&#160;</div><div class="line"><a name="l08421"></a><span class="lineno"> 8421</span>&#160;<span class="comment">// UniversalPrinter&lt;T&gt;::Print(value, ostream_ptr) prints the given</span></div><div class="line"><a name="l08422"></a><span class="lineno"> 8422</span>&#160;<span class="comment">// value to the given ostream. The caller must ensure that</span></div><div class="line"><a name="l08423"></a><span class="lineno"> 8423</span>&#160;<span class="comment">// &#39;ostream_ptr&#39; is not NULL, or the behavior is undefined.</span></div><div class="line"><a name="l08424"></a><span class="lineno"> 8424</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08425"></a><span class="lineno"> 8425</span>&#160;<span class="comment">// We define UniversalPrinter as a class template (as opposed to a</span></div><div class="line"><a name="l08426"></a><span class="lineno"> 8426</span>&#160;<span class="comment">// function template), as we need to partially specialize it for</span></div><div class="line"><a name="l08427"></a><span class="lineno"> 8427</span>&#160;<span class="comment">// reference types, which cannot be done with function templates.</span></div><div class="line"><a name="l08428"></a><span class="lineno"> 8428</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08429"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer.html"> 8429</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_printer.html">UniversalPrinter</a>;</div><div class="line"><a name="l08430"></a><span class="lineno"> 8430</span>&#160;</div><div class="line"><a name="l08431"></a><span class="lineno"> 8431</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08432"></a><span class="lineno"> 8432</span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os);</div><div class="line"><a name="l08433"></a><span class="lineno"> 8433</span>&#160;</div><div class="line"><a name="l08434"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4"> 8434</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4">DefaultPrinterType</a> {</div><div class="line"><a name="l08435"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a945a19e59155ce1d335e8c3bcbdf61db"> 8435</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a945a19e59155ce1d335e8c3bcbdf61db">kPrintContainer</a>,</div><div class="line"><a name="l08436"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a8eaa6fff4a58832b30027df49f73dcbf"> 8436</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a8eaa6fff4a58832b30027df49f73dcbf">kPrintPointer</a>,</div><div class="line"><a name="l08437"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a5a066cde30e276c6460ba10d123d0c2c"> 8437</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a5a066cde30e276c6460ba10d123d0c2c">kPrintFunctionPointer</a>,</div><div class="line"><a name="l08438"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a6f88d77d9d763d8a009caf950cfbab28"> 8438</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a6f88d77d9d763d8a009caf950cfbab28">kPrintOther</a>,</div><div class="line"><a name="l08439"></a><span class="lineno"> 8439</span>&#160;};</div><div class="line"><a name="l08440"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_wrap_printer_type.html"> 8440</a></span>&#160;<span class="keyword">template</span> &lt;DefaultPr<span class="keywordtype">int</span>erType type&gt; <span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType</a> {};</div><div class="line"><a name="l08441"></a><span class="lineno"> 8441</span>&#160;</div><div class="line"><a name="l08442"></a><span class="lineno"> 8442</span>&#160;<span class="comment">// Used to print an STL-style container when the user doesn&#39;t define</span></div><div class="line"><a name="l08443"></a><span class="lineno"> 8443</span>&#160;<span class="comment">// a PrintTo() for it.</span></div><div class="line"><a name="l08444"></a><span class="lineno"> 8444</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt;</div><div class="line"><a name="l08445"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40"> 8445</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">DefaultPrintTo</a>(<a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType&lt;kPrintContainer&gt;</a> <span class="comment">/* dummy */</span>,</div><div class="line"><a name="l08446"></a><span class="lineno"> 8446</span>&#160; <span class="keyword">const</span> C&amp; container, ::std::ostream* os) {</div><div class="line"><a name="l08447"></a><span class="lineno"> 8447</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> kMaxCount = 32; <span class="comment">// The maximum number of elements to print.</span></div><div class="line"><a name="l08448"></a><span class="lineno"> 8448</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;{&#39;</span>;</div><div class="line"><a name="l08449"></a><span class="lineno"> 8449</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a> = 0;</div><div class="line"><a name="l08450"></a><span class="lineno"> 8450</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> C::const_iterator it = container.begin();</div><div class="line"><a name="l08451"></a><span class="lineno"> 8451</span>&#160; it != container.end(); ++it, ++<a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>) {</div><div class="line"><a name="l08452"></a><span class="lineno"> 8452</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a> &gt; 0) {</div><div class="line"><a name="l08453"></a><span class="lineno"> 8453</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;,&#39;</span>;</div><div class="line"><a name="l08454"></a><span class="lineno"> 8454</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a> == kMaxCount) { <span class="comment">// Enough has been printed.</span></div><div class="line"><a name="l08455"></a><span class="lineno"> 8455</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot; ...&quot;</span>;</div><div class="line"><a name="l08456"></a><span class="lineno"> 8456</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08457"></a><span class="lineno"> 8457</span>&#160; }</div><div class="line"><a name="l08458"></a><span class="lineno"> 8458</span>&#160; }</div><div class="line"><a name="l08459"></a><span class="lineno"> 8459</span>&#160; *os &lt;&lt; <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l08460"></a><span class="lineno"> 8460</span>&#160; <span class="comment">// We cannot call PrintTo(*it, os) here as PrintTo() doesn&#39;t</span></div><div class="line"><a name="l08461"></a><span class="lineno"> 8461</span>&#160; <span class="comment">// handle *it being a native array.</span></div><div class="line"><a name="l08462"></a><span class="lineno"> 8462</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">internal::UniversalPrint</a>(*it, os);</div><div class="line"><a name="l08463"></a><span class="lineno"> 8463</span>&#160; }</div><div class="line"><a name="l08464"></a><span class="lineno"> 8464</span>&#160;</div><div class="line"><a name="l08465"></a><span class="lineno"> 8465</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a> &gt; 0) {</div><div class="line"><a name="l08466"></a><span class="lineno"> 8466</span>&#160; *os &lt;&lt; <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l08467"></a><span class="lineno"> 8467</span>&#160; }</div><div class="line"><a name="l08468"></a><span class="lineno"> 8468</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;}&#39;</span>;</div><div class="line"><a name="l08469"></a><span class="lineno"> 8469</span>&#160;}</div><div class="line"><a name="l08470"></a><span class="lineno"> 8470</span>&#160;</div><div class="line"><a name="l08471"></a><span class="lineno"> 8471</span>&#160;<span class="comment">// Used to print a pointer that is neither a char pointer nor a member</span></div><div class="line"><a name="l08472"></a><span class="lineno"> 8472</span>&#160;<span class="comment">// pointer, when the user doesn&#39;t define PrintTo() for it. (A member</span></div><div class="line"><a name="l08473"></a><span class="lineno"> 8473</span>&#160;<span class="comment">// variable pointer or member function pointer doesn&#39;t really point to</span></div><div class="line"><a name="l08474"></a><span class="lineno"> 8474</span>&#160;<span class="comment">// a location in the address space. Their representation is</span></div><div class="line"><a name="l08475"></a><span class="lineno"> 8475</span>&#160;<span class="comment">// implementation-defined. Therefore they will be printed as raw</span></div><div class="line"><a name="l08476"></a><span class="lineno"> 8476</span>&#160;<span class="comment">// bytes.)</span></div><div class="line"><a name="l08477"></a><span class="lineno"> 8477</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08478"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a074522dd8d77d61878a042b8d05cc64a"> 8478</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">DefaultPrintTo</a>(<a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType&lt;kPrintPointer&gt;</a> <span class="comment">/* dummy */</span>,</div><div class="line"><a name="l08479"></a><span class="lineno"> 8479</span>&#160; T* p, ::std::ostream* os) {</div><div class="line"><a name="l08480"></a><span class="lineno"> 8480</span>&#160; <span class="keywordflow">if</span> (p == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l08481"></a><span class="lineno"> 8481</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;NULL&quot;</span>;</div><div class="line"><a name="l08482"></a><span class="lineno"> 8482</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08483"></a><span class="lineno"> 8483</span>&#160; <span class="comment">// T is not a function type. We just call &lt;&lt; to print p,</span></div><div class="line"><a name="l08484"></a><span class="lineno"> 8484</span>&#160; <span class="comment">// relying on ADL to pick up user-defined &lt;&lt; for their pointer</span></div><div class="line"><a name="l08485"></a><span class="lineno"> 8485</span>&#160; <span class="comment">// types, if any.</span></div><div class="line"><a name="l08486"></a><span class="lineno"> 8486</span>&#160; *os &lt;&lt; p;</div><div class="line"><a name="l08487"></a><span class="lineno"> 8487</span>&#160; }</div><div class="line"><a name="l08488"></a><span class="lineno"> 8488</span>&#160;}</div><div class="line"><a name="l08489"></a><span class="lineno"> 8489</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08490"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a7729c07abcae6c69b9b370c39db61409"> 8490</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">DefaultPrintTo</a>(<a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType&lt;kPrintFunctionPointer&gt;</a> <span class="comment">/* dummy */</span>,</div><div class="line"><a name="l08491"></a><span class="lineno"> 8491</span>&#160; T* p, ::std::ostream* os) {</div><div class="line"><a name="l08492"></a><span class="lineno"> 8492</span>&#160; <span class="keywordflow">if</span> (p == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l08493"></a><span class="lineno"> 8493</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;NULL&quot;</span>;</div><div class="line"><a name="l08494"></a><span class="lineno"> 8494</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08495"></a><span class="lineno"> 8495</span>&#160; <span class="comment">// T is a function type, so &#39;*os &lt;&lt; p&#39; doesn&#39;t do what we want</span></div><div class="line"><a name="l08496"></a><span class="lineno"> 8496</span>&#160; <span class="comment">// (it just prints p as bool). We want to print p as a const</span></div><div class="line"><a name="l08497"></a><span class="lineno"> 8497</span>&#160; <span class="comment">// void*.</span></div><div class="line"><a name="l08498"></a><span class="lineno"> 8498</span>&#160; *os &lt;&lt; reinterpret_cast&lt;const void*&gt;(p);</div><div class="line"><a name="l08499"></a><span class="lineno"> 8499</span>&#160; }</div><div class="line"><a name="l08500"></a><span class="lineno"> 8500</span>&#160;}</div><div class="line"><a name="l08501"></a><span class="lineno"> 8501</span>&#160;</div><div class="line"><a name="l08502"></a><span class="lineno"> 8502</span>&#160;<span class="comment">// Used to print a non-container, non-pointer value when the user</span></div><div class="line"><a name="l08503"></a><span class="lineno"> 8503</span>&#160;<span class="comment">// doesn&#39;t define PrintTo() for it.</span></div><div class="line"><a name="l08504"></a><span class="lineno"> 8504</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08505"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a72b1a69d96be8ea6382539f5c4fcac6d"> 8505</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">DefaultPrintTo</a>(<a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType&lt;kPrintOther&gt;</a> <span class="comment">/* dummy */</span>,</div><div class="line"><a name="l08506"></a><span class="lineno"> 8506</span>&#160; <span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08507"></a><span class="lineno"> 8507</span>&#160; <a class="code" href="namespacetesting__internal.html#a3f49d3d0c996242f9d383c850097a656">::testing_internal::DefaultPrintNonContainerTo</a>(value, os);</div><div class="line"><a name="l08508"></a><span class="lineno"> 8508</span>&#160;}</div><div class="line"><a name="l08509"></a><span class="lineno"> 8509</span>&#160;</div><div class="line"><a name="l08510"></a><span class="lineno"> 8510</span>&#160;<span class="comment">// Prints the given value using the &lt;&lt; operator if it has one;</span></div><div class="line"><a name="l08511"></a><span class="lineno"> 8511</span>&#160;<span class="comment">// otherwise prints the bytes in it. This is what</span></div><div class="line"><a name="l08512"></a><span class="lineno"> 8512</span>&#160;<span class="comment">// UniversalPrinter&lt;T&gt;::Print() does when PrintTo() is not specialized</span></div><div class="line"><a name="l08513"></a><span class="lineno"> 8513</span>&#160;<span class="comment">// or overloaded for type T.</span></div><div class="line"><a name="l08514"></a><span class="lineno"> 8514</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08515"></a><span class="lineno"> 8515</span>&#160;<span class="comment">// A user can override this behavior for a class type Foo by defining</span></div><div class="line"><a name="l08516"></a><span class="lineno"> 8516</span>&#160;<span class="comment">// an overload of PrintTo() in the namespace where Foo is defined. We</span></div><div class="line"><a name="l08517"></a><span class="lineno"> 8517</span>&#160;<span class="comment">// give the user this option as sometimes defining a &lt;&lt; operator for</span></div><div class="line"><a name="l08518"></a><span class="lineno"> 8518</span>&#160;<span class="comment">// Foo is not desirable (e.g. the coding style may prevent doing it,</span></div><div class="line"><a name="l08519"></a><span class="lineno"> 8519</span>&#160;<span class="comment">// or there is already a &lt;&lt; operator but it doesn&#39;t do what the user</span></div><div class="line"><a name="l08520"></a><span class="lineno"> 8520</span>&#160;<span class="comment">// wants).</span></div><div class="line"><a name="l08521"></a><span class="lineno"> 8521</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08522"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#adb3c27150dbe661db0e0c4be27533460"> 8522</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08523"></a><span class="lineno"> 8523</span>&#160; <span class="comment">// DefaultPrintTo() is overloaded. The type of its first argument</span></div><div class="line"><a name="l08524"></a><span class="lineno"> 8524</span>&#160; <span class="comment">// determines which version will be picked.</span></div><div class="line"><a name="l08525"></a><span class="lineno"> 8525</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08526"></a><span class="lineno"> 8526</span>&#160; <span class="comment">// Note that we check for container types here, prior to we check</span></div><div class="line"><a name="l08527"></a><span class="lineno"> 8527</span>&#160; <span class="comment">// for protocol message types in our operator&lt;&lt;. The rationale is:</span></div><div class="line"><a name="l08528"></a><span class="lineno"> 8528</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08529"></a><span class="lineno"> 8529</span>&#160; <span class="comment">// For protocol messages, we want to give people a chance to</span></div><div class="line"><a name="l08530"></a><span class="lineno"> 8530</span>&#160; <span class="comment">// override Google Mock&#39;s format by defining a PrintTo() or</span></div><div class="line"><a name="l08531"></a><span class="lineno"> 8531</span>&#160; <span class="comment">// operator&lt;&lt;. For STL containers, other formats can be</span></div><div class="line"><a name="l08532"></a><span class="lineno"> 8532</span>&#160; <span class="comment">// incompatible with Google Mock&#39;s format for the container</span></div><div class="line"><a name="l08533"></a><span class="lineno"> 8533</span>&#160; <span class="comment">// elements; therefore we check for container types here to ensure</span></div><div class="line"><a name="l08534"></a><span class="lineno"> 8534</span>&#160; <span class="comment">// that our format is used.</span></div><div class="line"><a name="l08535"></a><span class="lineno"> 8535</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08536"></a><span class="lineno"> 8536</span>&#160; <span class="comment">// Note that MSVC and clang-cl do allow an implicit conversion from</span></div><div class="line"><a name="l08537"></a><span class="lineno"> 8537</span>&#160; <span class="comment">// pointer-to-function to pointer-to-object, but clang-cl warns on it.</span></div><div class="line"><a name="l08538"></a><span class="lineno"> 8538</span>&#160; <span class="comment">// So don&#39;t use ImplicitlyConvertible if it can be helped since it will</span></div><div class="line"><a name="l08539"></a><span class="lineno"> 8539</span>&#160; <span class="comment">// cause this warning, and use a separate overload of DefaultPrintTo for</span></div><div class="line"><a name="l08540"></a><span class="lineno"> 8540</span>&#160; <span class="comment">// function pointers so that the `*os &lt;&lt; p` in the object pointer overload</span></div><div class="line"><a name="l08541"></a><span class="lineno"> 8541</span>&#160; <span class="comment">// doesn&#39;t cause that warning either.</span></div><div class="line"><a name="l08542"></a><span class="lineno"> 8542</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">DefaultPrintTo</a>(</div><div class="line"><a name="l08543"></a><span class="lineno"> 8543</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_wrap_printer_type.html">WrapPrinterType</a> &lt;</div><div class="line"><a name="l08544"></a><span class="lineno"> 8544</span>&#160; (<span class="keyword">sizeof</span>(IsContainerTest&lt;T&gt;(0)) == <span class="keyword">sizeof</span>(<a class="code" href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3">IsContainer</a>)) &amp;&amp;</div><div class="line"><a name="l08545"></a><span class="lineno"> 8545</span>&#160; !<a class="code" href="structtesting_1_1internal_1_1_is_recursive_container.html">IsRecursiveContainer&lt;T&gt;::value</a></div><div class="line"><a name="l08546"></a><span class="lineno"> 8546</span>&#160; ? <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a945a19e59155ce1d335e8c3bcbdf61db">kPrintContainer</a></div><div class="line"><a name="l08547"></a><span class="lineno"> 8547</span>&#160; : !std::is_pointer&lt;T&gt;::value</div><div class="line"><a name="l08548"></a><span class="lineno"> 8548</span>&#160; ? <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a6f88d77d9d763d8a009caf950cfbab28">kPrintOther</a></div><div class="line"><a name="l08549"></a><span class="lineno"> 8549</span>&#160; : std::is_function&lt;<span class="keyword">typename</span> std::remove_pointer&lt;T&gt;::type&gt;::value</div><div class="line"><a name="l08550"></a><span class="lineno"> 8550</span>&#160; ? <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a5a066cde30e276c6460ba10d123d0c2c">kPrintFunctionPointer</a></div><div class="line"><a name="l08551"></a><span class="lineno"> 8551</span>&#160; : <a class="code" href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a8eaa6fff4a58832b30027df49f73dcbf">kPrintPointer</a> &gt; (),</div><div class="line"><a name="l08552"></a><span class="lineno"> 8552</span>&#160; value, os);</div><div class="line"><a name="l08553"></a><span class="lineno"> 8553</span>&#160;}</div><div class="line"><a name="l08554"></a><span class="lineno"> 8554</span>&#160;</div><div class="line"><a name="l08555"></a><span class="lineno"> 8555</span>&#160;<span class="comment">// The following list of PrintTo() overloads tells</span></div><div class="line"><a name="l08556"></a><span class="lineno"> 8556</span>&#160;<span class="comment">// UniversalPrinter&lt;T&gt;::Print() how to print standard types (built-in</span></div><div class="line"><a name="l08557"></a><span class="lineno"> 8557</span>&#160;<span class="comment">// types, strings, plain arrays, and pointers).</span></div><div class="line"><a name="l08558"></a><span class="lineno"> 8558</span>&#160;</div><div class="line"><a name="l08559"></a><span class="lineno"> 8559</span>&#160;<span class="comment">// Overloads for various char types.</span></div><div class="line"><a name="l08560"></a><span class="lineno"> 8560</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c, ::std::ostream* os);</div><div class="line"><a name="l08561"></a><span class="lineno"> 8561</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">signed</span> <span class="keywordtype">char</span> c, ::std::ostream* os);</div><div class="line"><a name="l08562"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a476bd3d411d4f129620aaf8999c257c0"> 8562</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">char</span> c, ::std::ostream* os) {</div><div class="line"><a name="l08563"></a><span class="lineno"> 8563</span>&#160; <span class="comment">// When printing a plain char, we always treat it as unsigned. This</span></div><div class="line"><a name="l08564"></a><span class="lineno"> 8564</span>&#160; <span class="comment">// way, the output won&#39;t be affected by whether the compiler thinks</span></div><div class="line"><a name="l08565"></a><span class="lineno"> 8565</span>&#160; <span class="comment">// char is signed or not.</span></div><div class="line"><a name="l08566"></a><span class="lineno"> 8566</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(static_cast&lt;unsigned char&gt;(c), os);</div><div class="line"><a name="l08567"></a><span class="lineno"> 8567</span>&#160;}</div><div class="line"><a name="l08568"></a><span class="lineno"> 8568</span>&#160;</div><div class="line"><a name="l08569"></a><span class="lineno"> 8569</span>&#160;<span class="comment">// Overloads for other simple built-in types.</span></div><div class="line"><a name="l08570"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a2979ac1ad3e05c51dcd7dca2eb34e6ce"> 8570</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">bool</span> x, ::std::ostream* os) {</div><div class="line"><a name="l08571"></a><span class="lineno"> 8571</span>&#160; *os &lt;&lt; (x ? <span class="stringliteral">&quot;true&quot;</span> : <span class="stringliteral">&quot;false&quot;</span>);</div><div class="line"><a name="l08572"></a><span class="lineno"> 8572</span>&#160;}</div><div class="line"><a name="l08573"></a><span class="lineno"> 8573</span>&#160;</div><div class="line"><a name="l08574"></a><span class="lineno"> 8574</span>&#160;<span class="comment">// Overload for wchar_t type.</span></div><div class="line"><a name="l08575"></a><span class="lineno"> 8575</span>&#160;<span class="comment">// Prints a wchar_t as a symbol if it is printable or as its internal</span></div><div class="line"><a name="l08576"></a><span class="lineno"> 8576</span>&#160;<span class="comment">// code otherwise and also as its decimal code (except for L&#39;\0&#39;).</span></div><div class="line"><a name="l08577"></a><span class="lineno"> 8577</span>&#160;<span class="comment">// The L&#39;\0&#39; char is printed as &quot;L&#39;\\0&#39;&quot;. The decimal code is printed</span></div><div class="line"><a name="l08578"></a><span class="lineno"> 8578</span>&#160;<span class="comment">// as signed integer when wchar_t is implemented by the compiler</span></div><div class="line"><a name="l08579"></a><span class="lineno"> 8579</span>&#160;<span class="comment">// as a signed type and is printed as an unsigned integer when wchar_t</span></div><div class="line"><a name="l08580"></a><span class="lineno"> 8580</span>&#160;<span class="comment">// is implemented as an unsigned type.</span></div><div class="line"><a name="l08581"></a><span class="lineno"> 8581</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">wchar_t</span> wc, ::std::ostream* os);</div><div class="line"><a name="l08582"></a><span class="lineno"> 8582</span>&#160;</div><div class="line"><a name="l08583"></a><span class="lineno"> 8583</span>&#160;<span class="comment">// Overloads for C strings.</span></div><div class="line"><a name="l08584"></a><span class="lineno"> 8584</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s, ::std::ostream* os);</div><div class="line"><a name="l08585"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a553eec7bb50de01c9e91cac4accc606f"> 8585</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">char</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08586"></a><span class="lineno"> 8586</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const char*&gt;(s), os);</div><div class="line"><a name="l08587"></a><span class="lineno"> 8587</span>&#160;}</div><div class="line"><a name="l08588"></a><span class="lineno"> 8588</span>&#160;</div><div class="line"><a name="l08589"></a><span class="lineno"> 8589</span>&#160;<span class="comment">// signed/unsigned char is often used for representing binary data, so</span></div><div class="line"><a name="l08590"></a><span class="lineno"> 8590</span>&#160;<span class="comment">// we print pointers to it as void* to be safe.</span></div><div class="line"><a name="l08591"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a792cc5665a34619ed7a6d54711433456"> 8591</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keyword">const</span> <span class="keywordtype">signed</span> <span class="keywordtype">char</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08592"></a><span class="lineno"> 8592</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const void*&gt;(s), os);</div><div class="line"><a name="l08593"></a><span class="lineno"> 8593</span>&#160;}</div><div class="line"><a name="l08594"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a1320096b116f8cc4b688acbd5b783051"> 8594</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">signed</span> <span class="keywordtype">char</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08595"></a><span class="lineno"> 8595</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const void*&gt;(s), os);</div><div class="line"><a name="l08596"></a><span class="lineno"> 8596</span>&#160;}</div><div class="line"><a name="l08597"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a42c591f2164ad105b502a9262333aed2"> 8597</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08598"></a><span class="lineno"> 8598</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const void*&gt;(s), os);</div><div class="line"><a name="l08599"></a><span class="lineno"> 8599</span>&#160;}</div><div class="line"><a name="l08600"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a7fae797c500d66d0f5a9db4f205e3416"> 8600</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08601"></a><span class="lineno"> 8601</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const void*&gt;(s), os);</div><div class="line"><a name="l08602"></a><span class="lineno"> 8602</span>&#160;}</div><div class="line"><a name="l08603"></a><span class="lineno"> 8603</span>&#160;</div><div class="line"><a name="l08604"></a><span class="lineno"> 8604</span>&#160;<span class="comment">// MSVC can be configured to define wchar_t as a typedef of unsigned</span></div><div class="line"><a name="l08605"></a><span class="lineno"> 8605</span>&#160;<span class="comment">// short. It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native</span></div><div class="line"><a name="l08606"></a><span class="lineno"> 8606</span>&#160;<span class="comment">// type. When wchar_t is a typedef, defining an overload for const</span></div><div class="line"><a name="l08607"></a><span class="lineno"> 8607</span>&#160;<span class="comment">// wchar_t* would cause unsigned short* be printed as a wide string,</span></div><div class="line"><a name="l08608"></a><span class="lineno"> 8608</span>&#160;<span class="comment">// possibly causing invalid memory accesses.</span></div><div class="line"><a name="l08609"></a><span class="lineno"> 8609</span>&#160;<span class="preprocessor">#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)</span></div><div class="line"><a name="l08610"></a><span class="lineno"> 8610</span>&#160;<span class="comment">// Overloads for wide C strings</span></div><div class="line"><a name="l08611"></a><span class="lineno"> 8611</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s, ::std::ostream* os);</div><div class="line"><a name="l08612"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a8d41baa371fad3eb5a3dbe1bbc02c290"> 8612</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<span class="keywordtype">wchar_t</span>* s, ::std::ostream* os) {</div><div class="line"><a name="l08613"></a><span class="lineno"> 8613</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ImplicitCast_&lt;const wchar_t*&gt;(s), os);</div><div class="line"><a name="l08614"></a><span class="lineno"> 8614</span>&#160;}</div><div class="line"><a name="l08615"></a><span class="lineno"> 8615</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08616"></a><span class="lineno"> 8616</span>&#160;</div><div class="line"><a name="l08617"></a><span class="lineno"> 8617</span>&#160;<span class="comment">// Overload for C arrays. Multi-dimensional arrays are printed</span></div><div class="line"><a name="l08618"></a><span class="lineno"> 8618</span>&#160;<span class="comment">// properly.</span></div><div class="line"><a name="l08619"></a><span class="lineno"> 8619</span>&#160;</div><div class="line"><a name="l08620"></a><span class="lineno"> 8620</span>&#160;<span class="comment">// Prints the given number of elements in an array, without printing</span></div><div class="line"><a name="l08621"></a><span class="lineno"> 8621</span>&#160;<span class="comment">// the curly braces.</span></div><div class="line"><a name="l08622"></a><span class="lineno"> 8622</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08623"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa"> 8623</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa">PrintRawArrayTo</a>(<span class="keyword">const</span> T a[], <span class="keywordtype">size_t</span> <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>, ::std::ostream* os) {</div><div class="line"><a name="l08624"></a><span class="lineno"> 8624</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(a[0], os);</div><div class="line"><a name="l08625"></a><span class="lineno"> 8625</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i != <a class="code" href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">count</a>; i++) {</div><div class="line"><a name="l08626"></a><span class="lineno"> 8626</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l08627"></a><span class="lineno"> 8627</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(a[i], os);</div><div class="line"><a name="l08628"></a><span class="lineno"> 8628</span>&#160; }</div><div class="line"><a name="l08629"></a><span class="lineno"> 8629</span>&#160;}</div><div class="line"><a name="l08630"></a><span class="lineno"> 8630</span>&#160;</div><div class="line"><a name="l08631"></a><span class="lineno"> 8631</span>&#160;<span class="comment">// Overloads for ::string and ::std::string.</span></div><div class="line"><a name="l08632"></a><span class="lineno"> 8632</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l08633"></a><span class="lineno"> 8633</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#ad609167d8d6792b0fb186539e0e159bd">PrintStringTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp;s, ::std::ostream* os);</div><div class="line"><a name="l08634"></a><span class="lineno"> 8634</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s, ::std::ostream* os) {</div><div class="line"><a name="l08635"></a><span class="lineno"> 8635</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ad609167d8d6792b0fb186539e0e159bd">PrintStringTo</a>(s, os);</div><div class="line"><a name="l08636"></a><span class="lineno"> 8636</span>&#160;}</div><div class="line"><a name="l08637"></a><span class="lineno"> 8637</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l08638"></a><span class="lineno"> 8638</span>&#160;</div><div class="line"><a name="l08639"></a><span class="lineno"> 8639</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#ad609167d8d6792b0fb186539e0e159bd">PrintStringTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp;s, ::std::ostream* os);</div><div class="line"><a name="l08640"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#af59b4f5d83276cd807c45063b14bad44"> 8640</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; s, ::std::ostream* os) {</div><div class="line"><a name="l08641"></a><span class="lineno"> 8641</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ad609167d8d6792b0fb186539e0e159bd">PrintStringTo</a>(s, os);</div><div class="line"><a name="l08642"></a><span class="lineno"> 8642</span>&#160;}</div><div class="line"><a name="l08643"></a><span class="lineno"> 8643</span>&#160;</div><div class="line"><a name="l08644"></a><span class="lineno"> 8644</span>&#160;<span class="comment">// Overloads for ::wstring and ::std::wstring.</span></div><div class="line"><a name="l08645"></a><span class="lineno"> 8645</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l08646"></a><span class="lineno"> 8646</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#ac46308aa3c0294ae446a40115aeb32c6">PrintWideStringTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::wstring</a>&amp;s, ::std::ostream* os);</div><div class="line"><a name="l08647"></a><span class="lineno"> 8647</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::wstring</a>&amp; s, ::std::ostream* os) {</div><div class="line"><a name="l08648"></a><span class="lineno"> 8648</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ac46308aa3c0294ae446a40115aeb32c6">PrintWideStringTo</a>(s, os);</div><div class="line"><a name="l08649"></a><span class="lineno"> 8649</span>&#160;}</div><div class="line"><a name="l08650"></a><span class="lineno"> 8650</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_WSTRING</span></div><div class="line"><a name="l08651"></a><span class="lineno"> 8651</span>&#160;</div><div class="line"><a name="l08652"></a><span class="lineno"> 8652</span>&#160;<span class="preprocessor">#if GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l08653"></a><span class="lineno"> 8653</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#ac46308aa3c0294ae446a40115aeb32c6">PrintWideStringTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp;s, ::std::ostream* os);</div><div class="line"><a name="l08654"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a8d5be499966aeff68d4690db7d57f38a"> 8654</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; s, ::std::ostream* os) {</div><div class="line"><a name="l08655"></a><span class="lineno"> 8655</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ac46308aa3c0294ae446a40115aeb32c6">PrintWideStringTo</a>(s, os);</div><div class="line"><a name="l08656"></a><span class="lineno"> 8656</span>&#160;}</div><div class="line"><a name="l08657"></a><span class="lineno"> 8657</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l08658"></a><span class="lineno"> 8658</span>&#160;</div><div class="line"><a name="l08659"></a><span class="lineno"> 8659</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08660"></a><span class="lineno"> 8660</span>&#160;<span class="comment">// Overload for absl::string_view.</span></div><div class="line"><a name="l08661"></a><span class="lineno"> 8661</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(absl::string_view sp, ::std::ostream* os) {</div><div class="line"><a name="l08662"></a><span class="lineno"> 8662</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>(sp), os);</div><div class="line"><a name="l08663"></a><span class="lineno"> 8663</span>&#160;}</div><div class="line"><a name="l08664"></a><span class="lineno"> 8664</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_ABSL</span></div><div class="line"><a name="l08665"></a><span class="lineno"> 8665</span>&#160;</div><div class="line"><a name="l08666"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a76f564cf23190dbd5c9e088defdd092b"> 8666</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(std::nullptr_t, ::std::ostream* os) { *os &lt;&lt; <span class="stringliteral">&quot;(nullptr)&quot;</span>; }</div><div class="line"><a name="l08667"></a><span class="lineno"> 8667</span>&#160;</div><div class="line"><a name="l08668"></a><span class="lineno"> 8668</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08669"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a5587d09db034bc597870ae86bd8c01f8"> 8669</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(std::reference_wrapper&lt;T&gt; ref, ::std::ostream* os) {</div><div class="line"><a name="l08670"></a><span class="lineno"> 8670</span>&#160; <span class="comment">// Delegate to wrapped value.</span></div><div class="line"><a name="l08671"></a><span class="lineno"> 8671</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(ref.get(), os);</div><div class="line"><a name="l08672"></a><span class="lineno"> 8672</span>&#160;}</div><div class="line"><a name="l08673"></a><span class="lineno"> 8673</span>&#160;</div><div class="line"><a name="l08674"></a><span class="lineno"> 8674</span>&#160;<span class="comment">// Helper function for printing a tuple. T must be instantiated with</span></div><div class="line"><a name="l08675"></a><span class="lineno"> 8675</span>&#160;<span class="comment">// a tuple type.</span></div><div class="line"><a name="l08676"></a><span class="lineno"> 8676</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08677"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e"> 8677</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e">PrintTupleTo</a>(<span class="keyword">const</span> T&amp;, std::integral_constant&lt;size_t, 0&gt;,</div><div class="line"><a name="l08678"></a><span class="lineno"> 8678</span>&#160; ::std::ostream*) {}</div><div class="line"><a name="l08679"></a><span class="lineno"> 8679</span>&#160;</div><div class="line"><a name="l08680"></a><span class="lineno"> 8680</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l08681"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a3580971ab4571dc9a00f4ed0e17fd777"> 8681</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e">PrintTupleTo</a>(<span class="keyword">const</span> T&amp; t, std::integral_constant&lt;size_t, I&gt;,</div><div class="line"><a name="l08682"></a><span class="lineno"> 8682</span>&#160; ::std::ostream* os) {</div><div class="line"><a name="l08683"></a><span class="lineno"> 8683</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e">PrintTupleTo</a>(t, std::integral_constant&lt;size_t, I - 1&gt;(), os);</div><div class="line"><a name="l08684"></a><span class="lineno"> 8684</span>&#160; <a class="code" href="gtest_8h.html#a69b0cadb05bf2a1ef96151243c6b6241">GTEST_INTENTIONAL_CONST_COND_PUSH_</a>()</div><div class="line"><a name="l08685"></a><span class="lineno"> 8685</span>&#160; <span class="keywordflow">if</span> (I &gt; 1) {</div><div class="line"><a name="l08686"></a><span class="lineno"> 8686</span>&#160; <a class="code" href="gtest_8h.html#ad115e2c466f7e8a32f1cf23ef2e5f220">GTEST_INTENTIONAL_CONST_COND_POP_</a>()</div><div class="line"><a name="l08687"></a><span class="lineno"> 8687</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l08688"></a><span class="lineno"> 8688</span>&#160; }</div><div class="line"><a name="l08689"></a><span class="lineno"> 8689</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html">UniversalPrinter</a>&lt;<span class="keyword">typename</span> std::tuple_element&lt;I - 1, T&gt;::type&gt;::Print(</div><div class="line"><a name="l08690"></a><span class="lineno"> 8690</span>&#160; std::get&lt;I - 1&gt;(t), os);</div><div class="line"><a name="l08691"></a><span class="lineno"> 8691</span>&#160;}</div><div class="line"><a name="l08692"></a><span class="lineno"> 8692</span>&#160;</div><div class="line"><a name="l08693"></a><span class="lineno"> 8693</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Types&gt;</div><div class="line"><a name="l08694"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a5628347cba9a345f56087fdb70930fc8"> 8694</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(const ::std::tuple&lt;Types...&gt;&amp; t, ::std::ostream* os) {</div><div class="line"><a name="l08695"></a><span class="lineno"> 8695</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;(&quot;</span>;</div><div class="line"><a name="l08696"></a><span class="lineno"> 8696</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e">PrintTupleTo</a>(t, std::integral_constant&lt;<span class="keywordtype">size_t</span>, <span class="keyword">sizeof</span>...(Types)&gt;(), os);</div><div class="line"><a name="l08697"></a><span class="lineno"> 8697</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l08698"></a><span class="lineno"> 8698</span>&#160;}</div><div class="line"><a name="l08699"></a><span class="lineno"> 8699</span>&#160;</div><div class="line"><a name="l08700"></a><span class="lineno"> 8700</span>&#160;<span class="comment">// Overload for std::pair.</span></div><div class="line"><a name="l08701"></a><span class="lineno"> 8701</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l08702"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#af2c33928facbf2edf7af564278724d98"> 8702</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(const ::std::pair&lt;T1, T2&gt;&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08703"></a><span class="lineno"> 8703</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;(&#39;</span>;</div><div class="line"><a name="l08704"></a><span class="lineno"> 8704</span>&#160; <span class="comment">// We cannot use UniversalPrint(value.first, os) here, as T1 may be</span></div><div class="line"><a name="l08705"></a><span class="lineno"> 8705</span>&#160; <span class="comment">// a reference type. The same for printing value.second.</span></div><div class="line"><a name="l08706"></a><span class="lineno"> 8706</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">UniversalPrinter&lt;T1&gt;::Print</a>(value.first, os);</div><div class="line"><a name="l08707"></a><span class="lineno"> 8707</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div><div class="line"><a name="l08708"></a><span class="lineno"> 8708</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">UniversalPrinter&lt;T2&gt;::Print</a>(value.second, os);</div><div class="line"><a name="l08709"></a><span class="lineno"> 8709</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;)&#39;</span>;</div><div class="line"><a name="l08710"></a><span class="lineno"> 8710</span>&#160;}</div><div class="line"><a name="l08711"></a><span class="lineno"> 8711</span>&#160;</div><div class="line"><a name="l08712"></a><span class="lineno"> 8712</span>&#160;<span class="comment">// Implements printing a non-reference type T by letting the compiler</span></div><div class="line"><a name="l08713"></a><span class="lineno"> 8713</span>&#160;<span class="comment">// pick the right overload of PrintTo() for T.</span></div><div class="line"><a name="l08714"></a><span class="lineno"> 8714</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08715"></a><span class="lineno"> 8715</span>&#160;<span class="keyword">class </span>UniversalPrinter {</div><div class="line"><a name="l08716"></a><span class="lineno"> 8716</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08717"></a><span class="lineno"> 8717</span>&#160; <span class="comment">// MSVC warns about adding const to a function type, so we want to</span></div><div class="line"><a name="l08718"></a><span class="lineno"> 8718</span>&#160; <span class="comment">// disable the warning.</span></div><div class="line"><a name="l08719"></a><span class="lineno"> 8719</span>&#160; <a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4180)</div><div class="line"><a name="l08720"></a><span class="lineno"> 8720</span>&#160;</div><div class="line"><a name="l08721"></a><span class="lineno"> 8721</span>&#160; <span class="comment">// Note: we deliberately don&#39;t call this PrintTo(), as that name</span></div><div class="line"><a name="l08722"></a><span class="lineno"> 8722</span>&#160; <span class="comment">// conflicts with ::testing::internal::PrintTo in the body of the</span></div><div class="line"><a name="l08723"></a><span class="lineno"> 8723</span>&#160; <span class="comment">// function.</span></div><div class="line"><a name="l08724"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb"> 8724</a></span>&#160; static <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">Print</a>(const T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08725"></a><span class="lineno"> 8725</span>&#160; <span class="comment">// By default, ::testing::internal::PrintTo() is used for printing</span></div><div class="line"><a name="l08726"></a><span class="lineno"> 8726</span>&#160; <span class="comment">// the value.</span></div><div class="line"><a name="l08727"></a><span class="lineno"> 8727</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l08728"></a><span class="lineno"> 8728</span>&#160; <span class="comment">// Thanks to Koenig look-up, if T is a class and has its own</span></div><div class="line"><a name="l08729"></a><span class="lineno"> 8729</span>&#160; <span class="comment">// PrintTo() function defined in its namespace, that function will</span></div><div class="line"><a name="l08730"></a><span class="lineno"> 8730</span>&#160; <span class="comment">// be visible here. Since it is more specific than the generic ones</span></div><div class="line"><a name="l08731"></a><span class="lineno"> 8731</span>&#160; <span class="comment">// in ::testing::internal, it will be picked by the compiler in the</span></div><div class="line"><a name="l08732"></a><span class="lineno"> 8732</span>&#160; <span class="comment">// following statement - exactly what we want.</span></div><div class="line"><a name="l08733"></a><span class="lineno"> 8733</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">PrintTo</a>(value, os);</div><div class="line"><a name="l08734"></a><span class="lineno"> 8734</span>&#160; }</div><div class="line"><a name="l08735"></a><span class="lineno"> 8735</span>&#160;</div><div class="line"><a name="l08736"></a><span class="lineno"> 8736</span>&#160; <a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>()</div><div class="line"><a name="l08737"></a><span class="lineno"> 8737</span>&#160;};</div><div class="line"><a name="l08738"></a><span class="lineno"> 8738</span>&#160;</div><div class="line"><a name="l08739"></a><span class="lineno"> 8739</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08740"></a><span class="lineno"> 8740</span>&#160;</div><div class="line"><a name="l08741"></a><span class="lineno"> 8741</span>&#160;<span class="comment">// Printer for absl::optional</span></div><div class="line"><a name="l08742"></a><span class="lineno"> 8742</span>&#160;</div><div class="line"><a name="l08743"></a><span class="lineno"> 8743</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08744"></a><span class="lineno"> 8744</span>&#160;<span class="keyword">class </span>UniversalPrinter&lt;::absl::optional&lt;T&gt;&gt; {</div><div class="line"><a name="l08745"></a><span class="lineno"> 8745</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08746"></a><span class="lineno"> 8746</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">Print</a>(const ::absl::optional&lt;T&gt;&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08747"></a><span class="lineno"> 8747</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;(&#39;</span>;</div><div class="line"><a name="l08748"></a><span class="lineno"> 8748</span>&#160; <span class="keywordflow">if</span> (!value) {</div><div class="line"><a name="l08749"></a><span class="lineno"> 8749</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;nullopt&quot;</span>;</div><div class="line"><a name="l08750"></a><span class="lineno"> 8750</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08751"></a><span class="lineno"> 8751</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(*value, os);</div><div class="line"><a name="l08752"></a><span class="lineno"> 8752</span>&#160; }</div><div class="line"><a name="l08753"></a><span class="lineno"> 8753</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;)&#39;</span>;</div><div class="line"><a name="l08754"></a><span class="lineno"> 8754</span>&#160; }</div><div class="line"><a name="l08755"></a><span class="lineno"> 8755</span>&#160;};</div><div class="line"><a name="l08756"></a><span class="lineno"> 8756</span>&#160;</div><div class="line"><a name="l08757"></a><span class="lineno"> 8757</span>&#160;<span class="comment">// Printer for absl::variant</span></div><div class="line"><a name="l08758"></a><span class="lineno"> 8758</span>&#160;</div><div class="line"><a name="l08759"></a><span class="lineno"> 8759</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l08760"></a><span class="lineno"> 8760</span>&#160;<span class="keyword">class </span>UniversalPrinter&lt;::absl::variant&lt;T...&gt;&gt; {</div><div class="line"><a name="l08761"></a><span class="lineno"> 8761</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08762"></a><span class="lineno"> 8762</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">Print</a>(const ::absl::variant&lt;T...&gt;&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08763"></a><span class="lineno"> 8763</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;(&#39;</span>;</div><div class="line"><a name="l08764"></a><span class="lineno"> 8764</span>&#160; absl::visit(Visitor{os}, value);</div><div class="line"><a name="l08765"></a><span class="lineno"> 8765</span>&#160; *os &lt;&lt; <span class="charliteral">&#39;)&#39;</span>;</div><div class="line"><a name="l08766"></a><span class="lineno"> 8766</span>&#160; }</div><div class="line"><a name="l08767"></a><span class="lineno"> 8767</span>&#160;</div><div class="line"><a name="l08768"></a><span class="lineno"> 8768</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08769"></a><span class="lineno"> 8769</span>&#160; <span class="keyword">struct </span>Visitor {</div><div class="line"><a name="l08770"></a><span class="lineno"> 8770</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l08771"></a><span class="lineno"> 8771</span>&#160; <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> U&amp; u)<span class="keyword"> const </span>{</div><div class="line"><a name="l08772"></a><span class="lineno"> 8772</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span> &lt;&lt; GetTypeName&lt;U&gt;() &lt;&lt; <span class="stringliteral">&quot;&#39; with value &quot;</span>;</div><div class="line"><a name="l08773"></a><span class="lineno"> 8773</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(u, os);</div><div class="line"><a name="l08774"></a><span class="lineno"> 8774</span>&#160; }</div><div class="line"><a name="l08775"></a><span class="lineno"> 8775</span>&#160; ::std::ostream* os;</div><div class="line"><a name="l08776"></a><span class="lineno"> 8776</span>&#160; };</div><div class="line"><a name="l08777"></a><span class="lineno"> 8777</span>&#160;};</div><div class="line"><a name="l08778"></a><span class="lineno"> 8778</span>&#160;</div><div class="line"><a name="l08779"></a><span class="lineno"> 8779</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_ABSL</span></div><div class="line"><a name="l08780"></a><span class="lineno"> 8780</span>&#160;</div><div class="line"><a name="l08781"></a><span class="lineno"> 8781</span>&#160;<span class="comment">// UniversalPrintArray(begin, len, os) prints an array of &#39;len&#39;</span></div><div class="line"><a name="l08782"></a><span class="lineno"> 8782</span>&#160;<span class="comment">// elements, starting at address &#39;begin&#39;.</span></div><div class="line"><a name="l08783"></a><span class="lineno"> 8783</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08784"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ad79d71c3110f8eb24ab352d68f29436a"> 8784</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a070107e7a8205ad6ec4d538d52b15b38">UniversalPrintArray</a>(<span class="keyword">const</span> T* begin, <span class="keywordtype">size_t</span> len, ::std::ostream* os) {</div><div class="line"><a name="l08785"></a><span class="lineno"> 8785</span>&#160; <span class="keywordflow">if</span> (len == 0) {</div><div class="line"><a name="l08786"></a><span class="lineno"> 8786</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;{}&quot;</span>;</div><div class="line"><a name="l08787"></a><span class="lineno"> 8787</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08788"></a><span class="lineno"> 8788</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;{ &quot;</span>;</div><div class="line"><a name="l08789"></a><span class="lineno"> 8789</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> kThreshold = 18;</div><div class="line"><a name="l08790"></a><span class="lineno"> 8790</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> kChunkSize = 8;</div><div class="line"><a name="l08791"></a><span class="lineno"> 8791</span>&#160; <span class="comment">// If the array has more than kThreshold elements, we&#39;ll have to</span></div><div class="line"><a name="l08792"></a><span class="lineno"> 8792</span>&#160; <span class="comment">// omit some details by printing only the first and the last</span></div><div class="line"><a name="l08793"></a><span class="lineno"> 8793</span>&#160; <span class="comment">// kChunkSize elements.</span></div><div class="line"><a name="l08794"></a><span class="lineno"> 8794</span>&#160; <span class="keywordflow">if</span> (len &lt;= kThreshold) {</div><div class="line"><a name="l08795"></a><span class="lineno"> 8795</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa">PrintRawArrayTo</a>(begin, len, os);</div><div class="line"><a name="l08796"></a><span class="lineno"> 8796</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08797"></a><span class="lineno"> 8797</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa">PrintRawArrayTo</a>(begin, kChunkSize, os);</div><div class="line"><a name="l08798"></a><span class="lineno"> 8798</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;, ..., &quot;</span>;</div><div class="line"><a name="l08799"></a><span class="lineno"> 8799</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa">PrintRawArrayTo</a>(begin + len - kChunkSize, kChunkSize, os);</div><div class="line"><a name="l08800"></a><span class="lineno"> 8800</span>&#160; }</div><div class="line"><a name="l08801"></a><span class="lineno"> 8801</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot; }&quot;</span>;</div><div class="line"><a name="l08802"></a><span class="lineno"> 8802</span>&#160; }</div><div class="line"><a name="l08803"></a><span class="lineno"> 8803</span>&#160;}</div><div class="line"><a name="l08804"></a><span class="lineno"> 8804</span>&#160;<span class="comment">// This overload prints a (const) char array compactly.</span></div><div class="line"><a name="l08805"></a><span class="lineno"> 8805</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a070107e7a8205ad6ec4d538d52b15b38">UniversalPrintArray</a>(</div><div class="line"><a name="l08806"></a><span class="lineno"> 8806</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* begin, <span class="keywordtype">size_t</span> len, ::std::ostream* os);</div><div class="line"><a name="l08807"></a><span class="lineno"> 8807</span>&#160;</div><div class="line"><a name="l08808"></a><span class="lineno"> 8808</span>&#160;<span class="comment">// This overload prints a (const) wchar_t array compactly.</span></div><div class="line"><a name="l08809"></a><span class="lineno"> 8809</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a070107e7a8205ad6ec4d538d52b15b38">UniversalPrintArray</a>(</div><div class="line"><a name="l08810"></a><span class="lineno"> 8810</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* begin, <span class="keywordtype">size_t</span> len, ::std::ostream* os);</div><div class="line"><a name="l08811"></a><span class="lineno"> 8811</span>&#160;</div><div class="line"><a name="l08812"></a><span class="lineno"> 8812</span>&#160;<span class="comment">// Implements printing an array type T[N].</span></div><div class="line"><a name="l08813"></a><span class="lineno"> 8813</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l08814"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer_3_01_t[_n]_4.html"> 8814</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_printer.html">UniversalPrinter</a>&lt;T[N]&gt; {</div><div class="line"><a name="l08815"></a><span class="lineno"> 8815</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08816"></a><span class="lineno"> 8816</span>&#160; <span class="comment">// Prints the given array, omitting some elements when there are too</span></div><div class="line"><a name="l08817"></a><span class="lineno"> 8817</span>&#160; <span class="comment">// many.</span></div><div class="line"><a name="l08818"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer_3_01_t[_n]_4.html#a1cf0e7c8db59c090f769116c6421b212"> 8818</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_printer_3_01_t[_n]_4.html#a1cf0e7c8db59c090f769116c6421b212">Print</a>(<span class="keyword">const</span> T (&amp;a)[N], ::std::ostream* os) {</div><div class="line"><a name="l08819"></a><span class="lineno"> 8819</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a070107e7a8205ad6ec4d538d52b15b38">UniversalPrintArray</a>(a, N, os);</div><div class="line"><a name="l08820"></a><span class="lineno"> 8820</span>&#160; }</div><div class="line"><a name="l08821"></a><span class="lineno"> 8821</span>&#160;};</div><div class="line"><a name="l08822"></a><span class="lineno"> 8822</span>&#160;</div><div class="line"><a name="l08823"></a><span class="lineno"> 8823</span>&#160;<span class="comment">// Implements printing a reference type T&amp;.</span></div><div class="line"><a name="l08824"></a><span class="lineno"> 8824</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08825"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer_3_01_t_01_6_01_4.html"> 8825</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_printer.html">UniversalPrinter</a>&lt;T&amp;&gt; {</div><div class="line"><a name="l08826"></a><span class="lineno"> 8826</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08827"></a><span class="lineno"> 8827</span>&#160; <span class="comment">// MSVC warns about adding const to a function type, so we want to</span></div><div class="line"><a name="l08828"></a><span class="lineno"> 8828</span>&#160; <span class="comment">// disable the warning.</span></div><div class="line"><a name="l08829"></a><span class="lineno"> 8829</span>&#160; <a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4180)</div><div class="line"><a name="l08830"></a><span class="lineno"> 8830</span>&#160;</div><div class="line"><a name="l08831"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_printer_3_01_t_01_6_01_4.html#a923a694be8aa66117848c1c5f57ede35"> 8831</a></span>&#160; static <span class="keywordtype">void</span> Print(const T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08832"></a><span class="lineno"> 8832</span>&#160; <span class="comment">// Prints the address of the value. We use reinterpret_cast here</span></div><div class="line"><a name="l08833"></a><span class="lineno"> 8833</span>&#160; <span class="comment">// as static_cast doesn&#39;t compile when T is a function type.</span></div><div class="line"><a name="l08834"></a><span class="lineno"> 8834</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;@&quot;</span> &lt;&lt; <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(&amp;value) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l08835"></a><span class="lineno"> 8835</span>&#160;</div><div class="line"><a name="l08836"></a><span class="lineno"> 8836</span>&#160; <span class="comment">// Then prints the value itself.</span></div><div class="line"><a name="l08837"></a><span class="lineno"> 8837</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(value, os);</div><div class="line"><a name="l08838"></a><span class="lineno"> 8838</span>&#160; }</div><div class="line"><a name="l08839"></a><span class="lineno"> 8839</span>&#160;</div><div class="line"><a name="l08840"></a><span class="lineno"> 8840</span>&#160; <a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>()</div><div class="line"><a name="l08841"></a><span class="lineno"> 8841</span>&#160;};</div><div class="line"><a name="l08842"></a><span class="lineno"> 8842</span>&#160;</div><div class="line"><a name="l08843"></a><span class="lineno"> 8843</span>&#160;<span class="comment">// Prints a value tersely: for a reference type, the referenced value</span></div><div class="line"><a name="l08844"></a><span class="lineno"> 8844</span>&#160;<span class="comment">// (but not the address) is printed; for a (const) char pointer, the</span></div><div class="line"><a name="l08845"></a><span class="lineno"> 8845</span>&#160;<span class="comment">// NUL-terminated string (but not the pointer) is printed.</span></div><div class="line"><a name="l08846"></a><span class="lineno"> 8846</span>&#160;</div><div class="line"><a name="l08847"></a><span class="lineno"> 8847</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08848"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer.html"> 8848</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a> {</div><div class="line"><a name="l08849"></a><span class="lineno"> 8849</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08850"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54"> 8850</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">Print</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08851"></a><span class="lineno"> 8851</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(value, os);</div><div class="line"><a name="l08852"></a><span class="lineno"> 8852</span>&#160; }</div><div class="line"><a name="l08853"></a><span class="lineno"> 8853</span>&#160;};</div><div class="line"><a name="l08854"></a><span class="lineno"> 8854</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08855"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t_01_6_01_4.html"> 8855</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;T&amp;&gt; {</div><div class="line"><a name="l08856"></a><span class="lineno"> 8856</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08857"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t_01_6_01_4.html#a931f93cc52a3046706c87d0a90640483"> 8857</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t_01_6_01_4.html#a931f93cc52a3046706c87d0a90640483">Print</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08858"></a><span class="lineno"> 8858</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(value, os);</div><div class="line"><a name="l08859"></a><span class="lineno"> 8859</span>&#160; }</div><div class="line"><a name="l08860"></a><span class="lineno"> 8860</span>&#160;};</div><div class="line"><a name="l08861"></a><span class="lineno"> 8861</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l08862"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t[_n]_4.html"> 8862</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;T[N]&gt; {</div><div class="line"><a name="l08863"></a><span class="lineno"> 8863</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08864"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t[_n]_4.html#a9e0ceb62fda7dc46ebcf5f911e459a49"> 8864</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t[_n]_4.html#a9e0ceb62fda7dc46ebcf5f911e459a49">Print</a>(<span class="keyword">const</span> T (&amp;value)[N], ::std::ostream* os) {</div><div class="line"><a name="l08865"></a><span class="lineno"> 8865</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">UniversalPrinter&lt;T[N]&gt;::Print</a>(value, os);</div><div class="line"><a name="l08866"></a><span class="lineno"> 8866</span>&#160; }</div><div class="line"><a name="l08867"></a><span class="lineno"> 8867</span>&#160;};</div><div class="line"><a name="l08868"></a><span class="lineno"> 8868</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l08869"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01char_01_5_01_4.html"> 8869</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;const char*&gt; {</div><div class="line"><a name="l08870"></a><span class="lineno"> 8870</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08871"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01char_01_5_01_4.html#a37a3be2d26dc07b24d16c2b5eb88ecda"> 8871</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01char_01_5_01_4.html#a37a3be2d26dc07b24d16c2b5eb88ecda">Print</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str, ::std::ostream* os) {</div><div class="line"><a name="l08872"></a><span class="lineno"> 8872</span>&#160; <span class="keywordflow">if</span> (str == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l08873"></a><span class="lineno"> 8873</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;NULL&quot;</span>;</div><div class="line"><a name="l08874"></a><span class="lineno"> 8874</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08875"></a><span class="lineno"> 8875</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>(str), os);</div><div class="line"><a name="l08876"></a><span class="lineno"> 8876</span>&#160; }</div><div class="line"><a name="l08877"></a><span class="lineno"> 8877</span>&#160; }</div><div class="line"><a name="l08878"></a><span class="lineno"> 8878</span>&#160;};</div><div class="line"><a name="l08879"></a><span class="lineno"> 8879</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l08880"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01char_01_5_01_4.html"> 8880</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;char*&gt; {</div><div class="line"><a name="l08881"></a><span class="lineno"> 8881</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08882"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01char_01_5_01_4.html#aa9ef95587c1461fe33e254af52401a43"> 8882</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01char_01_5_01_4.html#aa9ef95587c1461fe33e254af52401a43">Print</a>(<span class="keywordtype">char</span>* str, ::std::ostream* os) {</div><div class="line"><a name="l08883"></a><span class="lineno"> 8883</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">UniversalTersePrinter&lt;const char*&gt;::Print</a>(str, os);</div><div class="line"><a name="l08884"></a><span class="lineno"> 8884</span>&#160; }</div><div class="line"><a name="l08885"></a><span class="lineno"> 8885</span>&#160;};</div><div class="line"><a name="l08886"></a><span class="lineno"> 8886</span>&#160;</div><div class="line"><a name="l08887"></a><span class="lineno"> 8887</span>&#160;<span class="preprocessor">#if GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l08888"></a><span class="lineno"> 8888</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l08889"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01wchar__t_01_5_01_4.html"> 8889</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;const wchar_t*&gt; {</div><div class="line"><a name="l08890"></a><span class="lineno"> 8890</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08891"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01wchar__t_01_5_01_4.html#af0d3bb36d6defbc67c43e5785e939478"> 8891</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01wchar__t_01_5_01_4.html#af0d3bb36d6defbc67c43e5785e939478">Print</a>(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* str, ::std::ostream* os) {</div><div class="line"><a name="l08892"></a><span class="lineno"> 8892</span>&#160; <span class="keywordflow">if</span> (str == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l08893"></a><span class="lineno"> 8893</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;NULL&quot;</span>;</div><div class="line"><a name="l08894"></a><span class="lineno"> 8894</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l08895"></a><span class="lineno"> 8895</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(::<a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">std::wstring</a>(str), os);</div><div class="line"><a name="l08896"></a><span class="lineno"> 8896</span>&#160; }</div><div class="line"><a name="l08897"></a><span class="lineno"> 8897</span>&#160; }</div><div class="line"><a name="l08898"></a><span class="lineno"> 8898</span>&#160;};</div><div class="line"><a name="l08899"></a><span class="lineno"> 8899</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08900"></a><span class="lineno"> 8900</span>&#160;</div><div class="line"><a name="l08901"></a><span class="lineno"> 8901</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l08902"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01wchar__t_01_5_01_4.html"> 8902</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html">UniversalTersePrinter</a>&lt;wchar_t*&gt; {</div><div class="line"><a name="l08903"></a><span class="lineno"> 8903</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08904"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01wchar__t_01_5_01_4.html#a9cdf673b44d19e6879253f30f11cd740"> 8904</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer_3_01wchar__t_01_5_01_4.html#a9cdf673b44d19e6879253f30f11cd740">Print</a>(<span class="keywordtype">wchar_t</span>* str, ::std::ostream* os) {</div><div class="line"><a name="l08905"></a><span class="lineno"> 8905</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">UniversalTersePrinter&lt;const wchar_t*&gt;::Print</a>(str, os);</div><div class="line"><a name="l08906"></a><span class="lineno"> 8906</span>&#160; }</div><div class="line"><a name="l08907"></a><span class="lineno"> 8907</span>&#160;};</div><div class="line"><a name="l08908"></a><span class="lineno"> 8908</span>&#160;</div><div class="line"><a name="l08909"></a><span class="lineno"> 8909</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08910"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#afa92f5a284929dc3723e654a25feb7b9"> 8910</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#afa92f5a284929dc3723e654a25feb7b9">UniversalTersePrint</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08911"></a><span class="lineno"> 8911</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">UniversalTersePrinter&lt;T&gt;::Print</a>(value, os);</div><div class="line"><a name="l08912"></a><span class="lineno"> 8912</span>&#160;}</div><div class="line"><a name="l08913"></a><span class="lineno"> 8913</span>&#160;</div><div class="line"><a name="l08914"></a><span class="lineno"> 8914</span>&#160;<span class="comment">// Prints a value using the type inferred by the compiler. The</span></div><div class="line"><a name="l08915"></a><span class="lineno"> 8915</span>&#160;<span class="comment">// difference between this and UniversalTersePrint() is that for a</span></div><div class="line"><a name="l08916"></a><span class="lineno"> 8916</span>&#160;<span class="comment">// (const) char pointer, this prints both the pointer and the</span></div><div class="line"><a name="l08917"></a><span class="lineno"> 8917</span>&#160;<span class="comment">// NUL-terminated string.</span></div><div class="line"><a name="l08918"></a><span class="lineno"> 8918</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08919"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309"> 8919</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(<span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08920"></a><span class="lineno"> 8920</span>&#160; <span class="comment">// A workarond for the bug in VC++ 7.1 that prevents us from instantiating</span></div><div class="line"><a name="l08921"></a><span class="lineno"> 8921</span>&#160; <span class="comment">// UniversalPrinter with T directly.</span></div><div class="line"><a name="l08922"></a><span class="lineno"> 8922</span>&#160; <span class="keyword">typedef</span> T T1;</div><div class="line"><a name="l08923"></a><span class="lineno"> 8923</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">UniversalPrinter&lt;T1&gt;::Print</a>(value, os);</div><div class="line"><a name="l08924"></a><span class="lineno"> 8924</span>&#160;}</div><div class="line"><a name="l08925"></a><span class="lineno"> 8925</span>&#160;</div><div class="line"><a name="l08926"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf"> 8926</a></span>&#160;typedef ::std::vector&lt; ::std::string&gt; <a class="code" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">Strings</a>;</div><div class="line"><a name="l08927"></a><span class="lineno"> 8927</span>&#160;</div><div class="line"><a name="l08928"></a><span class="lineno"> 8928</span>&#160; <span class="comment">// Tersely prints the first N fields of a tuple to a string vector,</span></div><div class="line"><a name="l08929"></a><span class="lineno"> 8929</span>&#160; <span class="comment">// one element for each field.</span></div><div class="line"><a name="l08930"></a><span class="lineno"> 8930</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Tuple&gt;</div><div class="line"><a name="l08931"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382"> 8931</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382">TersePrintPrefixToStrings</a>(<span class="keyword">const</span> Tuple&amp;, std::integral_constant&lt;size_t, 0&gt;,</div><div class="line"><a name="l08932"></a><span class="lineno"> 8932</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">Strings</a>*) {}</div><div class="line"><a name="l08933"></a><span class="lineno"> 8933</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Tuple, <span class="keywordtype">size_t</span> I&gt;</div><div class="line"><a name="l08934"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#ab244273c02742a3fac45cc241befc536"> 8934</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382">TersePrintPrefixToStrings</a>(<span class="keyword">const</span> Tuple&amp; t,</div><div class="line"><a name="l08935"></a><span class="lineno"> 8935</span>&#160; std::integral_constant&lt;size_t, I&gt;,</div><div class="line"><a name="l08936"></a><span class="lineno"> 8936</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">Strings</a>* strings) {</div><div class="line"><a name="l08937"></a><span class="lineno"> 8937</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382">TersePrintPrefixToStrings</a>(t, std::integral_constant&lt;size_t, I - 1&gt;(),</div><div class="line"><a name="l08938"></a><span class="lineno"> 8938</span>&#160; strings);</div><div class="line"><a name="l08939"></a><span class="lineno"> 8939</span>&#160; ::std::stringstream ss;</div><div class="line"><a name="l08940"></a><span class="lineno"> 8940</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#afa92f5a284929dc3723e654a25feb7b9">UniversalTersePrint</a>(std::get&lt;I - 1&gt;(t), &amp;ss);</div><div class="line"><a name="l08941"></a><span class="lineno"> 8941</span>&#160; strings-&gt;push_back(ss.str());</div><div class="line"><a name="l08942"></a><span class="lineno"> 8942</span>&#160;}</div><div class="line"><a name="l08943"></a><span class="lineno"> 8943</span>&#160;</div><div class="line"><a name="l08944"></a><span class="lineno"> 8944</span>&#160;<span class="comment">// Prints the fields of a tuple tersely to a string vector, one</span></div><div class="line"><a name="l08945"></a><span class="lineno"> 8945</span>&#160;<span class="comment">// element for each field. See the comment before</span></div><div class="line"><a name="l08946"></a><span class="lineno"> 8946</span>&#160;<span class="comment">// UniversalTersePrint() for how we define &quot;tersely&quot;.</span></div><div class="line"><a name="l08947"></a><span class="lineno"> 8947</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Tuple&gt;</div><div class="line"><a name="l08948"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a7e60d1478b074801c766eeee9be6c772"> 8948</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">Strings</a> <a class="code" href="namespacetesting_1_1internal.html#a7e60d1478b074801c766eeee9be6c772">UniversalTersePrintTupleFieldsToStrings</a>(<span class="keyword">const</span> Tuple&amp; value) {</div><div class="line"><a name="l08949"></a><span class="lineno"> 8949</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">Strings</a> result;</div><div class="line"><a name="l08950"></a><span class="lineno"> 8950</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382">TersePrintPrefixToStrings</a>(</div><div class="line"><a name="l08951"></a><span class="lineno"> 8951</span>&#160; value, std::integral_constant&lt;<span class="keywordtype">size_t</span>, std::tuple_size&lt;Tuple&gt;::value&gt;(),</div><div class="line"><a name="l08952"></a><span class="lineno"> 8952</span>&#160; &amp;result);</div><div class="line"><a name="l08953"></a><span class="lineno"> 8953</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08954"></a><span class="lineno"> 8954</span>&#160;}</div><div class="line"><a name="l08955"></a><span class="lineno"> 8955</span>&#160;</div><div class="line"><a name="l08956"></a><span class="lineno"> 8956</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l08957"></a><span class="lineno"> 8957</span>&#160;</div><div class="line"><a name="l08958"></a><span class="lineno"> 8958</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l08959"></a><span class="lineno"> 8959</span>&#160;<span class="keyword">namespace </span>internal2 {</div><div class="line"><a name="l08960"></a><span class="lineno"> 8960</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08961"></a><span class="lineno"> 8961</span>&#160;<span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal2_1_1_type_without_formatter.html#a6651f6f7be2c0f899729eeb6038f76d3">TypeWithoutFormatter&lt;T, kConvertibleToStringView&gt;::PrintValue</a>(</div><div class="line"><a name="l08962"></a><span class="lineno"> 8962</span>&#160; <span class="keyword">const</span> T&amp; value, ::std::ostream* os) {</div><div class="line"><a name="l08963"></a><span class="lineno"> 8963</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">internal::PrintTo</a>(absl::string_view(value), os);</div><div class="line"><a name="l08964"></a><span class="lineno"> 8964</span>&#160;}</div><div class="line"><a name="l08965"></a><span class="lineno"> 8965</span>&#160;} <span class="comment">// namespace internal2</span></div><div class="line"><a name="l08966"></a><span class="lineno"> 8966</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l08967"></a><span class="lineno"> 8967</span>&#160;</div><div class="line"><a name="l08968"></a><span class="lineno"> 8968</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l08969"></a><span class="lineno"><a class="line" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed"> 8969</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">::std::string</a> <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">PrintToString</a>(<span class="keyword">const</span> T&amp; value) {</div><div class="line"><a name="l08970"></a><span class="lineno"> 8970</span>&#160; ::std::stringstream ss;</div><div class="line"><a name="l08971"></a><span class="lineno"> 8971</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">internal::UniversalTersePrinter&lt;T&gt;::Print</a>(value, &amp;ss);</div><div class="line"><a name="l08972"></a><span class="lineno"> 8972</span>&#160; <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l08973"></a><span class="lineno"> 8973</span>&#160;}</div><div class="line"><a name="l08974"></a><span class="lineno"> 8974</span>&#160;</div><div class="line"><a name="l08975"></a><span class="lineno"> 8975</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l08976"></a><span class="lineno"> 8976</span>&#160;</div><div class="line"><a name="l08977"></a><span class="lineno"> 8977</span>&#160;<span class="comment">// Include any custom printer added by the local installation.</span></div><div class="line"><a name="l08978"></a><span class="lineno"> 8978</span>&#160;<span class="comment">// We must include this header at the end to make sure it can use the</span></div><div class="line"><a name="l08979"></a><span class="lineno"> 8979</span>&#160;<span class="comment">// declarations from this file.</span></div><div class="line"><a name="l08980"></a><span class="lineno"> 8980</span>&#160;<span class="comment">// Copyright 2015, Google Inc.</span></div><div class="line"><a name="l08981"></a><span class="lineno"> 8981</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l08982"></a><span class="lineno"> 8982</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08983"></a><span class="lineno"> 8983</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l08984"></a><span class="lineno"> 8984</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l08985"></a><span class="lineno"> 8985</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l08986"></a><span class="lineno"> 8986</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08987"></a><span class="lineno"> 8987</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l08988"></a><span class="lineno"> 8988</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l08989"></a><span class="lineno"> 8989</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l08990"></a><span class="lineno"> 8990</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l08991"></a><span class="lineno"> 8991</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l08992"></a><span class="lineno"> 8992</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l08993"></a><span class="lineno"> 8993</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l08994"></a><span class="lineno"> 8994</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l08995"></a><span class="lineno"> 8995</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l08996"></a><span class="lineno"> 8996</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l08997"></a><span class="lineno"> 8997</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l08998"></a><span class="lineno"> 8998</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l08999"></a><span class="lineno"> 8999</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l09000"></a><span class="lineno"> 9000</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l09001"></a><span class="lineno"> 9001</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l09002"></a><span class="lineno"> 9002</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l09003"></a><span class="lineno"> 9003</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l09004"></a><span class="lineno"> 9004</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l09005"></a><span class="lineno"> 9005</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l09006"></a><span class="lineno"> 9006</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l09007"></a><span class="lineno"> 9007</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l09008"></a><span class="lineno"> 9008</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09009"></a><span class="lineno"> 9009</span>&#160;<span class="comment">// This file provides an injection point for custom printers in a local</span></div><div class="line"><a name="l09010"></a><span class="lineno"> 9010</span>&#160;<span class="comment">// installation of gTest.</span></div><div class="line"><a name="l09011"></a><span class="lineno"> 9011</span>&#160;<span class="comment">// It will be included from gtest-printers.h and the overrides in this file</span></div><div class="line"><a name="l09012"></a><span class="lineno"> 9012</span>&#160;<span class="comment">// will be visible to everyone.</span></div><div class="line"><a name="l09013"></a><span class="lineno"> 9013</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09014"></a><span class="lineno"> 9014</span>&#160;<span class="comment">// Injection point for custom user configurations. See README for details</span></div><div class="line"><a name="l09015"></a><span class="lineno"> 9015</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09016"></a><span class="lineno"> 9016</span>&#160;<span class="comment">// ** Custom implementation starts here **</span></div><div class="line"><a name="l09017"></a><span class="lineno"> 9017</span>&#160;</div><div class="line"><a name="l09018"></a><span class="lineno"> 9018</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l09019"></a><span class="lineno"><a class="line" href="gtest_8h.html#a790dd922b87864bf5b8d93a22853933c"> 9019</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l09020"></a><span class="lineno"> 9020</span>&#160;</div><div class="line"><a name="l09021"></a><span class="lineno"> 9021</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l09022"></a><span class="lineno"> 9022</span>&#160;</div><div class="line"><a name="l09023"></a><span class="lineno"> 9023</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_</span></div><div class="line"><a name="l09024"></a><span class="lineno"> 9024</span>&#160;</div><div class="line"><a name="l09025"></a><span class="lineno"> 9025</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(</div><div class="line"><a name="l09026"></a><span class="lineno"> 9026</span>&#160; 4251 5046 <span class="comment">/* class A needs to have dll-interface to be used by clients of</span></div><div class="line"><a name="l09027"></a><span class="lineno"> 9027</span>&#160;<span class="comment"> class B */</span></div><div class="line"><a name="l09028"></a><span class="lineno"> 9028</span>&#160; <span class="comment">/* Symbol involving type with internal linkage not defined */</span>)</div><div class="line"><a name="l09029"></a><span class="lineno"> 9029</span>&#160;</div><div class="line"><a name="l09030"></a><span class="lineno"> 9030</span>&#160;namespace <a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l09031"></a><span class="lineno"> 9031</span>&#160;</div><div class="line"><a name="l09032"></a><span class="lineno"> 9032</span>&#160;<span class="comment">// To implement a matcher Foo for type T, define:</span></div><div class="line"><a name="l09033"></a><span class="lineno"> 9033</span>&#160;<span class="comment">// 1. a class FooMatcherImpl that implements the</span></div><div class="line"><a name="l09034"></a><span class="lineno"> 9034</span>&#160;<span class="comment">// MatcherInterface&lt;T&gt; interface, and</span></div><div class="line"><a name="l09035"></a><span class="lineno"> 9035</span>&#160;<span class="comment">// 2. a factory function that creates a Matcher&lt;T&gt; object from a</span></div><div class="line"><a name="l09036"></a><span class="lineno"> 9036</span>&#160;<span class="comment">// FooMatcherImpl*.</span></div><div class="line"><a name="l09037"></a><span class="lineno"> 9037</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09038"></a><span class="lineno"> 9038</span>&#160;<span class="comment">// The two-level delegation design makes it possible to allow a user</span></div><div class="line"><a name="l09039"></a><span class="lineno"> 9039</span>&#160;<span class="comment">// to write &quot;v&quot; instead of &quot;Eq(v)&quot; where a Matcher is expected, which</span></div><div class="line"><a name="l09040"></a><span class="lineno"> 9040</span>&#160;<span class="comment">// is impossible if we pass matchers by pointers. It also eases</span></div><div class="line"><a name="l09041"></a><span class="lineno"> 9041</span>&#160;<span class="comment">// ownership management as Matcher objects can now be copied like</span></div><div class="line"><a name="l09042"></a><span class="lineno"> 9042</span>&#160;<span class="comment">// plain values.</span></div><div class="line"><a name="l09043"></a><span class="lineno"> 9043</span>&#160;</div><div class="line"><a name="l09044"></a><span class="lineno"> 9044</span>&#160;<span class="comment">// MatchResultListener is an abstract class. Its &lt;&lt; operator can be</span></div><div class="line"><a name="l09045"></a><span class="lineno"> 9045</span>&#160;<span class="comment">// used by a matcher to explain why a value matches or doesn&#39;t match.</span></div><div class="line"><a name="l09046"></a><span class="lineno"> 9046</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09047"></a><span class="lineno"> 9047</span>&#160;<span class="keyword">class </span>MatchResultListener {</div><div class="line"><a name="l09048"></a><span class="lineno"> 9048</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09049"></a><span class="lineno"> 9049</span>&#160; <span class="comment">// Creates a listener object with the given underlying ostream. The</span></div><div class="line"><a name="l09050"></a><span class="lineno"> 9050</span>&#160; <span class="comment">// listener does not own the ostream, and does not dereference it</span></div><div class="line"><a name="l09051"></a><span class="lineno"> 9051</span>&#160; <span class="comment">// in the constructor or destructor.</span></div><div class="line"><a name="l09052"></a><span class="lineno"> 9052</span>&#160; <span class="keyword">explicit</span> MatchResultListener(::std::ostream* os) : stream_(os) {}</div><div class="line"><a name="l09053"></a><span class="lineno"> 9053</span>&#160; <span class="keyword">virtual</span> ~MatchResultListener() = 0; <span class="comment">// Makes this class abstract.</span></div><div class="line"><a name="l09054"></a><span class="lineno"> 9054</span>&#160;</div><div class="line"><a name="l09055"></a><span class="lineno"> 9055</span>&#160; <span class="comment">// Streams x to the underlying ostream; does nothing if the ostream</span></div><div class="line"><a name="l09056"></a><span class="lineno"> 9056</span>&#160; <span class="comment">// is NULL.</span></div><div class="line"><a name="l09057"></a><span class="lineno"> 9057</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09058"></a><span class="lineno"> 9058</span>&#160; MatchResultListener&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator&lt;&lt;</a>(<span class="keyword">const</span> T&amp; x) {</div><div class="line"><a name="l09059"></a><span class="lineno"> 9059</span>&#160; <span class="keywordflow">if</span> (stream_ != <span class="keyword">nullptr</span>) *stream_ &lt;&lt; x;</div><div class="line"><a name="l09060"></a><span class="lineno"> 9060</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l09061"></a><span class="lineno"> 9061</span>&#160; }</div><div class="line"><a name="l09062"></a><span class="lineno"> 9062</span>&#160;</div><div class="line"><a name="l09063"></a><span class="lineno"> 9063</span>&#160; <span class="comment">// Returns the underlying ostream.</span></div><div class="line"><a name="l09064"></a><span class="lineno"> 9064</span>&#160; ::std::ostream* stream() { <span class="keywordflow">return</span> stream_; }</div><div class="line"><a name="l09065"></a><span class="lineno"> 9065</span>&#160;</div><div class="line"><a name="l09066"></a><span class="lineno"> 9066</span>&#160; <span class="comment">// Returns true iff the listener is interested in an explanation of</span></div><div class="line"><a name="l09067"></a><span class="lineno"> 9067</span>&#160; <span class="comment">// the match result. A matcher&#39;s MatchAndExplain() method can use</span></div><div class="line"><a name="l09068"></a><span class="lineno"> 9068</span>&#160; <span class="comment">// this information to avoid generating the explanation when no one</span></div><div class="line"><a name="l09069"></a><span class="lineno"> 9069</span>&#160; <span class="comment">// intends to hear it.</span></div><div class="line"><a name="l09070"></a><span class="lineno"> 9070</span>&#160; <span class="keywordtype">bool</span> IsInterested()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stream_ != <span class="keyword">nullptr</span>; }</div><div class="line"><a name="l09071"></a><span class="lineno"> 9071</span>&#160;</div><div class="line"><a name="l09072"></a><span class="lineno"> 9072</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09073"></a><span class="lineno"> 9073</span>&#160; ::std::ostream* <span class="keyword">const</span> stream_;</div><div class="line"><a name="l09074"></a><span class="lineno"> 9074</span>&#160;</div><div class="line"><a name="l09075"></a><span class="lineno"> 9075</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(MatchResultListener);</div><div class="line"><a name="l09076"></a><span class="lineno"> 9076</span>&#160;};</div><div class="line"><a name="l09077"></a><span class="lineno"> 9077</span>&#160;</div><div class="line"><a name="l09078"></a><span class="lineno"> 9078</span>&#160;<span class="keyword">inline</span> MatchResultListener::~MatchResultListener() {</div><div class="line"><a name="l09079"></a><span class="lineno"> 9079</span>&#160;}</div><div class="line"><a name="l09080"></a><span class="lineno"> 9080</span>&#160;</div><div class="line"><a name="l09081"></a><span class="lineno"> 9081</span>&#160;<span class="comment">// An instance of a subclass of this knows how to describe itself as a</span></div><div class="line"><a name="l09082"></a><span class="lineno"> 9082</span>&#160;<span class="comment">// matcher.</span></div><div class="line"><a name="l09083"></a><span class="lineno"> 9083</span>&#160;<span class="keyword">class </span>MatcherDescriberInterface {</div><div class="line"><a name="l09084"></a><span class="lineno"> 9084</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09085"></a><span class="lineno"> 9085</span>&#160; <span class="keyword">virtual</span> ~MatcherDescriberInterface() {}</div><div class="line"><a name="l09086"></a><span class="lineno"> 9086</span>&#160;</div><div class="line"><a name="l09087"></a><span class="lineno"> 9087</span>&#160; <span class="comment">// Describes this matcher to an ostream. The function should print</span></div><div class="line"><a name="l09088"></a><span class="lineno"> 9088</span>&#160; <span class="comment">// a verb phrase that describes the property a value matching this</span></div><div class="line"><a name="l09089"></a><span class="lineno"> 9089</span>&#160; <span class="comment">// matcher should have. The subject of the verb phrase is the value</span></div><div class="line"><a name="l09090"></a><span class="lineno"> 9090</span>&#160; <span class="comment">// being matched. For example, the DescribeTo() method of the Gt(7)</span></div><div class="line"><a name="l09091"></a><span class="lineno"> 9091</span>&#160; <span class="comment">// matcher prints &quot;is greater than 7&quot;.</span></div><div class="line"><a name="l09092"></a><span class="lineno"> 9092</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DescribeTo(::std::ostream* os) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l09093"></a><span class="lineno"> 9093</span>&#160;</div><div class="line"><a name="l09094"></a><span class="lineno"> 9094</span>&#160; <span class="comment">// Describes the negation of this matcher to an ostream. For</span></div><div class="line"><a name="l09095"></a><span class="lineno"> 9095</span>&#160; <span class="comment">// example, if the description of this matcher is &quot;is greater than</span></div><div class="line"><a name="l09096"></a><span class="lineno"> 9096</span>&#160; <span class="comment">// 7&quot;, the negated description could be &quot;is not greater than 7&quot;.</span></div><div class="line"><a name="l09097"></a><span class="lineno"> 9097</span>&#160; <span class="comment">// You are not required to override this when implementing</span></div><div class="line"><a name="l09098"></a><span class="lineno"> 9098</span>&#160; <span class="comment">// MatcherInterface, but it is highly advised so that your matcher</span></div><div class="line"><a name="l09099"></a><span class="lineno"> 9099</span>&#160; <span class="comment">// can produce good error messages.</span></div><div class="line"><a name="l09100"></a><span class="lineno"> 9100</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09101"></a><span class="lineno"> 9101</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;not (&quot;</span>;</div><div class="line"><a name="l09102"></a><span class="lineno"> 9102</span>&#160; DescribeTo(os);</div><div class="line"><a name="l09103"></a><span class="lineno"> 9103</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l09104"></a><span class="lineno"> 9104</span>&#160; }</div><div class="line"><a name="l09105"></a><span class="lineno"> 9105</span>&#160;};</div><div class="line"><a name="l09106"></a><span class="lineno"> 9106</span>&#160;</div><div class="line"><a name="l09107"></a><span class="lineno"> 9107</span>&#160;<span class="comment">// The implementation of a matcher.</span></div><div class="line"><a name="l09108"></a><span class="lineno"> 9108</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09109"></a><span class="lineno"> 9109</span>&#160;<span class="keyword">class </span>MatcherInterface : <span class="keyword">public</span> MatcherDescriberInterface {</div><div class="line"><a name="l09110"></a><span class="lineno"> 9110</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09111"></a><span class="lineno"> 9111</span>&#160; <span class="comment">// Returns true iff the matcher matches x; also explains the match</span></div><div class="line"><a name="l09112"></a><span class="lineno"> 9112</span>&#160; <span class="comment">// result to &#39;listener&#39; if necessary (see the next paragraph), in</span></div><div class="line"><a name="l09113"></a><span class="lineno"> 9113</span>&#160; <span class="comment">// the form of a non-restrictive relative clause (&quot;which ...&quot;,</span></div><div class="line"><a name="l09114"></a><span class="lineno"> 9114</span>&#160; <span class="comment">// &quot;whose ...&quot;, etc) that describes x. For example, the</span></div><div class="line"><a name="l09115"></a><span class="lineno"> 9115</span>&#160; <span class="comment">// MatchAndExplain() method of the Pointee(...) matcher should</span></div><div class="line"><a name="l09116"></a><span class="lineno"> 9116</span>&#160; <span class="comment">// generate an explanation like &quot;which points to ...&quot;.</span></div><div class="line"><a name="l09117"></a><span class="lineno"> 9117</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l09118"></a><span class="lineno"> 9118</span>&#160; <span class="comment">// Implementations of MatchAndExplain() should add an explanation of</span></div><div class="line"><a name="l09119"></a><span class="lineno"> 9119</span>&#160; <span class="comment">// the match result *if and only if* they can provide additional</span></div><div class="line"><a name="l09120"></a><span class="lineno"> 9120</span>&#160; <span class="comment">// information that&#39;s not already present (or not obvious) in the</span></div><div class="line"><a name="l09121"></a><span class="lineno"> 9121</span>&#160; <span class="comment">// print-out of x and the matcher&#39;s description. Whether the match</span></div><div class="line"><a name="l09122"></a><span class="lineno"> 9122</span>&#160; <span class="comment">// succeeds is not a factor in deciding whether an explanation is</span></div><div class="line"><a name="l09123"></a><span class="lineno"> 9123</span>&#160; <span class="comment">// needed, as sometimes the caller needs to print a failure message</span></div><div class="line"><a name="l09124"></a><span class="lineno"> 9124</span>&#160; <span class="comment">// when the match succeeds (e.g. when the matcher is used inside</span></div><div class="line"><a name="l09125"></a><span class="lineno"> 9125</span>&#160; <span class="comment">// Not()).</span></div><div class="line"><a name="l09126"></a><span class="lineno"> 9126</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l09127"></a><span class="lineno"> 9127</span>&#160; <span class="comment">// For example, a &quot;has at least 10 elements&quot; matcher should explain</span></div><div class="line"><a name="l09128"></a><span class="lineno"> 9128</span>&#160; <span class="comment">// what the actual element count is, regardless of the match result,</span></div><div class="line"><a name="l09129"></a><span class="lineno"> 9129</span>&#160; <span class="comment">// as it is useful information to the reader; on the other hand, an</span></div><div class="line"><a name="l09130"></a><span class="lineno"> 9130</span>&#160; <span class="comment">// &quot;is empty&quot; matcher probably only needs to explain what the actual</span></div><div class="line"><a name="l09131"></a><span class="lineno"> 9131</span>&#160; <span class="comment">// size is when the match fails, as it&#39;s redundant to say that the</span></div><div class="line"><a name="l09132"></a><span class="lineno"> 9132</span>&#160; <span class="comment">// size is 0 when the value is already known to be empty.</span></div><div class="line"><a name="l09133"></a><span class="lineno"> 9133</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l09134"></a><span class="lineno"> 9134</span>&#160; <span class="comment">// You should override this method when defining a new matcher.</span></div><div class="line"><a name="l09135"></a><span class="lineno"> 9135</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l09136"></a><span class="lineno"> 9136</span>&#160; <span class="comment">// It&#39;s the responsibility of the caller (Google Test) to guarantee</span></div><div class="line"><a name="l09137"></a><span class="lineno"> 9137</span>&#160; <span class="comment">// that &#39;listener&#39; is not NULL. This helps to simplify a matcher&#39;s</span></div><div class="line"><a name="l09138"></a><span class="lineno"> 9138</span>&#160; <span class="comment">// implementation when it doesn&#39;t care about the performance, as it</span></div><div class="line"><a name="l09139"></a><span class="lineno"> 9139</span>&#160; <span class="comment">// can talk to &#39;listener&#39; without checking its validity first.</span></div><div class="line"><a name="l09140"></a><span class="lineno"> 9140</span>&#160; <span class="comment">// However, in order to implement dummy listeners efficiently,</span></div><div class="line"><a name="l09141"></a><span class="lineno"> 9141</span>&#160; <span class="comment">// listener-&gt;stream() may be NULL.</span></div><div class="line"><a name="l09142"></a><span class="lineno"> 9142</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> MatchAndExplain(T x, MatchResultListener* listener) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l09143"></a><span class="lineno"> 9143</span>&#160;</div><div class="line"><a name="l09144"></a><span class="lineno"> 9144</span>&#160; <span class="comment">// Inherits these methods from MatcherDescriberInterface:</span></div><div class="line"><a name="l09145"></a><span class="lineno"> 9145</span>&#160; <span class="comment">// virtual void DescribeTo(::std::ostream* os) const = 0;</span></div><div class="line"><a name="l09146"></a><span class="lineno"> 9146</span>&#160; <span class="comment">// virtual void DescribeNegationTo(::std::ostream* os) const;</span></div><div class="line"><a name="l09147"></a><span class="lineno"> 9147</span>&#160;};</div><div class="line"><a name="l09148"></a><span class="lineno"> 9148</span>&#160;</div><div class="line"><a name="l09149"></a><span class="lineno"> 9149</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l09150"></a><span class="lineno"> 9150</span>&#160;</div><div class="line"><a name="l09151"></a><span class="lineno"> 9151</span>&#160;<span class="comment">// Converts a MatcherInterface&lt;T&gt; to a MatcherInterface&lt;const T&amp;&gt;.</span></div><div class="line"><a name="l09152"></a><span class="lineno"> 9152</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09153"></a><span class="lineno"> 9153</span>&#160;<span class="keyword">class </span>MatcherInterfaceAdapter : <span class="keyword">public</span> MatcherInterface&lt;const T&amp;&gt; {</div><div class="line"><a name="l09154"></a><span class="lineno"> 9154</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09155"></a><span class="lineno"> 9155</span>&#160; <span class="keyword">explicit</span> MatcherInterfaceAdapter(<span class="keyword">const</span> MatcherInterface&lt;T&gt;* impl)</div><div class="line"><a name="l09156"></a><span class="lineno"> 9156</span>&#160; : impl_(impl) {}</div><div class="line"><a name="l09157"></a><span class="lineno"> 9157</span>&#160; ~MatcherInterfaceAdapter()<span class="keyword"> override </span>{ <span class="keyword">delete</span> impl_; }</div><div class="line"><a name="l09158"></a><span class="lineno"> 9158</span>&#160;</div><div class="line"><a name="l09159"></a><span class="lineno"> 9159</span>&#160; <span class="keywordtype">void</span> DescribeTo(::std::ostream* os)<span class="keyword"> const override </span>{ impl_-&gt;DescribeTo(os); }</div><div class="line"><a name="l09160"></a><span class="lineno"> 9160</span>&#160;</div><div class="line"><a name="l09161"></a><span class="lineno"> 9161</span>&#160; <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const override </span>{</div><div class="line"><a name="l09162"></a><span class="lineno"> 9162</span>&#160; impl_-&gt;DescribeNegationTo(os);</div><div class="line"><a name="l09163"></a><span class="lineno"> 9163</span>&#160; }</div><div class="line"><a name="l09164"></a><span class="lineno"> 9164</span>&#160;</div><div class="line"><a name="l09165"></a><span class="lineno"> 9165</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(<span class="keyword">const</span> T&amp; x,</div><div class="line"><a name="l09166"></a><span class="lineno"> 9166</span>&#160; MatchResultListener* listener)<span class="keyword"> const override </span>{</div><div class="line"><a name="l09167"></a><span class="lineno"> 9167</span>&#160; <span class="keywordflow">return</span> impl_-&gt;MatchAndExplain(x, listener);</div><div class="line"><a name="l09168"></a><span class="lineno"> 9168</span>&#160; }</div><div class="line"><a name="l09169"></a><span class="lineno"> 9169</span>&#160;</div><div class="line"><a name="l09170"></a><span class="lineno"> 9170</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09171"></a><span class="lineno"> 9171</span>&#160; <span class="keyword">const</span> MatcherInterface&lt;T&gt;* <span class="keyword">const</span> impl_;</div><div class="line"><a name="l09172"></a><span class="lineno"> 9172</span>&#160;</div><div class="line"><a name="l09173"></a><span class="lineno"> 9173</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(MatcherInterfaceAdapter);</div><div class="line"><a name="l09174"></a><span class="lineno"> 9174</span>&#160;};</div><div class="line"><a name="l09175"></a><span class="lineno"> 9175</span>&#160;</div><div class="line"><a name="l09176"></a><span class="lineno"> 9176</span>&#160;<span class="keyword">struct </span>AnyEq {</div><div class="line"><a name="l09177"></a><span class="lineno"> 9177</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09178"></a><span class="lineno"> 9178</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a == b; }</div><div class="line"><a name="l09179"></a><span class="lineno"> 9179</span>&#160;};</div><div class="line"><a name="l09180"></a><span class="lineno"> 9180</span>&#160;<span class="keyword">struct </span>AnyNe {</div><div class="line"><a name="l09181"></a><span class="lineno"> 9181</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09182"></a><span class="lineno"> 9182</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a != b; }</div><div class="line"><a name="l09183"></a><span class="lineno"> 9183</span>&#160;};</div><div class="line"><a name="l09184"></a><span class="lineno"> 9184</span>&#160;<span class="keyword">struct </span>AnyLt {</div><div class="line"><a name="l09185"></a><span class="lineno"> 9185</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09186"></a><span class="lineno"> 9186</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a &lt; b; }</div><div class="line"><a name="l09187"></a><span class="lineno"> 9187</span>&#160;};</div><div class="line"><a name="l09188"></a><span class="lineno"> 9188</span>&#160;<span class="keyword">struct </span>AnyGt {</div><div class="line"><a name="l09189"></a><span class="lineno"> 9189</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09190"></a><span class="lineno"> 9190</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a &gt; b; }</div><div class="line"><a name="l09191"></a><span class="lineno"> 9191</span>&#160;};</div><div class="line"><a name="l09192"></a><span class="lineno"> 9192</span>&#160;<span class="keyword">struct </span>AnyLe {</div><div class="line"><a name="l09193"></a><span class="lineno"> 9193</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09194"></a><span class="lineno"> 9194</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a &lt;= b; }</div><div class="line"><a name="l09195"></a><span class="lineno"> 9195</span>&#160;};</div><div class="line"><a name="l09196"></a><span class="lineno"> 9196</span>&#160;<span class="keyword">struct </span>AnyGe {</div><div class="line"><a name="l09197"></a><span class="lineno"> 9197</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> A, <span class="keyword">typename</span> B&gt;</div><div class="line"><a name="l09198"></a><span class="lineno"> 9198</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keyword">const</span> A&amp; a, <span class="keyword">const</span> B&amp; b)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> a &gt;= b; }</div><div class="line"><a name="l09199"></a><span class="lineno"> 9199</span>&#160;};</div><div class="line"><a name="l09200"></a><span class="lineno"> 9200</span>&#160;</div><div class="line"><a name="l09201"></a><span class="lineno"> 9201</span>&#160;<span class="comment">// A match result listener that ignores the explanation.</span></div><div class="line"><a name="l09202"></a><span class="lineno"> 9202</span>&#160;<span class="keyword">class </span>DummyMatchResultListener : <span class="keyword">public</span> MatchResultListener {</div><div class="line"><a name="l09203"></a><span class="lineno"> 9203</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09204"></a><span class="lineno"> 9204</span>&#160; DummyMatchResultListener() : MatchResultListener(<span class="keyword">nullptr</span>) {}</div><div class="line"><a name="l09205"></a><span class="lineno"> 9205</span>&#160;</div><div class="line"><a name="l09206"></a><span class="lineno"> 9206</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09207"></a><span class="lineno"> 9207</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(DummyMatchResultListener);</div><div class="line"><a name="l09208"></a><span class="lineno"> 9208</span>&#160;};</div><div class="line"><a name="l09209"></a><span class="lineno"> 9209</span>&#160;</div><div class="line"><a name="l09210"></a><span class="lineno"> 9210</span>&#160;<span class="comment">// A match result listener that forwards the explanation to a given</span></div><div class="line"><a name="l09211"></a><span class="lineno"> 9211</span>&#160;<span class="comment">// ostream. The difference between this and MatchResultListener is</span></div><div class="line"><a name="l09212"></a><span class="lineno"> 9212</span>&#160;<span class="comment">// that the former is concrete.</span></div><div class="line"><a name="l09213"></a><span class="lineno"> 9213</span>&#160;<span class="keyword">class </span>StreamMatchResultListener : <span class="keyword">public</span> MatchResultListener {</div><div class="line"><a name="l09214"></a><span class="lineno"> 9214</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09215"></a><span class="lineno"> 9215</span>&#160; <span class="keyword">explicit</span> StreamMatchResultListener(::std::ostream* os)</div><div class="line"><a name="l09216"></a><span class="lineno"> 9216</span>&#160; : MatchResultListener(os) {}</div><div class="line"><a name="l09217"></a><span class="lineno"> 9217</span>&#160;</div><div class="line"><a name="l09218"></a><span class="lineno"> 9218</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09219"></a><span class="lineno"> 9219</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(StreamMatchResultListener);</div><div class="line"><a name="l09220"></a><span class="lineno"> 9220</span>&#160;};</div><div class="line"><a name="l09221"></a><span class="lineno"> 9221</span>&#160;</div><div class="line"><a name="l09222"></a><span class="lineno"> 9222</span>&#160;<span class="comment">// An internal class for implementing Matcher&lt;T&gt;, which will derive</span></div><div class="line"><a name="l09223"></a><span class="lineno"> 9223</span>&#160;<span class="comment">// from it. We put functionalities common to all Matcher&lt;T&gt;</span></div><div class="line"><a name="l09224"></a><span class="lineno"> 9224</span>&#160;<span class="comment">// specializations here to avoid code duplication.</span></div><div class="line"><a name="l09225"></a><span class="lineno"> 9225</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09226"></a><span class="lineno"> 9226</span>&#160;<span class="keyword">class </span>MatcherBase {</div><div class="line"><a name="l09227"></a><span class="lineno"> 9227</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09228"></a><span class="lineno"> 9228</span>&#160; <span class="comment">// Returns true iff the matcher matches x; also explains the match</span></div><div class="line"><a name="l09229"></a><span class="lineno"> 9229</span>&#160; <span class="comment">// result to &#39;listener&#39;.</span></div><div class="line"><a name="l09230"></a><span class="lineno"> 9230</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(<span class="keyword">const</span> T&amp; x, MatchResultListener* listener)<span class="keyword"> const </span>{</div><div class="line"><a name="l09231"></a><span class="lineno"> 9231</span>&#160; <span class="keywordflow">return</span> impl_-&gt;MatchAndExplain(x, listener);</div><div class="line"><a name="l09232"></a><span class="lineno"> 9232</span>&#160; }</div><div class="line"><a name="l09233"></a><span class="lineno"> 9233</span>&#160;</div><div class="line"><a name="l09234"></a><span class="lineno"> 9234</span>&#160; <span class="comment">// Returns true iff this matcher matches x.</span></div><div class="line"><a name="l09235"></a><span class="lineno"> 9235</span>&#160; <span class="keywordtype">bool</span> Matches(<span class="keyword">const</span> T&amp; x)<span class="keyword"> const </span>{</div><div class="line"><a name="l09236"></a><span class="lineno"> 9236</span>&#160; DummyMatchResultListener dummy;</div><div class="line"><a name="l09237"></a><span class="lineno"> 9237</span>&#160; <span class="keywordflow">return</span> MatchAndExplain(x, &amp;dummy);</div><div class="line"><a name="l09238"></a><span class="lineno"> 9238</span>&#160; }</div><div class="line"><a name="l09239"></a><span class="lineno"> 9239</span>&#160;</div><div class="line"><a name="l09240"></a><span class="lineno"> 9240</span>&#160; <span class="comment">// Describes this matcher to an ostream.</span></div><div class="line"><a name="l09241"></a><span class="lineno"> 9241</span>&#160; <span class="keywordtype">void</span> DescribeTo(::std::ostream* os)<span class="keyword"> const </span>{ impl_-&gt;DescribeTo(os); }</div><div class="line"><a name="l09242"></a><span class="lineno"> 9242</span>&#160;</div><div class="line"><a name="l09243"></a><span class="lineno"> 9243</span>&#160; <span class="comment">// Describes the negation of this matcher to an ostream.</span></div><div class="line"><a name="l09244"></a><span class="lineno"> 9244</span>&#160; <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09245"></a><span class="lineno"> 9245</span>&#160; impl_-&gt;DescribeNegationTo(os);</div><div class="line"><a name="l09246"></a><span class="lineno"> 9246</span>&#160; }</div><div class="line"><a name="l09247"></a><span class="lineno"> 9247</span>&#160;</div><div class="line"><a name="l09248"></a><span class="lineno"> 9248</span>&#160; <span class="comment">// Explains why x matches, or doesn&#39;t match, the matcher.</span></div><div class="line"><a name="l09249"></a><span class="lineno"> 9249</span>&#160; <span class="keywordtype">void</span> ExplainMatchResultTo(<span class="keyword">const</span> T&amp; x, ::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09250"></a><span class="lineno"> 9250</span>&#160; StreamMatchResultListener listener(os);</div><div class="line"><a name="l09251"></a><span class="lineno"> 9251</span>&#160; MatchAndExplain(x, &amp;listener);</div><div class="line"><a name="l09252"></a><span class="lineno"> 9252</span>&#160; }</div><div class="line"><a name="l09253"></a><span class="lineno"> 9253</span>&#160;</div><div class="line"><a name="l09254"></a><span class="lineno"> 9254</span>&#160; <span class="comment">// Returns the describer for this matcher object; retains ownership</span></div><div class="line"><a name="l09255"></a><span class="lineno"> 9255</span>&#160; <span class="comment">// of the describer, which is only guaranteed to be alive when</span></div><div class="line"><a name="l09256"></a><span class="lineno"> 9256</span>&#160; <span class="comment">// this matcher object is alive.</span></div><div class="line"><a name="l09257"></a><span class="lineno"> 9257</span>&#160; <span class="keyword">const</span> MatcherDescriberInterface* GetDescriber()<span class="keyword"> const </span>{</div><div class="line"><a name="l09258"></a><span class="lineno"> 9258</span>&#160; <span class="keywordflow">return</span> impl_.get();</div><div class="line"><a name="l09259"></a><span class="lineno"> 9259</span>&#160; }</div><div class="line"><a name="l09260"></a><span class="lineno"> 9260</span>&#160;</div><div class="line"><a name="l09261"></a><span class="lineno"> 9261</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l09262"></a><span class="lineno"> 9262</span>&#160; MatcherBase() {}</div><div class="line"><a name="l09263"></a><span class="lineno"> 9263</span>&#160;</div><div class="line"><a name="l09264"></a><span class="lineno"> 9264</span>&#160; <span class="comment">// Constructs a matcher from its implementation.</span></div><div class="line"><a name="l09265"></a><span class="lineno"> 9265</span>&#160; <span class="keyword">explicit</span> MatcherBase(<span class="keyword">const</span> MatcherInterface&lt;const T&amp;&gt;* impl) : impl_(impl) {}</div><div class="line"><a name="l09266"></a><span class="lineno"> 9266</span>&#160;</div><div class="line"><a name="l09267"></a><span class="lineno"> 9267</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l09268"></a><span class="lineno"> 9268</span>&#160; <span class="keyword">explicit</span> MatcherBase(</div><div class="line"><a name="l09269"></a><span class="lineno"> 9269</span>&#160; <span class="keyword">const</span> MatcherInterface&lt;U&gt;* impl,</div><div class="line"><a name="l09270"></a><span class="lineno"> 9270</span>&#160; <span class="keyword">typename</span> internal::EnableIf&lt;</div><div class="line"><a name="l09271"></a><span class="lineno"> 9271</span>&#160; !internal::IsSame&lt;U, const U&amp;&gt;::value&gt;::type* = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l09272"></a><span class="lineno"> 9272</span>&#160; : impl_(<span class="keyword">new</span> internal::MatcherInterfaceAdapter&lt;U&gt;(impl)) {}</div><div class="line"><a name="l09273"></a><span class="lineno"> 9273</span>&#160;</div><div class="line"><a name="l09274"></a><span class="lineno"> 9274</span>&#160; <span class="keyword">virtual</span> ~MatcherBase() {}</div><div class="line"><a name="l09275"></a><span class="lineno"> 9275</span>&#160;</div><div class="line"><a name="l09276"></a><span class="lineno"> 9276</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09277"></a><span class="lineno"> 9277</span>&#160; std::shared_ptr&lt;const MatcherInterface&lt;const T&amp;&gt;&gt; impl_;</div><div class="line"><a name="l09278"></a><span class="lineno"> 9278</span>&#160;};</div><div class="line"><a name="l09279"></a><span class="lineno"> 9279</span>&#160;</div><div class="line"><a name="l09280"></a><span class="lineno"> 9280</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l09281"></a><span class="lineno"> 9281</span>&#160;</div><div class="line"><a name="l09282"></a><span class="lineno"> 9282</span>&#160;<span class="comment">// A Matcher&lt;T&gt; is a copyable and IMMUTABLE (except by assignment)</span></div><div class="line"><a name="l09283"></a><span class="lineno"> 9283</span>&#160;<span class="comment">// object that can check whether a value of type T matches. The</span></div><div class="line"><a name="l09284"></a><span class="lineno"> 9284</span>&#160;<span class="comment">// implementation of Matcher&lt;T&gt; is just a std::shared_ptr to const</span></div><div class="line"><a name="l09285"></a><span class="lineno"> 9285</span>&#160;<span class="comment">// MatcherInterface&lt;T&gt;. Don&#39;t inherit from Matcher!</span></div><div class="line"><a name="l09286"></a><span class="lineno"> 9286</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09287"></a><span class="lineno"> 9287</span>&#160;<span class="keyword">class </span>Matcher : <span class="keyword">public</span> internal::MatcherBase&lt;T&gt; {</div><div class="line"><a name="l09288"></a><span class="lineno"> 9288</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09289"></a><span class="lineno"> 9289</span>&#160; <span class="comment">// Constructs a null matcher. Needed for storing Matcher objects in STL</span></div><div class="line"><a name="l09290"></a><span class="lineno"> 9290</span>&#160; <span class="comment">// containers. A default-constructed matcher is not yet initialized. You</span></div><div class="line"><a name="l09291"></a><span class="lineno"> 9291</span>&#160; <span class="comment">// cannot use it until a valid value has been assigned to it.</span></div><div class="line"><a name="l09292"></a><span class="lineno"> 9292</span>&#160; <span class="keyword">explicit</span> Matcher() {} <span class="comment">// NOLINT</span></div><div class="line"><a name="l09293"></a><span class="lineno"> 9293</span>&#160;</div><div class="line"><a name="l09294"></a><span class="lineno"> 9294</span>&#160; <span class="comment">// Constructs a matcher from its implementation.</span></div><div class="line"><a name="l09295"></a><span class="lineno"> 9295</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const T&amp;&gt;* impl)</div><div class="line"><a name="l09296"></a><span class="lineno"> 9296</span>&#160; : internal::MatcherBase&lt;T&gt;(impl) {}</div><div class="line"><a name="l09297"></a><span class="lineno"> 9297</span>&#160;</div><div class="line"><a name="l09298"></a><span class="lineno"> 9298</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U&gt;</div><div class="line"><a name="l09299"></a><span class="lineno"> 9299</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;U&gt;* impl,</div><div class="line"><a name="l09300"></a><span class="lineno"> 9300</span>&#160; <span class="keyword">typename</span> internal::EnableIf&lt;</div><div class="line"><a name="l09301"></a><span class="lineno"> 9301</span>&#160; !internal::IsSame&lt;U, const U&amp;&gt;::value&gt;::type* = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l09302"></a><span class="lineno"> 9302</span>&#160; : internal::MatcherBase&lt;T&gt;(impl) {}</div><div class="line"><a name="l09303"></a><span class="lineno"> 9303</span>&#160;</div><div class="line"><a name="l09304"></a><span class="lineno"> 9304</span>&#160; <span class="comment">// Implicit constructor here allows people to write</span></div><div class="line"><a name="l09305"></a><span class="lineno"> 9305</span>&#160; <span class="comment">// EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes</span></div><div class="line"><a name="l09306"></a><span class="lineno"> 9306</span>&#160; Matcher(T value); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09307"></a><span class="lineno"> 9307</span>&#160;};</div><div class="line"><a name="l09308"></a><span class="lineno"> 9308</span>&#160;</div><div class="line"><a name="l09309"></a><span class="lineno"> 9309</span>&#160;<span class="comment">// The following two specializations allow the user to write str</span></div><div class="line"><a name="l09310"></a><span class="lineno"> 9310</span>&#160;<span class="comment">// instead of Eq(str) and &quot;foo&quot; instead of Eq(&quot;foo&quot;) when a std::string</span></div><div class="line"><a name="l09311"></a><span class="lineno"> 9311</span>&#160;<span class="comment">// matcher is expected.</span></div><div class="line"><a name="l09312"></a><span class="lineno"> 9312</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09313"></a><span class="lineno"> 9313</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt;const std::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>&amp;&gt;</div><div class="line"><a name="l09314"></a><span class="lineno"> 9314</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt;const std::string&amp;&gt; {</div><div class="line"><a name="l09315"></a><span class="lineno"> 9315</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09316"></a><span class="lineno"> 9316</span>&#160; Matcher() {}</div><div class="line"><a name="l09317"></a><span class="lineno"> 9317</span>&#160;</div><div class="line"><a name="l09318"></a><span class="lineno"> 9318</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const std::string&amp;&gt;* impl)</div><div class="line"><a name="l09319"></a><span class="lineno"> 9319</span>&#160; : internal::MatcherBase&lt;const std::string&amp;&gt;(impl) {}</div><div class="line"><a name="l09320"></a><span class="lineno"> 9320</span>&#160;</div><div class="line"><a name="l09321"></a><span class="lineno"> 9321</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09322"></a><span class="lineno"> 9322</span>&#160; <span class="comment">// str is a std::string object.</span></div><div class="line"><a name="l09323"></a><span class="lineno"> 9323</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09324"></a><span class="lineno"> 9324</span>&#160;</div><div class="line"><a name="l09325"></a><span class="lineno"> 9325</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09326"></a><span class="lineno"> 9326</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09327"></a><span class="lineno"> 9327</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09328"></a><span class="lineno"> 9328</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09329"></a><span class="lineno"> 9329</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09330"></a><span class="lineno"> 9330</span>&#160;</div><div class="line"><a name="l09331"></a><span class="lineno"> 9331</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09332"></a><span class="lineno"> 9332</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09333"></a><span class="lineno"> 9333</span>&#160;};</div><div class="line"><a name="l09334"></a><span class="lineno"> 9334</span>&#160;</div><div class="line"><a name="l09335"></a><span class="lineno"> 9335</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09336"></a><span class="lineno"> 9336</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt;std::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>&gt;</div><div class="line"><a name="l09337"></a><span class="lineno"> 9337</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt;std::string&gt; {</div><div class="line"><a name="l09338"></a><span class="lineno"> 9338</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09339"></a><span class="lineno"> 9339</span>&#160; Matcher() {}</div><div class="line"><a name="l09340"></a><span class="lineno"> 9340</span>&#160;</div><div class="line"><a name="l09341"></a><span class="lineno"> 9341</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const std::string&amp;&gt;* impl)</div><div class="line"><a name="l09342"></a><span class="lineno"> 9342</span>&#160; : internal::MatcherBase&lt;std::string&gt;(impl) {}</div><div class="line"><a name="l09343"></a><span class="lineno"> 9343</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;std::string&gt;* impl)</div><div class="line"><a name="l09344"></a><span class="lineno"> 9344</span>&#160; : internal::MatcherBase&lt;std::string&gt;(impl) {}</div><div class="line"><a name="l09345"></a><span class="lineno"> 9345</span>&#160;</div><div class="line"><a name="l09346"></a><span class="lineno"> 9346</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09347"></a><span class="lineno"> 9347</span>&#160; <span class="comment">// str is a string object.</span></div><div class="line"><a name="l09348"></a><span class="lineno"> 9348</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09349"></a><span class="lineno"> 9349</span>&#160;</div><div class="line"><a name="l09350"></a><span class="lineno"> 9350</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09351"></a><span class="lineno"> 9351</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09352"></a><span class="lineno"> 9352</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09353"></a><span class="lineno"> 9353</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09354"></a><span class="lineno"> 9354</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09355"></a><span class="lineno"> 9355</span>&#160;</div><div class="line"><a name="l09356"></a><span class="lineno"> 9356</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09357"></a><span class="lineno"> 9357</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09358"></a><span class="lineno"> 9358</span>&#160;};</div><div class="line"><a name="l09359"></a><span class="lineno"> 9359</span>&#160;</div><div class="line"><a name="l09360"></a><span class="lineno"> 9360</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09361"></a><span class="lineno"> 9361</span>&#160;<span class="comment">// The following two specializations allow the user to write str</span></div><div class="line"><a name="l09362"></a><span class="lineno"> 9362</span>&#160;<span class="comment">// instead of Eq(str) and &quot;foo&quot; instead of Eq(&quot;foo&quot;) when a ::string</span></div><div class="line"><a name="l09363"></a><span class="lineno"> 9363</span>&#160;<span class="comment">// matcher is expected.</span></div><div class="line"><a name="l09364"></a><span class="lineno"> 9364</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09365"></a><span class="lineno"> 9365</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt;const ::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>&amp;&gt;</div><div class="line"><a name="l09366"></a><span class="lineno"> 9366</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt;const ::string&amp;&gt; {</div><div class="line"><a name="l09367"></a><span class="lineno"> 9367</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09368"></a><span class="lineno"> 9368</span>&#160; Matcher() {}</div><div class="line"><a name="l09369"></a><span class="lineno"> 9369</span>&#160;</div><div class="line"><a name="l09370"></a><span class="lineno"> 9370</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const ::string&amp;&gt;* impl)</div><div class="line"><a name="l09371"></a><span class="lineno"> 9371</span>&#160; : internal::MatcherBase&lt;const ::string&amp;&gt;(impl) {}</div><div class="line"><a name="l09372"></a><span class="lineno"> 9372</span>&#160;</div><div class="line"><a name="l09373"></a><span class="lineno"> 9373</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09374"></a><span class="lineno"> 9374</span>&#160; <span class="comment">// str is a std::string object.</span></div><div class="line"><a name="l09375"></a><span class="lineno"> 9375</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09376"></a><span class="lineno"> 9376</span>&#160;</div><div class="line"><a name="l09377"></a><span class="lineno"> 9377</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09378"></a><span class="lineno"> 9378</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09379"></a><span class="lineno"> 9379</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09380"></a><span class="lineno"> 9380</span>&#160;</div><div class="line"><a name="l09381"></a><span class="lineno"> 9381</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09382"></a><span class="lineno"> 9382</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09383"></a><span class="lineno"> 9383</span>&#160;};</div><div class="line"><a name="l09384"></a><span class="lineno"> 9384</span>&#160;</div><div class="line"><a name="l09385"></a><span class="lineno"> 9385</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09386"></a><span class="lineno"> 9386</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt; ::<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">string</a>&gt;</div><div class="line"><a name="l09387"></a><span class="lineno"> 9387</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt; ::string&gt; {</div><div class="line"><a name="l09388"></a><span class="lineno"> 9388</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09389"></a><span class="lineno"> 9389</span>&#160; Matcher() {}</div><div class="line"><a name="l09390"></a><span class="lineno"> 9390</span>&#160;</div><div class="line"><a name="l09391"></a><span class="lineno"> 9391</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const ::string&amp;&gt;* impl)</div><div class="line"><a name="l09392"></a><span class="lineno"> 9392</span>&#160; : internal::MatcherBase&lt; ::string&gt;(impl) {}</div><div class="line"><a name="l09393"></a><span class="lineno"> 9393</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt; ::string&gt;* impl)</div><div class="line"><a name="l09394"></a><span class="lineno"> 9394</span>&#160; : internal::MatcherBase&lt; ::string&gt;(impl) {}</div><div class="line"><a name="l09395"></a><span class="lineno"> 9395</span>&#160;</div><div class="line"><a name="l09396"></a><span class="lineno"> 9396</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09397"></a><span class="lineno"> 9397</span>&#160; <span class="comment">// str is a std::string object.</span></div><div class="line"><a name="l09398"></a><span class="lineno"> 9398</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09399"></a><span class="lineno"> 9399</span>&#160;</div><div class="line"><a name="l09400"></a><span class="lineno"> 9400</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09401"></a><span class="lineno"> 9401</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09402"></a><span class="lineno"> 9402</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09403"></a><span class="lineno"> 9403</span>&#160;</div><div class="line"><a name="l09404"></a><span class="lineno"> 9404</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09405"></a><span class="lineno"> 9405</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09406"></a><span class="lineno"> 9406</span>&#160;};</div><div class="line"><a name="l09407"></a><span class="lineno"> 9407</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09408"></a><span class="lineno"> 9408</span>&#160;</div><div class="line"><a name="l09409"></a><span class="lineno"> 9409</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l09410"></a><span class="lineno"> 9410</span>&#160;<span class="comment">// The following two specializations allow the user to write str</span></div><div class="line"><a name="l09411"></a><span class="lineno"> 9411</span>&#160;<span class="comment">// instead of Eq(str) and &quot;foo&quot; instead of Eq(&quot;foo&quot;) when a absl::string_view</span></div><div class="line"><a name="l09412"></a><span class="lineno"> 9412</span>&#160;<span class="comment">// matcher is expected.</span></div><div class="line"><a name="l09413"></a><span class="lineno"> 9413</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09414"></a><span class="lineno"> 9414</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt;const absl::string_view&amp;&gt;</div><div class="line"><a name="l09415"></a><span class="lineno"> 9415</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt;const absl::string_view&amp;&gt; {</div><div class="line"><a name="l09416"></a><span class="lineno"> 9416</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09417"></a><span class="lineno"> 9417</span>&#160; Matcher() {}</div><div class="line"><a name="l09418"></a><span class="lineno"> 9418</span>&#160;</div><div class="line"><a name="l09419"></a><span class="lineno"> 9419</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const absl::string_view&amp;&gt;* impl)</div><div class="line"><a name="l09420"></a><span class="lineno"> 9420</span>&#160; : internal::MatcherBase&lt;const absl::string_view&amp;&gt;(impl) {}</div><div class="line"><a name="l09421"></a><span class="lineno"> 9421</span>&#160;</div><div class="line"><a name="l09422"></a><span class="lineno"> 9422</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09423"></a><span class="lineno"> 9423</span>&#160; <span class="comment">// str is a std::string object.</span></div><div class="line"><a name="l09424"></a><span class="lineno"> 9424</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09425"></a><span class="lineno"> 9425</span>&#160;</div><div class="line"><a name="l09426"></a><span class="lineno"> 9426</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09427"></a><span class="lineno"> 9427</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09428"></a><span class="lineno"> 9428</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09429"></a><span class="lineno"> 9429</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09430"></a><span class="lineno"> 9430</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09431"></a><span class="lineno"> 9431</span>&#160;</div><div class="line"><a name="l09432"></a><span class="lineno"> 9432</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09433"></a><span class="lineno"> 9433</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09434"></a><span class="lineno"> 9434</span>&#160;</div><div class="line"><a name="l09435"></a><span class="lineno"> 9435</span>&#160; <span class="comment">// Allows the user to pass absl::string_views directly.</span></div><div class="line"><a name="l09436"></a><span class="lineno"> 9436</span>&#160; Matcher(absl::string_view s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09437"></a><span class="lineno"> 9437</span>&#160;};</div><div class="line"><a name="l09438"></a><span class="lineno"> 9438</span>&#160;</div><div class="line"><a name="l09439"></a><span class="lineno"> 9439</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l09440"></a><span class="lineno"> 9440</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> Matcher&lt;absl::string_view&gt;</div><div class="line"><a name="l09441"></a><span class="lineno"> 9441</span>&#160; : <span class="keyword">public</span> internal::MatcherBase&lt;absl::string_view&gt; {</div><div class="line"><a name="l09442"></a><span class="lineno"> 9442</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09443"></a><span class="lineno"> 9443</span>&#160; Matcher() {}</div><div class="line"><a name="l09444"></a><span class="lineno"> 9444</span>&#160;</div><div class="line"><a name="l09445"></a><span class="lineno"> 9445</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;const absl::string_view&amp;&gt;* impl)</div><div class="line"><a name="l09446"></a><span class="lineno"> 9446</span>&#160; : internal::MatcherBase&lt;absl::string_view&gt;(impl) {}</div><div class="line"><a name="l09447"></a><span class="lineno"> 9447</span>&#160; <span class="keyword">explicit</span> Matcher(<span class="keyword">const</span> MatcherInterface&lt;absl::string_view&gt;* impl)</div><div class="line"><a name="l09448"></a><span class="lineno"> 9448</span>&#160; : internal::MatcherBase&lt;absl::string_view&gt;(impl) {}</div><div class="line"><a name="l09449"></a><span class="lineno"> 9449</span>&#160;</div><div class="line"><a name="l09450"></a><span class="lineno"> 9450</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09451"></a><span class="lineno"> 9451</span>&#160; <span class="comment">// str is a std::string object.</span></div><div class="line"><a name="l09452"></a><span class="lineno"> 9452</span>&#160; Matcher(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09453"></a><span class="lineno"> 9453</span>&#160;</div><div class="line"><a name="l09454"></a><span class="lineno"> 9454</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09455"></a><span class="lineno"> 9455</span>&#160; <span class="comment">// Allows the user to write str instead of Eq(str) sometimes, where</span></div><div class="line"><a name="l09456"></a><span class="lineno"> 9456</span>&#160; <span class="comment">// str is a ::string object.</span></div><div class="line"><a name="l09457"></a><span class="lineno"> 9457</span>&#160; Matcher(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09458"></a><span class="lineno"> 9458</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09459"></a><span class="lineno"> 9459</span>&#160;</div><div class="line"><a name="l09460"></a><span class="lineno"> 9460</span>&#160; <span class="comment">// Allows the user to write &quot;foo&quot; instead of Eq(&quot;foo&quot;) sometimes.</span></div><div class="line"><a name="l09461"></a><span class="lineno"> 9461</span>&#160; Matcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09462"></a><span class="lineno"> 9462</span>&#160;</div><div class="line"><a name="l09463"></a><span class="lineno"> 9463</span>&#160; <span class="comment">// Allows the user to pass absl::string_views directly.</span></div><div class="line"><a name="l09464"></a><span class="lineno"> 9464</span>&#160; Matcher(absl::string_view s); <span class="comment">// NOLINT</span></div><div class="line"><a name="l09465"></a><span class="lineno"> 9465</span>&#160;};</div><div class="line"><a name="l09466"></a><span class="lineno"> 9466</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_ABSL</span></div><div class="line"><a name="l09467"></a><span class="lineno"> 9467</span>&#160;</div><div class="line"><a name="l09468"></a><span class="lineno"> 9468</span>&#160;<span class="comment">// Prints a matcher in a human-readable format.</span></div><div class="line"><a name="l09469"></a><span class="lineno"> 9469</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09470"></a><span class="lineno"> 9470</span>&#160;std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Matcher&lt;T&gt;&amp; matcher) {</div><div class="line"><a name="l09471"></a><span class="lineno"> 9471</span>&#160; matcher.DescribeTo(&amp;os);</div><div class="line"><a name="l09472"></a><span class="lineno"> 9472</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l09473"></a><span class="lineno"> 9473</span>&#160;}</div><div class="line"><a name="l09474"></a><span class="lineno"> 9474</span>&#160;</div><div class="line"><a name="l09475"></a><span class="lineno"> 9475</span>&#160;<span class="comment">// The PolymorphicMatcher class template makes it easy to implement a</span></div><div class="line"><a name="l09476"></a><span class="lineno"> 9476</span>&#160;<span class="comment">// polymorphic matcher (i.e. a matcher that can match values of more</span></div><div class="line"><a name="l09477"></a><span class="lineno"> 9477</span>&#160;<span class="comment">// than one type, e.g. Eq(n) and NotNull()).</span></div><div class="line"><a name="l09478"></a><span class="lineno"> 9478</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09479"></a><span class="lineno"> 9479</span>&#160;<span class="comment">// To define a polymorphic matcher, a user should provide an Impl</span></div><div class="line"><a name="l09480"></a><span class="lineno"> 9480</span>&#160;<span class="comment">// class that has a DescribeTo() method and a DescribeNegationTo()</span></div><div class="line"><a name="l09481"></a><span class="lineno"> 9481</span>&#160;<span class="comment">// method, and define a member function (or member function template)</span></div><div class="line"><a name="l09482"></a><span class="lineno"> 9482</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09483"></a><span class="lineno"> 9483</span>&#160;<span class="comment">// bool MatchAndExplain(const Value&amp; value,</span></div><div class="line"><a name="l09484"></a><span class="lineno"> 9484</span>&#160;<span class="comment">// MatchResultListener* listener) const;</span></div><div class="line"><a name="l09485"></a><span class="lineno"> 9485</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09486"></a><span class="lineno"> 9486</span>&#160;<span class="comment">// See the definition of NotNull() for a complete example.</span></div><div class="line"><a name="l09487"></a><span class="lineno"> 9487</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Impl&gt;</div><div class="line"><a name="l09488"></a><span class="lineno"> 9488</span>&#160;<span class="keyword">class </span>PolymorphicMatcher {</div><div class="line"><a name="l09489"></a><span class="lineno"> 9489</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09490"></a><span class="lineno"> 9490</span>&#160; <span class="keyword">explicit</span> PolymorphicMatcher(<span class="keyword">const</span> Impl&amp; an_impl) : impl_(an_impl) {}</div><div class="line"><a name="l09491"></a><span class="lineno"> 9491</span>&#160;</div><div class="line"><a name="l09492"></a><span class="lineno"> 9492</span>&#160; <span class="comment">// Returns a mutable reference to the underlying matcher</span></div><div class="line"><a name="l09493"></a><span class="lineno"> 9493</span>&#160; <span class="comment">// implementation object.</span></div><div class="line"><a name="l09494"></a><span class="lineno"> 9494</span>&#160; Impl&amp; mutable_impl() { <span class="keywordflow">return</span> impl_; }</div><div class="line"><a name="l09495"></a><span class="lineno"> 9495</span>&#160;</div><div class="line"><a name="l09496"></a><span class="lineno"> 9496</span>&#160; <span class="comment">// Returns an immutable reference to the underlying matcher</span></div><div class="line"><a name="l09497"></a><span class="lineno"> 9497</span>&#160; <span class="comment">// implementation object.</span></div><div class="line"><a name="l09498"></a><span class="lineno"> 9498</span>&#160; <span class="keyword">const</span> Impl&amp; impl()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> impl_; }</div><div class="line"><a name="l09499"></a><span class="lineno"> 9499</span>&#160;</div><div class="line"><a name="l09500"></a><span class="lineno"> 9500</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09501"></a><span class="lineno"> 9501</span>&#160; <span class="keyword">operator</span> Matcher&lt;T&gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l09502"></a><span class="lineno"> 9502</span>&#160; <span class="keywordflow">return</span> Matcher&lt;T&gt;(<span class="keyword">new</span> MonomorphicImpl&lt;const T&amp;&gt;(impl_));</div><div class="line"><a name="l09503"></a><span class="lineno"> 9503</span>&#160; }</div><div class="line"><a name="l09504"></a><span class="lineno"> 9504</span>&#160;</div><div class="line"><a name="l09505"></a><span class="lineno"> 9505</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09506"></a><span class="lineno"> 9506</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09507"></a><span class="lineno"> 9507</span>&#160; <span class="keyword">class </span>MonomorphicImpl : <span class="keyword">public</span> MatcherInterface&lt;T&gt; {</div><div class="line"><a name="l09508"></a><span class="lineno"> 9508</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09509"></a><span class="lineno"> 9509</span>&#160; <span class="keyword">explicit</span> MonomorphicImpl(<span class="keyword">const</span> Impl&amp; impl) : impl_(impl) {}</div><div class="line"><a name="l09510"></a><span class="lineno"> 9510</span>&#160;</div><div class="line"><a name="l09511"></a><span class="lineno"> 9511</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DescribeTo(::std::ostream* os)<span class="keyword"> const </span>{ impl_.DescribeTo(os); }</div><div class="line"><a name="l09512"></a><span class="lineno"> 9512</span>&#160;</div><div class="line"><a name="l09513"></a><span class="lineno"> 9513</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09514"></a><span class="lineno"> 9514</span>&#160; impl_.DescribeNegationTo(os);</div><div class="line"><a name="l09515"></a><span class="lineno"> 9515</span>&#160; }</div><div class="line"><a name="l09516"></a><span class="lineno"> 9516</span>&#160;</div><div class="line"><a name="l09517"></a><span class="lineno"> 9517</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> MatchAndExplain(T x, MatchResultListener* listener)<span class="keyword"> const </span>{</div><div class="line"><a name="l09518"></a><span class="lineno"> 9518</span>&#160; <span class="keywordflow">return</span> impl_.MatchAndExplain(x, listener);</div><div class="line"><a name="l09519"></a><span class="lineno"> 9519</span>&#160; }</div><div class="line"><a name="l09520"></a><span class="lineno"> 9520</span>&#160;</div><div class="line"><a name="l09521"></a><span class="lineno"> 9521</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09522"></a><span class="lineno"> 9522</span>&#160; <span class="keyword">const</span> Impl impl_;</div><div class="line"><a name="l09523"></a><span class="lineno"> 9523</span>&#160;</div><div class="line"><a name="l09524"></a><span class="lineno"> 9524</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(MonomorphicImpl);</div><div class="line"><a name="l09525"></a><span class="lineno"> 9525</span>&#160; };</div><div class="line"><a name="l09526"></a><span class="lineno"> 9526</span>&#160;</div><div class="line"><a name="l09527"></a><span class="lineno"> 9527</span>&#160; Impl impl_;</div><div class="line"><a name="l09528"></a><span class="lineno"> 9528</span>&#160;</div><div class="line"><a name="l09529"></a><span class="lineno"> 9529</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(PolymorphicMatcher);</div><div class="line"><a name="l09530"></a><span class="lineno"> 9530</span>&#160;};</div><div class="line"><a name="l09531"></a><span class="lineno"> 9531</span>&#160;</div><div class="line"><a name="l09532"></a><span class="lineno"> 9532</span>&#160;<span class="comment">// Creates a matcher from its implementation. This is easier to use</span></div><div class="line"><a name="l09533"></a><span class="lineno"> 9533</span>&#160;<span class="comment">// than the Matcher&lt;T&gt; constructor as it doesn&#39;t require you to</span></div><div class="line"><a name="l09534"></a><span class="lineno"> 9534</span>&#160;<span class="comment">// explicitly write the template argument, e.g.</span></div><div class="line"><a name="l09535"></a><span class="lineno"> 9535</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09536"></a><span class="lineno"> 9536</span>&#160;<span class="comment">// MakeMatcher(foo);</span></div><div class="line"><a name="l09537"></a><span class="lineno"> 9537</span>&#160;<span class="comment">// vs</span></div><div class="line"><a name="l09538"></a><span class="lineno"> 9538</span>&#160;<span class="comment">// Matcher&lt;const string&amp;&gt;(foo);</span></div><div class="line"><a name="l09539"></a><span class="lineno"> 9539</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09540"></a><span class="lineno"> 9540</span>&#160;<span class="keyword">inline</span> Matcher&lt;T&gt; MakeMatcher(<span class="keyword">const</span> MatcherInterface&lt;T&gt;* impl) {</div><div class="line"><a name="l09541"></a><span class="lineno"> 9541</span>&#160; <span class="keywordflow">return</span> Matcher&lt;T&gt;(impl);</div><div class="line"><a name="l09542"></a><span class="lineno"> 9542</span>&#160;}</div><div class="line"><a name="l09543"></a><span class="lineno"> 9543</span>&#160;</div><div class="line"><a name="l09544"></a><span class="lineno"> 9544</span>&#160;<span class="comment">// Creates a polymorphic matcher from its implementation. This is</span></div><div class="line"><a name="l09545"></a><span class="lineno"> 9545</span>&#160;<span class="comment">// easier to use than the PolymorphicMatcher&lt;Impl&gt; constructor as it</span></div><div class="line"><a name="l09546"></a><span class="lineno"> 9546</span>&#160;<span class="comment">// doesn&#39;t require you to explicitly write the template argument, e.g.</span></div><div class="line"><a name="l09547"></a><span class="lineno"> 9547</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09548"></a><span class="lineno"> 9548</span>&#160;<span class="comment">// MakePolymorphicMatcher(foo);</span></div><div class="line"><a name="l09549"></a><span class="lineno"> 9549</span>&#160;<span class="comment">// vs</span></div><div class="line"><a name="l09550"></a><span class="lineno"> 9550</span>&#160;<span class="comment">// PolymorphicMatcher&lt;TypeOfFoo&gt;(foo);</span></div><div class="line"><a name="l09551"></a><span class="lineno"> 9551</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Impl&gt;</div><div class="line"><a name="l09552"></a><span class="lineno"> 9552</span>&#160;<span class="keyword">inline</span> PolymorphicMatcher&lt;Impl&gt; MakePolymorphicMatcher(<span class="keyword">const</span> Impl&amp; impl) {</div><div class="line"><a name="l09553"></a><span class="lineno"> 9553</span>&#160; <span class="keywordflow">return</span> PolymorphicMatcher&lt;Impl&gt;(impl);</div><div class="line"><a name="l09554"></a><span class="lineno"> 9554</span>&#160;}</div><div class="line"><a name="l09555"></a><span class="lineno"> 9555</span>&#160;</div><div class="line"><a name="l09556"></a><span class="lineno"> 9556</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l09557"></a><span class="lineno"> 9557</span>&#160;<span class="comment">// Implements a matcher that compares a given value with a</span></div><div class="line"><a name="l09558"></a><span class="lineno"> 9558</span>&#160;<span class="comment">// pre-supplied value using one of the ==, &lt;=, &lt;, etc, operators. The</span></div><div class="line"><a name="l09559"></a><span class="lineno"> 9559</span>&#160;<span class="comment">// two values being compared don&#39;t have to have the same type.</span></div><div class="line"><a name="l09560"></a><span class="lineno"> 9560</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09561"></a><span class="lineno"> 9561</span>&#160;<span class="comment">// The matcher defined here is polymorphic (for example, Eq(5) can be</span></div><div class="line"><a name="l09562"></a><span class="lineno"> 9562</span>&#160;<span class="comment">// used to match an int, a short, a double, etc). Therefore we use</span></div><div class="line"><a name="l09563"></a><span class="lineno"> 9563</span>&#160;<span class="comment">// a template type conversion operator in the implementation.</span></div><div class="line"><a name="l09564"></a><span class="lineno"> 9564</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09565"></a><span class="lineno"> 9565</span>&#160;<span class="comment">// The following template definition assumes that the Rhs parameter is</span></div><div class="line"><a name="l09566"></a><span class="lineno"> 9566</span>&#160;<span class="comment">// a &quot;bare&quot; type (i.e. neither &#39;const T&#39; nor &#39;T&amp;&#39;).</span></div><div class="line"><a name="l09567"></a><span class="lineno"> 9567</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> D, <span class="keyword">typename</span> Rhs, <span class="keyword">typename</span> Op&gt;</div><div class="line"><a name="l09568"></a><span class="lineno"> 9568</span>&#160;<span class="keyword">class </span>ComparisonBase {</div><div class="line"><a name="l09569"></a><span class="lineno"> 9569</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09570"></a><span class="lineno"> 9570</span>&#160; <span class="keyword">explicit</span> ComparisonBase(<span class="keyword">const</span> Rhs&amp; rhs) : rhs_(rhs) {}</div><div class="line"><a name="l09571"></a><span class="lineno"> 9571</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Lhs&gt;</div><div class="line"><a name="l09572"></a><span class="lineno"> 9572</span>&#160; <span class="keyword">operator</span> Matcher&lt;Lhs&gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l09573"></a><span class="lineno"> 9573</span>&#160; <span class="keywordflow">return</span> MakeMatcher(<span class="keyword">new</span> Impl&lt;Lhs&gt;(rhs_));</div><div class="line"><a name="l09574"></a><span class="lineno"> 9574</span>&#160; }</div><div class="line"><a name="l09575"></a><span class="lineno"> 9575</span>&#160;</div><div class="line"><a name="l09576"></a><span class="lineno"> 9576</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09577"></a><span class="lineno"> 9577</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Lhs&gt;</div><div class="line"><a name="l09578"></a><span class="lineno"> 9578</span>&#160; <span class="keyword">class </span>Impl : <span class="keyword">public</span> MatcherInterface&lt;Lhs&gt; {</div><div class="line"><a name="l09579"></a><span class="lineno"> 9579</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09580"></a><span class="lineno"> 9580</span>&#160; <span class="keyword">explicit</span> Impl(<span class="keyword">const</span> Rhs&amp; rhs) : rhs_(rhs) {}</div><div class="line"><a name="l09581"></a><span class="lineno"> 9581</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(Lhs lhs,</div><div class="line"><a name="l09582"></a><span class="lineno"> 9582</span>&#160; MatchResultListener* <span class="comment">/* listener */</span>)<span class="keyword"> const override </span>{</div><div class="line"><a name="l09583"></a><span class="lineno"> 9583</span>&#160; <span class="keywordflow">return</span> Op()(lhs, rhs_);</div><div class="line"><a name="l09584"></a><span class="lineno"> 9584</span>&#160; }</div><div class="line"><a name="l09585"></a><span class="lineno"> 9585</span>&#160; <span class="keywordtype">void</span> DescribeTo(::std::ostream* os)<span class="keyword"> const override </span>{</div><div class="line"><a name="l09586"></a><span class="lineno"> 9586</span>&#160; *os &lt;&lt; D::Desc() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l09587"></a><span class="lineno"> 9587</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(rhs_, os);</div><div class="line"><a name="l09588"></a><span class="lineno"> 9588</span>&#160; }</div><div class="line"><a name="l09589"></a><span class="lineno"> 9589</span>&#160; <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const override </span>{</div><div class="line"><a name="l09590"></a><span class="lineno"> 9590</span>&#160; *os &lt;&lt; D::NegatedDesc() &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l09591"></a><span class="lineno"> 9591</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">UniversalPrint</a>(rhs_, os);</div><div class="line"><a name="l09592"></a><span class="lineno"> 9592</span>&#160; }</div><div class="line"><a name="l09593"></a><span class="lineno"> 9593</span>&#160;</div><div class="line"><a name="l09594"></a><span class="lineno"> 9594</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09595"></a><span class="lineno"> 9595</span>&#160; Rhs rhs_;</div><div class="line"><a name="l09596"></a><span class="lineno"> 9596</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(Impl);</div><div class="line"><a name="l09597"></a><span class="lineno"> 9597</span>&#160; };</div><div class="line"><a name="l09598"></a><span class="lineno"> 9598</span>&#160; Rhs rhs_;</div><div class="line"><a name="l09599"></a><span class="lineno"> 9599</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(ComparisonBase);</div><div class="line"><a name="l09600"></a><span class="lineno"> 9600</span>&#160;};</div><div class="line"><a name="l09601"></a><span class="lineno"> 9601</span>&#160;</div><div class="line"><a name="l09602"></a><span class="lineno"> 9602</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09603"></a><span class="lineno"> 9603</span>&#160;<span class="keyword">class </span>EqMatcher : <span class="keyword">public</span> ComparisonBase&lt;EqMatcher&lt;Rhs&gt;, Rhs, AnyEq&gt; {</div><div class="line"><a name="l09604"></a><span class="lineno"> 9604</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09605"></a><span class="lineno"> 9605</span>&#160; <span class="keyword">explicit</span> EqMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09606"></a><span class="lineno"> 9606</span>&#160; : ComparisonBase&lt;EqMatcher&lt;Rhs&gt;, Rhs, AnyEq&gt;(rhs) { }</div><div class="line"><a name="l09607"></a><span class="lineno"> 9607</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is equal to&quot;</span>; }</div><div class="line"><a name="l09608"></a><span class="lineno"> 9608</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t equal to&quot;</span>; }</div><div class="line"><a name="l09609"></a><span class="lineno"> 9609</span>&#160;};</div><div class="line"><a name="l09610"></a><span class="lineno"> 9610</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09611"></a><span class="lineno"> 9611</span>&#160;<span class="keyword">class </span>NeMatcher : <span class="keyword">public</span> ComparisonBase&lt;NeMatcher&lt;Rhs&gt;, Rhs, AnyNe&gt; {</div><div class="line"><a name="l09612"></a><span class="lineno"> 9612</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09613"></a><span class="lineno"> 9613</span>&#160; <span class="keyword">explicit</span> NeMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09614"></a><span class="lineno"> 9614</span>&#160; : ComparisonBase&lt;NeMatcher&lt;Rhs&gt;, Rhs, AnyNe&gt;(rhs) { }</div><div class="line"><a name="l09615"></a><span class="lineno"> 9615</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t equal to&quot;</span>; }</div><div class="line"><a name="l09616"></a><span class="lineno"> 9616</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is equal to&quot;</span>; }</div><div class="line"><a name="l09617"></a><span class="lineno"> 9617</span>&#160;};</div><div class="line"><a name="l09618"></a><span class="lineno"> 9618</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09619"></a><span class="lineno"> 9619</span>&#160;<span class="keyword">class </span>LtMatcher : <span class="keyword">public</span> ComparisonBase&lt;LtMatcher&lt;Rhs&gt;, Rhs, AnyLt&gt; {</div><div class="line"><a name="l09620"></a><span class="lineno"> 9620</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09621"></a><span class="lineno"> 9621</span>&#160; <span class="keyword">explicit</span> LtMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09622"></a><span class="lineno"> 9622</span>&#160; : ComparisonBase&lt;LtMatcher&lt;Rhs&gt;, Rhs, AnyLt&gt;(rhs) { }</div><div class="line"><a name="l09623"></a><span class="lineno"> 9623</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is &lt;&quot;</span>; }</div><div class="line"><a name="l09624"></a><span class="lineno"> 9624</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t &lt;&quot;</span>; }</div><div class="line"><a name="l09625"></a><span class="lineno"> 9625</span>&#160;};</div><div class="line"><a name="l09626"></a><span class="lineno"> 9626</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09627"></a><span class="lineno"> 9627</span>&#160;<span class="keyword">class </span>GtMatcher : <span class="keyword">public</span> ComparisonBase&lt;GtMatcher&lt;Rhs&gt;, Rhs, AnyGt&gt; {</div><div class="line"><a name="l09628"></a><span class="lineno"> 9628</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09629"></a><span class="lineno"> 9629</span>&#160; <span class="keyword">explicit</span> GtMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09630"></a><span class="lineno"> 9630</span>&#160; : ComparisonBase&lt;GtMatcher&lt;Rhs&gt;, Rhs, AnyGt&gt;(rhs) { }</div><div class="line"><a name="l09631"></a><span class="lineno"> 9631</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is &gt;&quot;</span>; }</div><div class="line"><a name="l09632"></a><span class="lineno"> 9632</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t &gt;&quot;</span>; }</div><div class="line"><a name="l09633"></a><span class="lineno"> 9633</span>&#160;};</div><div class="line"><a name="l09634"></a><span class="lineno"> 9634</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09635"></a><span class="lineno"> 9635</span>&#160;<span class="keyword">class </span>LeMatcher : <span class="keyword">public</span> ComparisonBase&lt;LeMatcher&lt;Rhs&gt;, Rhs, AnyLe&gt; {</div><div class="line"><a name="l09636"></a><span class="lineno"> 9636</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09637"></a><span class="lineno"> 9637</span>&#160; <span class="keyword">explicit</span> LeMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09638"></a><span class="lineno"> 9638</span>&#160; : ComparisonBase&lt;LeMatcher&lt;Rhs&gt;, Rhs, AnyLe&gt;(rhs) { }</div><div class="line"><a name="l09639"></a><span class="lineno"> 9639</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is &lt;=&quot;</span>; }</div><div class="line"><a name="l09640"></a><span class="lineno"> 9640</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t &lt;=&quot;</span>; }</div><div class="line"><a name="l09641"></a><span class="lineno"> 9641</span>&#160;};</div><div class="line"><a name="l09642"></a><span class="lineno"> 9642</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09643"></a><span class="lineno"> 9643</span>&#160;<span class="keyword">class </span>GeMatcher : <span class="keyword">public</span> ComparisonBase&lt;GeMatcher&lt;Rhs&gt;, Rhs, AnyGe&gt; {</div><div class="line"><a name="l09644"></a><span class="lineno"> 9644</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09645"></a><span class="lineno"> 9645</span>&#160; <span class="keyword">explicit</span> GeMatcher(<span class="keyword">const</span> Rhs&amp; rhs)</div><div class="line"><a name="l09646"></a><span class="lineno"> 9646</span>&#160; : ComparisonBase&lt;GeMatcher&lt;Rhs&gt;, Rhs, AnyGe&gt;(rhs) { }</div><div class="line"><a name="l09647"></a><span class="lineno"> 9647</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* Desc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;is &gt;=&quot;</span>; }</div><div class="line"><a name="l09648"></a><span class="lineno"> 9648</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* NegatedDesc() { <span class="keywordflow">return</span> <span class="stringliteral">&quot;isn&#39;t &gt;=&quot;</span>; }</div><div class="line"><a name="l09649"></a><span class="lineno"> 9649</span>&#160;};</div><div class="line"><a name="l09650"></a><span class="lineno"> 9650</span>&#160;</div><div class="line"><a name="l09651"></a><span class="lineno"> 9651</span>&#160;<span class="comment">// Implements polymorphic matchers MatchesRegex(regex) and</span></div><div class="line"><a name="l09652"></a><span class="lineno"> 9652</span>&#160;<span class="comment">// ContainsRegex(regex), which can be used as a Matcher&lt;T&gt; as long as</span></div><div class="line"><a name="l09653"></a><span class="lineno"> 9653</span>&#160;<span class="comment">// T can be converted to a string.</span></div><div class="line"><a name="l09654"></a><span class="lineno"> 9654</span>&#160;<span class="keyword">class </span>MatchesRegexMatcher {</div><div class="line"><a name="l09655"></a><span class="lineno"> 9655</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09656"></a><span class="lineno"> 9656</span>&#160; MatchesRegexMatcher(<span class="keyword">const</span> RE* regex, <span class="keywordtype">bool</span> full_match)</div><div class="line"><a name="l09657"></a><span class="lineno"> 9657</span>&#160; : regex_(regex), full_match_(full_match) {}</div><div class="line"><a name="l09658"></a><span class="lineno"> 9658</span>&#160;</div><div class="line"><a name="l09659"></a><span class="lineno"> 9659</span>&#160;<span class="preprocessor">#if GTEST_HAS_ABSL</span></div><div class="line"><a name="l09660"></a><span class="lineno"> 9660</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(<span class="keyword">const</span> absl::string_view&amp; s,</div><div class="line"><a name="l09661"></a><span class="lineno"> 9661</span>&#160; MatchResultListener* listener)<span class="keyword"> const </span>{</div><div class="line"><a name="l09662"></a><span class="lineno"> 9662</span>&#160; <span class="keywordflow">return</span> MatchAndExplain(<span class="keywordtype">string</span>(s), listener);</div><div class="line"><a name="l09663"></a><span class="lineno"> 9663</span>&#160; }</div><div class="line"><a name="l09664"></a><span class="lineno"> 9664</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_ABSL</span></div><div class="line"><a name="l09665"></a><span class="lineno"> 9665</span>&#160;</div><div class="line"><a name="l09666"></a><span class="lineno"> 9666</span>&#160; <span class="comment">// Accepts pointer types, particularly:</span></div><div class="line"><a name="l09667"></a><span class="lineno"> 9667</span>&#160; <span class="comment">// const char*</span></div><div class="line"><a name="l09668"></a><span class="lineno"> 9668</span>&#160; <span class="comment">// char*</span></div><div class="line"><a name="l09669"></a><span class="lineno"> 9669</span>&#160; <span class="comment">// const wchar_t*</span></div><div class="line"><a name="l09670"></a><span class="lineno"> 9670</span>&#160; <span class="comment">// wchar_t*</span></div><div class="line"><a name="l09671"></a><span class="lineno"> 9671</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l09672"></a><span class="lineno"> 9672</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(CharType* s, MatchResultListener* listener)<span class="keyword"> const </span>{</div><div class="line"><a name="l09673"></a><span class="lineno"> 9673</span>&#160; <span class="keywordflow">return</span> s != <span class="keyword">nullptr</span> &amp;&amp; MatchAndExplain(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>(s), listener);</div><div class="line"><a name="l09674"></a><span class="lineno"> 9674</span>&#160; }</div><div class="line"><a name="l09675"></a><span class="lineno"> 9675</span>&#160;</div><div class="line"><a name="l09676"></a><span class="lineno"> 9676</span>&#160; <span class="comment">// Matches anything that can convert to std::string.</span></div><div class="line"><a name="l09677"></a><span class="lineno"> 9677</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l09678"></a><span class="lineno"> 9678</span>&#160; <span class="comment">// This is a template, not just a plain function with const std::string&amp;,</span></div><div class="line"><a name="l09679"></a><span class="lineno"> 9679</span>&#160; <span class="comment">// because absl::string_view has some interfering non-explicit constructors.</span></div><div class="line"><a name="l09680"></a><span class="lineno"> 9680</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> MatcheeStringType&gt;</div><div class="line"><a name="l09681"></a><span class="lineno"> 9681</span>&#160; <span class="keywordtype">bool</span> MatchAndExplain(<span class="keyword">const</span> MatcheeStringType&amp; s,</div><div class="line"><a name="l09682"></a><span class="lineno"> 9682</span>&#160; MatchResultListener* <span class="comment">/* listener */</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l09683"></a><span class="lineno"> 9683</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; s2(s);</div><div class="line"><a name="l09684"></a><span class="lineno"> 9684</span>&#160; <span class="keywordflow">return</span> full_match_ ? RE::FullMatch(s2, *regex_)</div><div class="line"><a name="l09685"></a><span class="lineno"> 9685</span>&#160; : RE::PartialMatch(s2, *regex_);</div><div class="line"><a name="l09686"></a><span class="lineno"> 9686</span>&#160; }</div><div class="line"><a name="l09687"></a><span class="lineno"> 9687</span>&#160;</div><div class="line"><a name="l09688"></a><span class="lineno"> 9688</span>&#160; <span class="keywordtype">void</span> DescribeTo(::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09689"></a><span class="lineno"> 9689</span>&#160; *os &lt;&lt; (full_match_ ? <span class="stringliteral">&quot;matches&quot;</span> : <span class="stringliteral">&quot;contains&quot;</span>) &lt;&lt; <span class="stringliteral">&quot; regular expression &quot;</span>;</div><div class="line"><a name="l09690"></a><span class="lineno"> 9690</span>&#160; UniversalPrinter&lt;std::string&gt;::Print(regex_-&gt;pattern(), os);</div><div class="line"><a name="l09691"></a><span class="lineno"> 9691</span>&#160; }</div><div class="line"><a name="l09692"></a><span class="lineno"> 9692</span>&#160;</div><div class="line"><a name="l09693"></a><span class="lineno"> 9693</span>&#160; <span class="keywordtype">void</span> DescribeNegationTo(::std::ostream* os)<span class="keyword"> const </span>{</div><div class="line"><a name="l09694"></a><span class="lineno"> 9694</span>&#160; *os &lt;&lt; <span class="stringliteral">&quot;doesn&#39;t &quot;</span> &lt;&lt; (full_match_ ? <span class="stringliteral">&quot;match&quot;</span> : <span class="stringliteral">&quot;contain&quot;</span>)</div><div class="line"><a name="l09695"></a><span class="lineno"> 9695</span>&#160; &lt;&lt; <span class="stringliteral">&quot; regular expression &quot;</span>;</div><div class="line"><a name="l09696"></a><span class="lineno"> 9696</span>&#160; UniversalPrinter&lt;std::string&gt;::Print(regex_-&gt;pattern(), os);</div><div class="line"><a name="l09697"></a><span class="lineno"> 9697</span>&#160; }</div><div class="line"><a name="l09698"></a><span class="lineno"> 9698</span>&#160;</div><div class="line"><a name="l09699"></a><span class="lineno"> 9699</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09700"></a><span class="lineno"> 9700</span>&#160; <span class="keyword">const</span> std::shared_ptr&lt;const RE&gt; regex_;</div><div class="line"><a name="l09701"></a><span class="lineno"> 9701</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> full_match_;</div><div class="line"><a name="l09702"></a><span class="lineno"> 9702</span>&#160;</div><div class="line"><a name="l09703"></a><span class="lineno"> 9703</span>&#160; <a class="code" href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a>(MatchesRegexMatcher);</div><div class="line"><a name="l09704"></a><span class="lineno"> 9704</span>&#160;};</div><div class="line"><a name="l09705"></a><span class="lineno"> 9705</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l09706"></a><span class="lineno"> 9706</span>&#160;</div><div class="line"><a name="l09707"></a><span class="lineno"> 9707</span>&#160;<span class="comment">// Matches a string that fully matches regular expression &#39;regex&#39;.</span></div><div class="line"><a name="l09708"></a><span class="lineno"> 9708</span>&#160;<span class="comment">// The matcher takes ownership of &#39;regex&#39;.</span></div><div class="line"><a name="l09709"></a><span class="lineno"> 9709</span>&#160;<span class="keyword">inline</span> PolymorphicMatcher&lt;internal::MatchesRegexMatcher&gt; MatchesRegex(</div><div class="line"><a name="l09710"></a><span class="lineno"> 9710</span>&#160; <span class="keyword">const</span> internal::RE* regex) {</div><div class="line"><a name="l09711"></a><span class="lineno"> 9711</span>&#160; <span class="keywordflow">return</span> MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, <span class="keyword">true</span>));</div><div class="line"><a name="l09712"></a><span class="lineno"> 9712</span>&#160;}</div><div class="line"><a name="l09713"></a><span class="lineno"> 9713</span>&#160;<span class="keyword">inline</span> PolymorphicMatcher&lt;internal::MatchesRegexMatcher&gt; MatchesRegex(</div><div class="line"><a name="l09714"></a><span class="lineno"> 9714</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; regex) {</div><div class="line"><a name="l09715"></a><span class="lineno"> 9715</span>&#160; <span class="keywordflow">return</span> MatchesRegex(<span class="keyword">new</span> internal::RE(regex));</div><div class="line"><a name="l09716"></a><span class="lineno"> 9716</span>&#160;}</div><div class="line"><a name="l09717"></a><span class="lineno"> 9717</span>&#160;</div><div class="line"><a name="l09718"></a><span class="lineno"> 9718</span>&#160;<span class="comment">// Matches a string that contains regular expression &#39;regex&#39;.</span></div><div class="line"><a name="l09719"></a><span class="lineno"> 9719</span>&#160;<span class="comment">// The matcher takes ownership of &#39;regex&#39;.</span></div><div class="line"><a name="l09720"></a><span class="lineno"> 9720</span>&#160;<span class="keyword">inline</span> PolymorphicMatcher&lt;internal::MatchesRegexMatcher&gt; ContainsRegex(</div><div class="line"><a name="l09721"></a><span class="lineno"> 9721</span>&#160; <span class="keyword">const</span> internal::RE* regex) {</div><div class="line"><a name="l09722"></a><span class="lineno"> 9722</span>&#160; <span class="keywordflow">return</span> MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, <span class="keyword">false</span>));</div><div class="line"><a name="l09723"></a><span class="lineno"> 9723</span>&#160;}</div><div class="line"><a name="l09724"></a><span class="lineno"> 9724</span>&#160;<span class="keyword">inline</span> PolymorphicMatcher&lt;internal::MatchesRegexMatcher&gt; ContainsRegex(</div><div class="line"><a name="l09725"></a><span class="lineno"> 9725</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; regex) {</div><div class="line"><a name="l09726"></a><span class="lineno"> 9726</span>&#160; <span class="keywordflow">return</span> ContainsRegex(<span class="keyword">new</span> internal::RE(regex));</div><div class="line"><a name="l09727"></a><span class="lineno"> 9727</span>&#160;}</div><div class="line"><a name="l09728"></a><span class="lineno"> 9728</span>&#160;</div><div class="line"><a name="l09729"></a><span class="lineno"> 9729</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything equal to x.</span></div><div class="line"><a name="l09730"></a><span class="lineno"> 9730</span>&#160;<span class="comment">// Note: if the parameter of Eq() were declared as const T&amp;, Eq(&quot;foo&quot;)</span></div><div class="line"><a name="l09731"></a><span class="lineno"> 9731</span>&#160;<span class="comment">// wouldn&#39;t compile.</span></div><div class="line"><a name="l09732"></a><span class="lineno"> 9732</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09733"></a><span class="lineno"> 9733</span>&#160;<span class="keyword">inline</span> internal::EqMatcher&lt;T&gt; Eq(T x) { <span class="keywordflow">return</span> internal::EqMatcher&lt;T&gt;(x); }</div><div class="line"><a name="l09734"></a><span class="lineno"> 9734</span>&#160;</div><div class="line"><a name="l09735"></a><span class="lineno"> 9735</span>&#160;<span class="comment">// Constructs a Matcher&lt;T&gt; from a &#39;value&#39; of type T. The constructed</span></div><div class="line"><a name="l09736"></a><span class="lineno"> 9736</span>&#160;<span class="comment">// matcher matches any value that&#39;s equal to &#39;value&#39;.</span></div><div class="line"><a name="l09737"></a><span class="lineno"> 9737</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l09738"></a><span class="lineno"> 9738</span>&#160;Matcher&lt;T&gt;::Matcher(T value) { *<span class="keyword">this</span> = Eq(value); }</div><div class="line"><a name="l09739"></a><span class="lineno"> 9739</span>&#160;</div><div class="line"><a name="l09740"></a><span class="lineno"> 9740</span>&#160;<span class="comment">// Creates a monomorphic matcher that matches anything with type Lhs</span></div><div class="line"><a name="l09741"></a><span class="lineno"> 9741</span>&#160;<span class="comment">// and equal to rhs. A user may need to use this instead of Eq(...)</span></div><div class="line"><a name="l09742"></a><span class="lineno"> 9742</span>&#160;<span class="comment">// in order to resolve an overloading ambiguity.</span></div><div class="line"><a name="l09743"></a><span class="lineno"> 9743</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09744"></a><span class="lineno"> 9744</span>&#160;<span class="comment">// TypedEq&lt;T&gt;(x) is just a convenient short-hand for Matcher&lt;T&gt;(Eq(x))</span></div><div class="line"><a name="l09745"></a><span class="lineno"> 9745</span>&#160;<span class="comment">// or Matcher&lt;T&gt;(x), but more readable than the latter.</span></div><div class="line"><a name="l09746"></a><span class="lineno"> 9746</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09747"></a><span class="lineno"> 9747</span>&#160;<span class="comment">// We could define similar monomorphic matchers for other comparison</span></div><div class="line"><a name="l09748"></a><span class="lineno"> 9748</span>&#160;<span class="comment">// operations (e.g. TypedLt, TypedGe, and etc), but decided not to do</span></div><div class="line"><a name="l09749"></a><span class="lineno"> 9749</span>&#160;<span class="comment">// it yet as those are used much less than Eq() in practice. A user</span></div><div class="line"><a name="l09750"></a><span class="lineno"> 9750</span>&#160;<span class="comment">// can always write Matcher&lt;T&gt;(Lt(5)) to be explicit about the type,</span></div><div class="line"><a name="l09751"></a><span class="lineno"> 9751</span>&#160;<span class="comment">// for example.</span></div><div class="line"><a name="l09752"></a><span class="lineno"> 9752</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Lhs, <span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09753"></a><span class="lineno"> 9753</span>&#160;<span class="keyword">inline</span> Matcher&lt;Lhs&gt; TypedEq(<span class="keyword">const</span> Rhs&amp; rhs) { <span class="keywordflow">return</span> Eq(rhs); }</div><div class="line"><a name="l09754"></a><span class="lineno"> 9754</span>&#160;</div><div class="line"><a name="l09755"></a><span class="lineno"> 9755</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything &gt;= x.</span></div><div class="line"><a name="l09756"></a><span class="lineno"> 9756</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09757"></a><span class="lineno"> 9757</span>&#160;<span class="keyword">inline</span> internal::GeMatcher&lt;Rhs&gt; Ge(Rhs x) {</div><div class="line"><a name="l09758"></a><span class="lineno"> 9758</span>&#160; <span class="keywordflow">return</span> internal::GeMatcher&lt;Rhs&gt;(x);</div><div class="line"><a name="l09759"></a><span class="lineno"> 9759</span>&#160;}</div><div class="line"><a name="l09760"></a><span class="lineno"> 9760</span>&#160;</div><div class="line"><a name="l09761"></a><span class="lineno"> 9761</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything &gt; x.</span></div><div class="line"><a name="l09762"></a><span class="lineno"> 9762</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09763"></a><span class="lineno"> 9763</span>&#160;<span class="keyword">inline</span> internal::GtMatcher&lt;Rhs&gt; Gt(Rhs x) {</div><div class="line"><a name="l09764"></a><span class="lineno"> 9764</span>&#160; <span class="keywordflow">return</span> internal::GtMatcher&lt;Rhs&gt;(x);</div><div class="line"><a name="l09765"></a><span class="lineno"> 9765</span>&#160;}</div><div class="line"><a name="l09766"></a><span class="lineno"> 9766</span>&#160;</div><div class="line"><a name="l09767"></a><span class="lineno"> 9767</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything &lt;= x.</span></div><div class="line"><a name="l09768"></a><span class="lineno"> 9768</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09769"></a><span class="lineno"> 9769</span>&#160;<span class="keyword">inline</span> internal::LeMatcher&lt;Rhs&gt; Le(Rhs x) {</div><div class="line"><a name="l09770"></a><span class="lineno"> 9770</span>&#160; <span class="keywordflow">return</span> internal::LeMatcher&lt;Rhs&gt;(x);</div><div class="line"><a name="l09771"></a><span class="lineno"> 9771</span>&#160;}</div><div class="line"><a name="l09772"></a><span class="lineno"> 9772</span>&#160;</div><div class="line"><a name="l09773"></a><span class="lineno"> 9773</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything &lt; x.</span></div><div class="line"><a name="l09774"></a><span class="lineno"> 9774</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09775"></a><span class="lineno"> 9775</span>&#160;<span class="keyword">inline</span> internal::LtMatcher&lt;Rhs&gt; Lt(Rhs x) {</div><div class="line"><a name="l09776"></a><span class="lineno"> 9776</span>&#160; <span class="keywordflow">return</span> internal::LtMatcher&lt;Rhs&gt;(x);</div><div class="line"><a name="l09777"></a><span class="lineno"> 9777</span>&#160;}</div><div class="line"><a name="l09778"></a><span class="lineno"> 9778</span>&#160;</div><div class="line"><a name="l09779"></a><span class="lineno"> 9779</span>&#160;<span class="comment">// Creates a polymorphic matcher that matches anything != x.</span></div><div class="line"><a name="l09780"></a><span class="lineno"> 9780</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Rhs&gt;</div><div class="line"><a name="l09781"></a><span class="lineno"> 9781</span>&#160;<span class="keyword">inline</span> internal::NeMatcher&lt;Rhs&gt; Ne(Rhs x) {</div><div class="line"><a name="l09782"></a><span class="lineno"> 9782</span>&#160; <span class="keywordflow">return</span> internal::NeMatcher&lt;Rhs&gt;(x);</div><div class="line"><a name="l09783"></a><span class="lineno"> 9783</span>&#160;}</div><div class="line"><a name="l09784"></a><span class="lineno"> 9784</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l09785"></a><span class="lineno"> 9785</span>&#160;</div><div class="line"><a name="l09786"></a><span class="lineno"> 9786</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251 5046</span></div><div class="line"><a name="l09787"></a><span class="lineno"> 9787</span>&#160;</div><div class="line"><a name="l09788"></a><span class="lineno"> 9788</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_MATCHERS_H_</span></div><div class="line"><a name="l09789"></a><span class="lineno"> 9789</span>&#160;</div><div class="line"><a name="l09790"></a><span class="lineno"> 9790</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l09791"></a><span class="lineno"> 9791</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l09792"></a><span class="lineno"> 9792</span>&#160;</div><div class="line"><a name="l09793"></a><span class="lineno"> 9793</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l09794"></a><span class="lineno"> 9794</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l09795"></a><span class="lineno"> 9795</span>&#160;</div><div class="line"><a name="l09796"></a><span class="lineno"> 9796</span>&#160;<a class="code" href="namespacetesting.html#a37b7e87f0a5f502c6918f37d1768c1f3">GTEST_DECLARE_string_</a>(internal_run_death_test);</div><div class="line"><a name="l09797"></a><span class="lineno"> 9797</span>&#160;</div><div class="line"><a name="l09798"></a><span class="lineno"> 9798</span>&#160;<span class="comment">// Names of the flags (needed for parsing Google Test flags).</span></div><div class="line"><a name="l09799"></a><span class="lineno"> 9799</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> kDeathTestStyleFlag[] = <span class="stringliteral">&quot;death_test_style&quot;</span>;</div><div class="line"><a name="l09800"></a><span class="lineno"> 9800</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> kDeathTestUseFork[] = <span class="stringliteral">&quot;death_test_use_fork&quot;</span>;</div><div class="line"><a name="l09801"></a><span class="lineno"> 9801</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span> kInternalRunDeathTestFlag[] = <span class="stringliteral">&quot;internal_run_death_test&quot;</span>;</div><div class="line"><a name="l09802"></a><span class="lineno"> 9802</span>&#160;</div><div class="line"><a name="l09803"></a><span class="lineno"> 9803</span>&#160;<span class="preprocessor">#if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l09804"></a><span class="lineno"> 9804</span>&#160;</div><div class="line"><a name="l09805"></a><span class="lineno"> 9805</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l09806"></a><span class="lineno"> 9806</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l09807"></a><span class="lineno"> 9807</span>&#160;</div><div class="line"><a name="l09808"></a><span class="lineno"> 9808</span>&#160;<span class="comment">// DeathTest is a class that hides much of the complexity of the</span></div><div class="line"><a name="l09809"></a><span class="lineno"> 9809</span>&#160;<span class="comment">// GTEST_DEATH_TEST_ macro. It is abstract; its static Create method</span></div><div class="line"><a name="l09810"></a><span class="lineno"> 9810</span>&#160;<span class="comment">// returns a concrete class that depends on the prevailing death test</span></div><div class="line"><a name="l09811"></a><span class="lineno"> 9811</span>&#160;<span class="comment">// style, as defined by the --gtest_death_test_style and/or</span></div><div class="line"><a name="l09812"></a><span class="lineno"> 9812</span>&#160;<span class="comment">// --gtest_internal_run_death_test flags.</span></div><div class="line"><a name="l09813"></a><span class="lineno"> 9813</span>&#160;</div><div class="line"><a name="l09814"></a><span class="lineno"> 9814</span>&#160;<span class="comment">// In describing the results of death tests, these terms are used with</span></div><div class="line"><a name="l09815"></a><span class="lineno"> 9815</span>&#160;<span class="comment">// the corresponding definitions:</span></div><div class="line"><a name="l09816"></a><span class="lineno"> 9816</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l09817"></a><span class="lineno"> 9817</span>&#160;<span class="comment">// exit status: The integer exit information in the format specified</span></div><div class="line"><a name="l09818"></a><span class="lineno"> 9818</span>&#160;<span class="comment">// by wait(2)</span></div><div class="line"><a name="l09819"></a><span class="lineno"> 9819</span>&#160;<span class="comment">// exit code: The integer code passed to exit(3), _exit(2), or</span></div><div class="line"><a name="l09820"></a><span class="lineno"> 9820</span>&#160;<span class="comment">// returned from main()</span></div><div class="line"><a name="l09821"></a><span class="lineno"> 9821</span>&#160;class <a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> DeathTest {</div><div class="line"><a name="l09822"></a><span class="lineno"> 9822</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09823"></a><span class="lineno"> 9823</span>&#160; <span class="comment">// Create returns false if there was an error determining the</span></div><div class="line"><a name="l09824"></a><span class="lineno"> 9824</span>&#160; <span class="comment">// appropriate action to take for the current death test; for example,</span></div><div class="line"><a name="l09825"></a><span class="lineno"> 9825</span>&#160; <span class="comment">// if the gtest_death_test_style flag is set to an invalid value.</span></div><div class="line"><a name="l09826"></a><span class="lineno"> 9826</span>&#160; <span class="comment">// The LastMessage method will return a more detailed message in that</span></div><div class="line"><a name="l09827"></a><span class="lineno"> 9827</span>&#160; <span class="comment">// case. Otherwise, the DeathTest pointer pointed to by the &quot;test&quot;</span></div><div class="line"><a name="l09828"></a><span class="lineno"> 9828</span>&#160; <span class="comment">// argument is set. If the death test should be skipped, the pointer</span></div><div class="line"><a name="l09829"></a><span class="lineno"> 9829</span>&#160; <span class="comment">// is set to NULL; otherwise, it is set to the address of a new concrete</span></div><div class="line"><a name="l09830"></a><span class="lineno"> 9830</span>&#160; <span class="comment">// DeathTest object that controls the execution of the current test.</span></div><div class="line"><a name="l09831"></a><span class="lineno"> 9831</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Create(<span class="keyword">const</span> <span class="keywordtype">char</span>* statement, Matcher&lt;const std::string&amp;&gt; matcher,</div><div class="line"><a name="l09832"></a><span class="lineno"> 9832</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, DeathTest** test);</div><div class="line"><a name="l09833"></a><span class="lineno"> 9833</span>&#160; DeathTest();</div><div class="line"><a name="l09834"></a><span class="lineno"> 9834</span>&#160; <span class="keyword">virtual</span> ~DeathTest() { }</div><div class="line"><a name="l09835"></a><span class="lineno"> 9835</span>&#160;</div><div class="line"><a name="l09836"></a><span class="lineno"> 9836</span>&#160; <span class="comment">// A helper class that aborts a death test when it&#39;s deleted.</span></div><div class="line"><a name="l09837"></a><span class="lineno"> 9837</span>&#160; <span class="keyword">class </span>ReturnSentinel {</div><div class="line"><a name="l09838"></a><span class="lineno"> 9838</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09839"></a><span class="lineno"> 9839</span>&#160; <span class="keyword">explicit</span> ReturnSentinel(DeathTest* test) : test_(test) { }</div><div class="line"><a name="l09840"></a><span class="lineno"> 9840</span>&#160; ~ReturnSentinel() { test_-&gt;Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }</div><div class="line"><a name="l09841"></a><span class="lineno"> 9841</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09842"></a><span class="lineno"> 9842</span>&#160; DeathTest* <span class="keyword">const</span> test_;</div><div class="line"><a name="l09843"></a><span class="lineno"> 9843</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(ReturnSentinel);</div><div class="line"><a name="l09844"></a><span class="lineno"> 9844</span>&#160; } <a class="code" href="namespacetesting.html#aa09221196f0a830d5bf1c63ffce69dc3">GTEST_ATTRIBUTE_UNUSED_</a>;</div><div class="line"><a name="l09845"></a><span class="lineno"> 9845</span>&#160;</div><div class="line"><a name="l09846"></a><span class="lineno"> 9846</span>&#160; <span class="comment">// An enumeration of possible roles that may be taken when a death</span></div><div class="line"><a name="l09847"></a><span class="lineno"> 9847</span>&#160; <span class="comment">// test is encountered. EXECUTE means that the death test logic should</span></div><div class="line"><a name="l09848"></a><span class="lineno"> 9848</span>&#160; <span class="comment">// be executed immediately. OVERSEE means that the program should prepare</span></div><div class="line"><a name="l09849"></a><span class="lineno"> 9849</span>&#160; <span class="comment">// the appropriate environment for a child process to execute the death</span></div><div class="line"><a name="l09850"></a><span class="lineno"> 9850</span>&#160; <span class="comment">// test, then wait for it to complete.</span></div><div class="line"><a name="l09851"></a><span class="lineno"> 9851</span>&#160; <span class="keyword">enum</span> TestRole { OVERSEE_TEST, EXECUTE_TEST };</div><div class="line"><a name="l09852"></a><span class="lineno"> 9852</span>&#160;</div><div class="line"><a name="l09853"></a><span class="lineno"> 9853</span>&#160; <span class="comment">// An enumeration of the three reasons that a test might be aborted.</span></div><div class="line"><a name="l09854"></a><span class="lineno"> 9854</span>&#160; <span class="keyword">enum</span> AbortReason {</div><div class="line"><a name="l09855"></a><span class="lineno"> 9855</span>&#160; TEST_ENCOUNTERED_RETURN_STATEMENT,</div><div class="line"><a name="l09856"></a><span class="lineno"> 9856</span>&#160; TEST_THREW_EXCEPTION,</div><div class="line"><a name="l09857"></a><span class="lineno"> 9857</span>&#160; TEST_DID_NOT_DIE</div><div class="line"><a name="l09858"></a><span class="lineno"> 9858</span>&#160; };</div><div class="line"><a name="l09859"></a><span class="lineno"> 9859</span>&#160;</div><div class="line"><a name="l09860"></a><span class="lineno"> 9860</span>&#160; <span class="comment">// Assumes one of the above roles.</span></div><div class="line"><a name="l09861"></a><span class="lineno"> 9861</span>&#160; <span class="keyword">virtual</span> TestRole AssumeRole() = 0;</div><div class="line"><a name="l09862"></a><span class="lineno"> 9862</span>&#160;</div><div class="line"><a name="l09863"></a><span class="lineno"> 9863</span>&#160; <span class="comment">// Waits for the death test to finish and returns its status.</span></div><div class="line"><a name="l09864"></a><span class="lineno"> 9864</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> Wait() = 0;</div><div class="line"><a name="l09865"></a><span class="lineno"> 9865</span>&#160;</div><div class="line"><a name="l09866"></a><span class="lineno"> 9866</span>&#160; <span class="comment">// Returns true if the death test passed; that is, the test process</span></div><div class="line"><a name="l09867"></a><span class="lineno"> 9867</span>&#160; <span class="comment">// exited during the test, its exit status matches a user-supplied</span></div><div class="line"><a name="l09868"></a><span class="lineno"> 9868</span>&#160; <span class="comment">// predicate, and its stderr output matches a user-supplied regular</span></div><div class="line"><a name="l09869"></a><span class="lineno"> 9869</span>&#160; <span class="comment">// expression.</span></div><div class="line"><a name="l09870"></a><span class="lineno"> 9870</span>&#160; <span class="comment">// The user-supplied predicate may be a macro expression rather</span></div><div class="line"><a name="l09871"></a><span class="lineno"> 9871</span>&#160; <span class="comment">// than a function pointer or functor, or else Wait and Passed could</span></div><div class="line"><a name="l09872"></a><span class="lineno"> 9872</span>&#160; <span class="comment">// be combined.</span></div><div class="line"><a name="l09873"></a><span class="lineno"> 9873</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Passed(<span class="keywordtype">bool</span> exit_status_ok) = 0;</div><div class="line"><a name="l09874"></a><span class="lineno"> 9874</span>&#160;</div><div class="line"><a name="l09875"></a><span class="lineno"> 9875</span>&#160; <span class="comment">// Signals that the death test did not die as expected.</span></div><div class="line"><a name="l09876"></a><span class="lineno"> 9876</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">Abort</a>(AbortReason reason) = 0;</div><div class="line"><a name="l09877"></a><span class="lineno"> 9877</span>&#160;</div><div class="line"><a name="l09878"></a><span class="lineno"> 9878</span>&#160; <span class="comment">// Returns a human-readable outcome message regarding the outcome of</span></div><div class="line"><a name="l09879"></a><span class="lineno"> 9879</span>&#160; <span class="comment">// the last death test.</span></div><div class="line"><a name="l09880"></a><span class="lineno"> 9880</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* LastMessage();</div><div class="line"><a name="l09881"></a><span class="lineno"> 9881</span>&#160;</div><div class="line"><a name="l09882"></a><span class="lineno"> 9882</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> set_last_death_test_message(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; message);</div><div class="line"><a name="l09883"></a><span class="lineno"> 9883</span>&#160;</div><div class="line"><a name="l09884"></a><span class="lineno"> 9884</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09885"></a><span class="lineno"> 9885</span>&#160; <span class="comment">// A string containing a description of the outcome of the last death test.</span></div><div class="line"><a name="l09886"></a><span class="lineno"> 9886</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> last_death_test_message_;</div><div class="line"><a name="l09887"></a><span class="lineno"> 9887</span>&#160;</div><div class="line"><a name="l09888"></a><span class="lineno"> 9888</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(DeathTest);</div><div class="line"><a name="l09889"></a><span class="lineno"> 9889</span>&#160;};</div><div class="line"><a name="l09890"></a><span class="lineno"> 9890</span>&#160;</div><div class="line"><a name="l09891"></a><span class="lineno"> 9891</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l09892"></a><span class="lineno"> 9892</span>&#160;</div><div class="line"><a name="l09893"></a><span class="lineno"> 9893</span>&#160;<span class="comment">// Factory interface for death tests. May be mocked out for testing.</span></div><div class="line"><a name="l09894"></a><span class="lineno"> 9894</span>&#160;class DeathTestFactory {</div><div class="line"><a name="l09895"></a><span class="lineno"> 9895</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09896"></a><span class="lineno"> 9896</span>&#160; <span class="keyword">virtual</span> ~DeathTestFactory() { }</div><div class="line"><a name="l09897"></a><span class="lineno"> 9897</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Create(<span class="keyword">const</span> <span class="keywordtype">char</span>* statement,</div><div class="line"><a name="l09898"></a><span class="lineno"> 9898</span>&#160; Matcher&lt;const std::string&amp;&gt; matcher, <span class="keyword">const</span> <span class="keywordtype">char</span>* file,</div><div class="line"><a name="l09899"></a><span class="lineno"> 9899</span>&#160; <span class="keywordtype">int</span> line, DeathTest** test) = 0;</div><div class="line"><a name="l09900"></a><span class="lineno"> 9900</span>&#160;};</div><div class="line"><a name="l09901"></a><span class="lineno"> 9901</span>&#160;</div><div class="line"><a name="l09902"></a><span class="lineno"> 9902</span>&#160;<span class="comment">// A concrete DeathTestFactory implementation for normal use.</span></div><div class="line"><a name="l09903"></a><span class="lineno"> 9903</span>&#160;<span class="keyword">class </span>DefaultDeathTestFactory : <span class="keyword">public</span> DeathTestFactory {</div><div class="line"><a name="l09904"></a><span class="lineno"> 9904</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09905"></a><span class="lineno"> 9905</span>&#160; <span class="keywordtype">bool</span> Create(<span class="keyword">const</span> <span class="keywordtype">char</span>* statement, Matcher&lt;const std::string&amp;&gt; matcher,</div><div class="line"><a name="l09906"></a><span class="lineno"> 9906</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, DeathTest** test) <span class="keyword">override</span>;</div><div class="line"><a name="l09907"></a><span class="lineno"> 9907</span>&#160;};</div><div class="line"><a name="l09908"></a><span class="lineno"> 9908</span>&#160;</div><div class="line"><a name="l09909"></a><span class="lineno"> 9909</span>&#160;<span class="comment">// Returns true if exit_status describes a process that was terminated</span></div><div class="line"><a name="l09910"></a><span class="lineno"> 9910</span>&#160;<span class="comment">// by a signal, or exited normally with a nonzero exit code.</span></div><div class="line"><a name="l09911"></a><span class="lineno"> 9911</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">bool</span> ExitedUnsuccessfully(<span class="keywordtype">int</span> exit_status);</div><div class="line"><a name="l09912"></a><span class="lineno"> 9912</span>&#160;</div><div class="line"><a name="l09913"></a><span class="lineno"> 9913</span>&#160;<span class="comment">// A string passed to EXPECT_DEATH (etc.) is caught by one of these overloads</span></div><div class="line"><a name="l09914"></a><span class="lineno"> 9914</span>&#160;<span class="comment">// and interpreted as a regex (rather than an Eq matcher) for legacy</span></div><div class="line"><a name="l09915"></a><span class="lineno"> 9915</span>&#160;<span class="comment">// compatibility.</span></div><div class="line"><a name="l09916"></a><span class="lineno"> 9916</span>&#160;<span class="keyword">inline</span> Matcher&lt;const ::std::string&amp;&gt; MakeDeathTestMatcher(</div><div class="line"><a name="l09917"></a><span class="lineno"> 9917</span>&#160; ::<a class="code" href="classtesting_1_1internal_1_1_r_e.html">testing::internal::RE</a> regex) {</div><div class="line"><a name="l09918"></a><span class="lineno"> 9918</span>&#160; <span class="keywordflow">return</span> ContainsRegex(regex.<a class="code" href="classtesting_1_1internal_1_1_r_e.html#a24236aab3a6b0183a145a6f4c0bb9848">pattern</a>());</div><div class="line"><a name="l09919"></a><span class="lineno"> 9919</span>&#160;}</div><div class="line"><a name="l09920"></a><span class="lineno"> 9920</span>&#160;<span class="keyword">inline</span> Matcher&lt;const ::std::string&amp;&gt; MakeDeathTestMatcher(<span class="keyword">const</span> <span class="keywordtype">char</span>* regex) {</div><div class="line"><a name="l09921"></a><span class="lineno"> 9921</span>&#160; <span class="keywordflow">return</span> ContainsRegex(regex);</div><div class="line"><a name="l09922"></a><span class="lineno"> 9922</span>&#160;}</div><div class="line"><a name="l09923"></a><span class="lineno"> 9923</span>&#160;<span class="keyword">inline</span> Matcher&lt;const ::std::string&amp;&gt; MakeDeathTestMatcher(</div><div class="line"><a name="l09924"></a><span class="lineno"> 9924</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; regex) {</div><div class="line"><a name="l09925"></a><span class="lineno"> 9925</span>&#160; <span class="keywordflow">return</span> ContainsRegex(regex);</div><div class="line"><a name="l09926"></a><span class="lineno"> 9926</span>&#160;}</div><div class="line"><a name="l09927"></a><span class="lineno"> 9927</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l09928"></a><span class="lineno"> 9928</span>&#160;<span class="keyword">inline</span> Matcher&lt;const ::std::string&amp;&gt; MakeDeathTestMatcher(</div><div class="line"><a name="l09929"></a><span class="lineno"> 9929</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; regex) {</div><div class="line"><a name="l09930"></a><span class="lineno"> 9930</span>&#160; <span class="keywordflow">return</span> ContainsRegex(regex);</div><div class="line"><a name="l09931"></a><span class="lineno"> 9931</span>&#160;}</div><div class="line"><a name="l09932"></a><span class="lineno"> 9932</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l09933"></a><span class="lineno"> 9933</span>&#160;</div><div class="line"><a name="l09934"></a><span class="lineno"> 9934</span>&#160;<span class="comment">// If a Matcher&lt;const ::std::string&amp;&gt; is passed to EXPECT_DEATH (etc.), it&#39;s</span></div><div class="line"><a name="l09935"></a><span class="lineno"> 9935</span>&#160;<span class="comment">// used directly.</span></div><div class="line"><a name="l09936"></a><span class="lineno"> 9936</span>&#160;<span class="keyword">inline</span> Matcher&lt;const ::std::string&amp;&gt; MakeDeathTestMatcher(</div><div class="line"><a name="l09937"></a><span class="lineno"> 9937</span>&#160; Matcher&lt;const ::std::string&amp;&gt; matcher) {</div><div class="line"><a name="l09938"></a><span class="lineno"> 9938</span>&#160; <span class="keywordflow">return</span> matcher;</div><div class="line"><a name="l09939"></a><span class="lineno"> 9939</span>&#160;}</div><div class="line"><a name="l09940"></a><span class="lineno"> 9940</span>&#160;</div><div class="line"><a name="l09941"></a><span class="lineno"> 9941</span>&#160;<span class="comment">// Traps C++ exceptions escaping statement and reports them as test</span></div><div class="line"><a name="l09942"></a><span class="lineno"> 9942</span>&#160;<span class="comment">// failures. Note that trapping SEH exceptions is not implemented here.</span></div><div class="line"><a name="l09943"></a><span class="lineno"> 9943</span>&#160;<span class="preprocessor"># if GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l09944"></a><span class="lineno"> 9944</span>&#160;<span class="preprocessor"># define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \</span></div><div class="line"><a name="l09945"></a><span class="lineno"> 9945</span>&#160;<span class="preprocessor"> try { \</span></div><div class="line"><a name="l09946"></a><span class="lineno"> 9946</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l09947"></a><span class="lineno"> 9947</span>&#160;<span class="preprocessor"> } catch (const ::std::exception&amp; gtest_exception) { \</span></div><div class="line"><a name="l09948"></a><span class="lineno"> 9948</span>&#160;<span class="preprocessor"> fprintf(\</span></div><div class="line"><a name="l09949"></a><span class="lineno"> 9949</span>&#160;<span class="preprocessor"> stderr, \</span></div><div class="line"><a name="l09950"></a><span class="lineno"> 9950</span>&#160;<span class="preprocessor"> &quot;\n%s: Caught std::exception-derived exception escaping the &quot; \</span></div><div class="line"><a name="l09951"></a><span class="lineno"> 9951</span>&#160;<span class="preprocessor"> &quot;death test statement. Exception message: %s\n&quot;, \</span></div><div class="line"><a name="l09952"></a><span class="lineno"> 9952</span>&#160;<span class="preprocessor"> ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \</span></div><div class="line"><a name="l09953"></a><span class="lineno"> 9953</span>&#160;<span class="preprocessor"> gtest_exception.what()); \</span></div><div class="line"><a name="l09954"></a><span class="lineno"> 9954</span>&#160;<span class="preprocessor"> fflush(stderr); \</span></div><div class="line"><a name="l09955"></a><span class="lineno"> 9955</span>&#160;<span class="preprocessor"> death_test-&gt;Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \</span></div><div class="line"><a name="l09956"></a><span class="lineno"> 9956</span>&#160;<span class="preprocessor"> } catch (...) { \</span></div><div class="line"><a name="l09957"></a><span class="lineno"> 9957</span>&#160;<span class="preprocessor"> death_test-&gt;Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \</span></div><div class="line"><a name="l09958"></a><span class="lineno"> 9958</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l09959"></a><span class="lineno"> 9959</span>&#160;</div><div class="line"><a name="l09960"></a><span class="lineno"> 9960</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l09961"></a><span class="lineno"> 9961</span>&#160;<span class="preprocessor"># define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \</span></div><div class="line"><a name="l09962"></a><span class="lineno"> 9962</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)</span></div><div class="line"><a name="l09963"></a><span class="lineno"> 9963</span>&#160;</div><div class="line"><a name="l09964"></a><span class="lineno"> 9964</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l09965"></a><span class="lineno"> 9965</span>&#160;</div><div class="line"><a name="l09966"></a><span class="lineno"> 9966</span>&#160;<span class="comment">// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,</span></div><div class="line"><a name="l09967"></a><span class="lineno"> 9967</span>&#160;<span class="comment">// ASSERT_EXIT*, and EXPECT_EXIT*.</span></div><div class="line"><a name="l09968"></a><span class="lineno"> 9968</span>&#160;<span class="preprocessor">#define GTEST_DEATH_TEST_(statement, predicate, regex_or_matcher, fail) \</span></div><div class="line"><a name="l09969"></a><span class="lineno"> 9969</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l09970"></a><span class="lineno"> 9970</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l09971"></a><span class="lineno"> 9971</span>&#160;<span class="preprocessor"> ::testing::internal::DeathTest* gtest_dt; \</span></div><div class="line"><a name="l09972"></a><span class="lineno"> 9972</span>&#160;<span class="preprocessor"> if (!::testing::internal::DeathTest::Create( \</span></div><div class="line"><a name="l09973"></a><span class="lineno"> 9973</span>&#160;<span class="preprocessor"> #statement, \</span></div><div class="line"><a name="l09974"></a><span class="lineno"> 9974</span>&#160;<span class="preprocessor"> ::testing::internal::MakeDeathTestMatcher(regex_or_matcher), \</span></div><div class="line"><a name="l09975"></a><span class="lineno"> 9975</span>&#160;<span class="preprocessor"> __FILE__, __LINE__, &amp;gtest_dt)) { \</span></div><div class="line"><a name="l09976"></a><span class="lineno"> 9976</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \</span></div><div class="line"><a name="l09977"></a><span class="lineno"> 9977</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l09978"></a><span class="lineno"> 9978</span>&#160;<span class="preprocessor"> if (gtest_dt != nullptr) { \</span></div><div class="line"><a name="l09979"></a><span class="lineno"> 9979</span>&#160;<span class="preprocessor"> std::unique_ptr&lt; ::testing::internal::DeathTest&gt; gtest_dt_ptr(gtest_dt); \</span></div><div class="line"><a name="l09980"></a><span class="lineno"> 9980</span>&#160;<span class="preprocessor"> switch (gtest_dt-&gt;AssumeRole()) { \</span></div><div class="line"><a name="l09981"></a><span class="lineno"> 9981</span>&#160;<span class="preprocessor"> case ::testing::internal::DeathTest::OVERSEE_TEST: \</span></div><div class="line"><a name="l09982"></a><span class="lineno"> 9982</span>&#160;<span class="preprocessor"> if (!gtest_dt-&gt;Passed(predicate(gtest_dt-&gt;Wait()))) { \</span></div><div class="line"><a name="l09983"></a><span class="lineno"> 9983</span>&#160;<span class="preprocessor"> goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \</span></div><div class="line"><a name="l09984"></a><span class="lineno"> 9984</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l09985"></a><span class="lineno"> 9985</span>&#160;<span class="preprocessor"> break; \</span></div><div class="line"><a name="l09986"></a><span class="lineno"> 9986</span>&#160;<span class="preprocessor"> case ::testing::internal::DeathTest::EXECUTE_TEST: { \</span></div><div class="line"><a name="l09987"></a><span class="lineno"> 9987</span>&#160;<span class="preprocessor"> ::testing::internal::DeathTest::ReturnSentinel gtest_sentinel( \</span></div><div class="line"><a name="l09988"></a><span class="lineno"> 9988</span>&#160;<span class="preprocessor"> gtest_dt); \</span></div><div class="line"><a name="l09989"></a><span class="lineno"> 9989</span>&#160;<span class="preprocessor"> GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \</span></div><div class="line"><a name="l09990"></a><span class="lineno"> 9990</span>&#160;<span class="preprocessor"> gtest_dt-&gt;Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \</span></div><div class="line"><a name="l09991"></a><span class="lineno"> 9991</span>&#160;<span class="preprocessor"> break; \</span></div><div class="line"><a name="l09992"></a><span class="lineno"> 9992</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l09993"></a><span class="lineno"> 9993</span>&#160;<span class="preprocessor"> default: \</span></div><div class="line"><a name="l09994"></a><span class="lineno"> 9994</span>&#160;<span class="preprocessor"> break; \</span></div><div class="line"><a name="l09995"></a><span class="lineno"> 9995</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l09996"></a><span class="lineno"> 9996</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l09997"></a><span class="lineno"> 9997</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l09998"></a><span class="lineno"> 9998</span>&#160;<span class="preprocessor"> GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__) \</span></div><div class="line"><a name="l09999"></a><span class="lineno"> 9999</span>&#160;<span class="preprocessor"> : fail(::testing::internal::DeathTest::LastMessage())</span></div><div class="line"><a name="l10000"></a><span class="lineno">10000</span>&#160;<span class="comment">// The symbol &quot;fail&quot; here expands to something into which a message</span></div><div class="line"><a name="l10001"></a><span class="lineno">10001</span>&#160;<span class="comment">// can be streamed.</span></div><div class="line"><a name="l10002"></a><span class="lineno">10002</span>&#160;</div><div class="line"><a name="l10003"></a><span class="lineno">10003</span>&#160;<span class="comment">// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in</span></div><div class="line"><a name="l10004"></a><span class="lineno">10004</span>&#160;<span class="comment">// NDEBUG mode. In this case we need the statements to be executed and the macro</span></div><div class="line"><a name="l10005"></a><span class="lineno">10005</span>&#160;<span class="comment">// must accept a streamed message even though the message is never printed.</span></div><div class="line"><a name="l10006"></a><span class="lineno">10006</span>&#160;<span class="comment">// The regex object is not evaluated, but it is used to prevent &quot;unused&quot;</span></div><div class="line"><a name="l10007"></a><span class="lineno">10007</span>&#160;<span class="comment">// warnings and to avoid an expression that doesn&#39;t compile in debug mode.</span></div><div class="line"><a name="l10008"></a><span class="lineno">10008</span>&#160;<span class="preprocessor">#define GTEST_EXECUTE_STATEMENT_(statement, regex_or_matcher) \</span></div><div class="line"><a name="l10009"></a><span class="lineno">10009</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l10010"></a><span class="lineno">10010</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l10011"></a><span class="lineno">10011</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l10012"></a><span class="lineno">10012</span>&#160;<span class="preprocessor"> } else if (!::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l10013"></a><span class="lineno">10013</span>&#160;<span class="preprocessor"> ::testing::internal::MakeDeathTestMatcher(regex_or_matcher); \</span></div><div class="line"><a name="l10014"></a><span class="lineno">10014</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l10015"></a><span class="lineno">10015</span>&#160;<span class="preprocessor"> ::testing::Message()</span></div><div class="line"><a name="l10016"></a><span class="lineno">10016</span>&#160;</div><div class="line"><a name="l10017"></a><span class="lineno">10017</span>&#160;<span class="comment">// A class representing the parsed contents of the</span></div><div class="line"><a name="l10018"></a><span class="lineno">10018</span>&#160;<span class="comment">// --gtest_internal_run_death_test flag, as it existed when</span></div><div class="line"><a name="l10019"></a><span class="lineno">10019</span>&#160;<span class="comment">// RUN_ALL_TESTS was called.</span></div><div class="line"><a name="l10020"></a><span class="lineno">10020</span>&#160;<span class="keyword">class </span>InternalRunDeathTestFlag {</div><div class="line"><a name="l10021"></a><span class="lineno">10021</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10022"></a><span class="lineno">10022</span>&#160; InternalRunDeathTestFlag(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; a_file,</div><div class="line"><a name="l10023"></a><span class="lineno">10023</span>&#160; <span class="keywordtype">int</span> a_line,</div><div class="line"><a name="l10024"></a><span class="lineno">10024</span>&#160; <span class="keywordtype">int</span> an_index,</div><div class="line"><a name="l10025"></a><span class="lineno">10025</span>&#160; <span class="keywordtype">int</span> a_write_fd)</div><div class="line"><a name="l10026"></a><span class="lineno">10026</span>&#160; : file_(a_file), line_(a_line), <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>(an_index),</div><div class="line"><a name="l10027"></a><span class="lineno">10027</span>&#160; write_fd_(a_write_fd) {}</div><div class="line"><a name="l10028"></a><span class="lineno">10028</span>&#160;</div><div class="line"><a name="l10029"></a><span class="lineno">10029</span>&#160; ~InternalRunDeathTestFlag() {</div><div class="line"><a name="l10030"></a><span class="lineno">10030</span>&#160; <span class="keywordflow">if</span> (write_fd_ &gt;= 0)</div><div class="line"><a name="l10031"></a><span class="lineno">10031</span>&#160; <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a15e5b8f2a535ef1b2529b85b861e4846">posix::Close</a>(write_fd_);</div><div class="line"><a name="l10032"></a><span class="lineno">10032</span>&#160; }</div><div class="line"><a name="l10033"></a><span class="lineno">10033</span>&#160;</div><div class="line"><a name="l10034"></a><span class="lineno">10034</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; file()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> file_; }</div><div class="line"><a name="l10035"></a><span class="lineno">10035</span>&#160; <span class="keywordtype">int</span> line()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> line_; }</div><div class="line"><a name="l10036"></a><span class="lineno">10036</span>&#160; <span class="keywordtype">int</span> index()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>; }</div><div class="line"><a name="l10037"></a><span class="lineno">10037</span>&#160; <span class="keywordtype">int</span> write_fd()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> write_fd_; }</div><div class="line"><a name="l10038"></a><span class="lineno">10038</span>&#160;</div><div class="line"><a name="l10039"></a><span class="lineno">10039</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10040"></a><span class="lineno">10040</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> file_;</div><div class="line"><a name="l10041"></a><span class="lineno">10041</span>&#160; <span class="keywordtype">int</span> line_;</div><div class="line"><a name="l10042"></a><span class="lineno">10042</span>&#160; <span class="keywordtype">int</span> <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>;</div><div class="line"><a name="l10043"></a><span class="lineno">10043</span>&#160; <span class="keywordtype">int</span> write_fd_;</div><div class="line"><a name="l10044"></a><span class="lineno">10044</span>&#160;</div><div class="line"><a name="l10045"></a><span class="lineno">10045</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(InternalRunDeathTestFlag);</div><div class="line"><a name="l10046"></a><span class="lineno">10046</span>&#160;};</div><div class="line"><a name="l10047"></a><span class="lineno">10047</span>&#160;</div><div class="line"><a name="l10048"></a><span class="lineno">10048</span>&#160;<span class="comment">// Returns a newly created InternalRunDeathTestFlag object with fields</span></div><div class="line"><a name="l10049"></a><span class="lineno">10049</span>&#160;<span class="comment">// initialized from the GTEST_FLAG(internal_run_death_test) flag if</span></div><div class="line"><a name="l10050"></a><span class="lineno">10050</span>&#160;<span class="comment">// the flag is specified; otherwise returns NULL.</span></div><div class="line"><a name="l10051"></a><span class="lineno">10051</span>&#160;InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();</div><div class="line"><a name="l10052"></a><span class="lineno">10052</span>&#160;</div><div class="line"><a name="l10053"></a><span class="lineno">10053</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l10054"></a><span class="lineno">10054</span>&#160;</div><div class="line"><a name="l10055"></a><span class="lineno">10055</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l10056"></a><span class="lineno">10056</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l10057"></a><span class="lineno">10057</span>&#160;</div><div class="line"><a name="l10058"></a><span class="lineno">10058</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_</span></div><div class="line"><a name="l10059"></a><span class="lineno">10059</span>&#160;</div><div class="line"><a name="l10060"></a><span class="lineno">10060</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l10061"></a><span class="lineno">10061</span>&#160;</div><div class="line"><a name="l10062"></a><span class="lineno">10062</span>&#160;<span class="comment">// This flag controls the style of death tests. Valid values are &quot;threadsafe&quot;,</span></div><div class="line"><a name="l10063"></a><span class="lineno">10063</span>&#160;<span class="comment">// meaning that the death test child process will re-execute the test binary</span></div><div class="line"><a name="l10064"></a><span class="lineno">10064</span>&#160;<span class="comment">// from the start, running only a single death test, or &quot;fast&quot;,</span></div><div class="line"><a name="l10065"></a><span class="lineno">10065</span>&#160;<span class="comment">// meaning that the child process will execute the test logic immediately</span></div><div class="line"><a name="l10066"></a><span class="lineno">10066</span>&#160;<span class="comment">// after forking.</span></div><div class="line"><a name="l10067"></a><span class="lineno">10067</span>&#160;<a class="code" href="namespacetesting.html#a37b7e87f0a5f502c6918f37d1768c1f3">GTEST_DECLARE_string_</a>(death_test_style);</div><div class="line"><a name="l10068"></a><span class="lineno">10068</span>&#160;</div><div class="line"><a name="l10069"></a><span class="lineno">10069</span>&#160;<span class="preprocessor">#if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l10070"></a><span class="lineno">10070</span>&#160;</div><div class="line"><a name="l10071"></a><span class="lineno">10071</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l10072"></a><span class="lineno">10072</span>&#160;</div><div class="line"><a name="l10073"></a><span class="lineno">10073</span>&#160;<span class="comment">// Returns a Boolean value indicating whether the caller is currently</span></div><div class="line"><a name="l10074"></a><span class="lineno">10074</span>&#160;<span class="comment">// executing in the context of the death test child process. Tools such as</span></div><div class="line"><a name="l10075"></a><span class="lineno">10075</span>&#160;<span class="comment">// Valgrind heap checkers may need this to modify their behavior in death</span></div><div class="line"><a name="l10076"></a><span class="lineno">10076</span>&#160;<span class="comment">// tests. IMPORTANT: This is an internal utility. Using it may break the</span></div><div class="line"><a name="l10077"></a><span class="lineno">10077</span>&#160;<span class="comment">// implementation of death tests. User code MUST NOT use it.</span></div><div class="line"><a name="l10078"></a><span class="lineno">10078</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">bool</span> InDeathTestChild();</div><div class="line"><a name="l10079"></a><span class="lineno">10079</span>&#160;</div><div class="line"><a name="l10080"></a><span class="lineno">10080</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l10081"></a><span class="lineno">10081</span>&#160;</div><div class="line"><a name="l10082"></a><span class="lineno">10082</span>&#160;<span class="comment">// The following macros are useful for writing death tests.</span></div><div class="line"><a name="l10083"></a><span class="lineno">10083</span>&#160;</div><div class="line"><a name="l10084"></a><span class="lineno">10084</span>&#160;<span class="comment">// Here&#39;s what happens when an ASSERT_DEATH* or EXPECT_DEATH* is</span></div><div class="line"><a name="l10085"></a><span class="lineno">10085</span>&#160;<span class="comment">// executed:</span></div><div class="line"><a name="l10086"></a><span class="lineno">10086</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10087"></a><span class="lineno">10087</span>&#160;<span class="comment">// 1. It generates a warning if there is more than one active</span></div><div class="line"><a name="l10088"></a><span class="lineno">10088</span>&#160;<span class="comment">// thread. This is because it&#39;s safe to fork() or clone() only</span></div><div class="line"><a name="l10089"></a><span class="lineno">10089</span>&#160;<span class="comment">// when there is a single thread.</span></div><div class="line"><a name="l10090"></a><span class="lineno">10090</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10091"></a><span class="lineno">10091</span>&#160;<span class="comment">// 2. The parent process clone()s a sub-process and runs the death</span></div><div class="line"><a name="l10092"></a><span class="lineno">10092</span>&#160;<span class="comment">// test in it; the sub-process exits with code 0 at the end of the</span></div><div class="line"><a name="l10093"></a><span class="lineno">10093</span>&#160;<span class="comment">// death test, if it hasn&#39;t exited already.</span></div><div class="line"><a name="l10094"></a><span class="lineno">10094</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10095"></a><span class="lineno">10095</span>&#160;<span class="comment">// 3. The parent process waits for the sub-process to terminate.</span></div><div class="line"><a name="l10096"></a><span class="lineno">10096</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10097"></a><span class="lineno">10097</span>&#160;<span class="comment">// 4. The parent process checks the exit code and error message of</span></div><div class="line"><a name="l10098"></a><span class="lineno">10098</span>&#160;<span class="comment">// the sub-process.</span></div><div class="line"><a name="l10099"></a><span class="lineno">10099</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10100"></a><span class="lineno">10100</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l10101"></a><span class="lineno">10101</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10102"></a><span class="lineno">10102</span>&#160;<span class="comment">// ASSERT_DEATH(server.SendMessage(56, &quot;Hello&quot;), &quot;Invalid port number&quot;);</span></div><div class="line"><a name="l10103"></a><span class="lineno">10103</span>&#160;<span class="comment">// for (int i = 0; i &lt; 5; i++) {</span></div><div class="line"><a name="l10104"></a><span class="lineno">10104</span>&#160;<span class="comment">// EXPECT_DEATH(server.ProcessRequest(i),</span></div><div class="line"><a name="l10105"></a><span class="lineno">10105</span>&#160;<span class="comment">// &quot;Invalid request .* in ProcessRequest()&quot;)</span></div><div class="line"><a name="l10106"></a><span class="lineno">10106</span>&#160;<span class="comment">// &lt;&lt; &quot;Failed to die on request &quot; &lt;&lt; i;</span></div><div class="line"><a name="l10107"></a><span class="lineno">10107</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l10108"></a><span class="lineno">10108</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10109"></a><span class="lineno">10109</span>&#160;<span class="comment">// ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), &quot;Exiting&quot;);</span></div><div class="line"><a name="l10110"></a><span class="lineno">10110</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10111"></a><span class="lineno">10111</span>&#160;<span class="comment">// bool KilledBySIGHUP(int exit_code) {</span></div><div class="line"><a name="l10112"></a><span class="lineno">10112</span>&#160;<span class="comment">// return WIFSIGNALED(exit_code) &amp;&amp; WTERMSIG(exit_code) == SIGHUP;</span></div><div class="line"><a name="l10113"></a><span class="lineno">10113</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l10114"></a><span class="lineno">10114</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10115"></a><span class="lineno">10115</span>&#160;<span class="comment">// ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, &quot;Hanging up!&quot;);</span></div><div class="line"><a name="l10116"></a><span class="lineno">10116</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10117"></a><span class="lineno">10117</span>&#160;<span class="comment">// On the regular expressions used in death tests:</span></div><div class="line"><a name="l10118"></a><span class="lineno">10118</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10119"></a><span class="lineno">10119</span>&#160;<span class="comment">// GOOGLETEST_CM0005 DO NOT DELETE</span></div><div class="line"><a name="l10120"></a><span class="lineno">10120</span>&#160;<span class="comment">// On POSIX-compliant systems (*nix), we use the &lt;regex.h&gt; library,</span></div><div class="line"><a name="l10121"></a><span class="lineno">10121</span>&#160;<span class="comment">// which uses the POSIX extended regex syntax.</span></div><div class="line"><a name="l10122"></a><span class="lineno">10122</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10123"></a><span class="lineno">10123</span>&#160;<span class="comment">// On other platforms (e.g. Windows or Mac), we only support a simple regex</span></div><div class="line"><a name="l10124"></a><span class="lineno">10124</span>&#160;<span class="comment">// syntax implemented as part of Google Test. This limited</span></div><div class="line"><a name="l10125"></a><span class="lineno">10125</span>&#160;<span class="comment">// implementation should be enough most of the time when writing</span></div><div class="line"><a name="l10126"></a><span class="lineno">10126</span>&#160;<span class="comment">// death tests; though it lacks many features you can find in PCRE</span></div><div class="line"><a name="l10127"></a><span class="lineno">10127</span>&#160;<span class="comment">// or POSIX extended regex syntax. For example, we don&#39;t support</span></div><div class="line"><a name="l10128"></a><span class="lineno">10128</span>&#160;<span class="comment">// union (&quot;x|y&quot;), grouping (&quot;(xy)&quot;), brackets (&quot;[xy]&quot;), and</span></div><div class="line"><a name="l10129"></a><span class="lineno">10129</span>&#160;<span class="comment">// repetition count (&quot;x{5,7}&quot;), among others.</span></div><div class="line"><a name="l10130"></a><span class="lineno">10130</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10131"></a><span class="lineno">10131</span>&#160;<span class="comment">// Below is the syntax that we do support. We chose it to be a</span></div><div class="line"><a name="l10132"></a><span class="lineno">10132</span>&#160;<span class="comment">// subset of both PCRE and POSIX extended regex, so it&#39;s easy to</span></div><div class="line"><a name="l10133"></a><span class="lineno">10133</span>&#160;<span class="comment">// learn wherever you come from. In the following: &#39;A&#39; denotes a</span></div><div class="line"><a name="l10134"></a><span class="lineno">10134</span>&#160;<span class="comment">// literal character, period (.), or a single \\ escape sequence;</span></div><div class="line"><a name="l10135"></a><span class="lineno">10135</span>&#160;<span class="comment">// &#39;x&#39; and &#39;y&#39; denote regular expressions; &#39;m&#39; and &#39;n&#39; are for</span></div><div class="line"><a name="l10136"></a><span class="lineno">10136</span>&#160;<span class="comment">// natural numbers.</span></div><div class="line"><a name="l10137"></a><span class="lineno">10137</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10138"></a><span class="lineno">10138</span>&#160;<span class="comment">// c matches any literal character c</span></div><div class="line"><a name="l10139"></a><span class="lineno">10139</span>&#160;<span class="comment">// \\d matches any decimal digit</span></div><div class="line"><a name="l10140"></a><span class="lineno">10140</span>&#160;<span class="comment">// \\D matches any character that&#39;s not a decimal digit</span></div><div class="line"><a name="l10141"></a><span class="lineno">10141</span>&#160;<span class="comment">// \\f matches \f</span></div><div class="line"><a name="l10142"></a><span class="lineno">10142</span>&#160;<span class="comment">// \\n matches \n</span></div><div class="line"><a name="l10143"></a><span class="lineno">10143</span>&#160;<span class="comment">// \\r matches \r</span></div><div class="line"><a name="l10144"></a><span class="lineno">10144</span>&#160;<span class="comment">// \\s matches any ASCII whitespace, including \n</span></div><div class="line"><a name="l10145"></a><span class="lineno">10145</span>&#160;<span class="comment">// \\S matches any character that&#39;s not a whitespace</span></div><div class="line"><a name="l10146"></a><span class="lineno">10146</span>&#160;<span class="comment">// \\t matches \t</span></div><div class="line"><a name="l10147"></a><span class="lineno">10147</span>&#160;<span class="comment">// \\v matches \v</span></div><div class="line"><a name="l10148"></a><span class="lineno">10148</span>&#160;<span class="comment">// \\w matches any letter, _, or decimal digit</span></div><div class="line"><a name="l10149"></a><span class="lineno">10149</span>&#160;<span class="comment">// \\W matches any character that \\w doesn&#39;t match</span></div><div class="line"><a name="l10150"></a><span class="lineno">10150</span>&#160;<span class="comment">// \\c matches any literal character c, which must be a punctuation</span></div><div class="line"><a name="l10151"></a><span class="lineno">10151</span>&#160;<span class="comment">// . matches any single character except \n</span></div><div class="line"><a name="l10152"></a><span class="lineno">10152</span>&#160;<span class="comment">// A? matches 0 or 1 occurrences of A</span></div><div class="line"><a name="l10153"></a><span class="lineno">10153</span>&#160;<span class="comment">// A* matches 0 or many occurrences of A</span></div><div class="line"><a name="l10154"></a><span class="lineno">10154</span>&#160;<span class="comment">// A+ matches 1 or many occurrences of A</span></div><div class="line"><a name="l10155"></a><span class="lineno">10155</span>&#160;<span class="comment">// ^ matches the beginning of a string (not that of each line)</span></div><div class="line"><a name="l10156"></a><span class="lineno">10156</span>&#160;<span class="comment">// $ matches the end of a string (not that of each line)</span></div><div class="line"><a name="l10157"></a><span class="lineno">10157</span>&#160;<span class="comment">// xy matches x followed by y</span></div><div class="line"><a name="l10158"></a><span class="lineno">10158</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10159"></a><span class="lineno">10159</span>&#160;<span class="comment">// If you accidentally use PCRE or POSIX extended regex features</span></div><div class="line"><a name="l10160"></a><span class="lineno">10160</span>&#160;<span class="comment">// not implemented by us, you will get a run-time failure. In that</span></div><div class="line"><a name="l10161"></a><span class="lineno">10161</span>&#160;<span class="comment">// case, please try to rewrite your regular expression within the</span></div><div class="line"><a name="l10162"></a><span class="lineno">10162</span>&#160;<span class="comment">// above syntax.</span></div><div class="line"><a name="l10163"></a><span class="lineno">10163</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10164"></a><span class="lineno">10164</span>&#160;<span class="comment">// This implementation is *not* meant to be as highly tuned or robust</span></div><div class="line"><a name="l10165"></a><span class="lineno">10165</span>&#160;<span class="comment">// as a compiled regex library, but should perform well enough for a</span></div><div class="line"><a name="l10166"></a><span class="lineno">10166</span>&#160;<span class="comment">// death test, which already incurs significant overhead by launching</span></div><div class="line"><a name="l10167"></a><span class="lineno">10167</span>&#160;<span class="comment">// a child process.</span></div><div class="line"><a name="l10168"></a><span class="lineno">10168</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10169"></a><span class="lineno">10169</span>&#160;<span class="comment">// Known caveats:</span></div><div class="line"><a name="l10170"></a><span class="lineno">10170</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10171"></a><span class="lineno">10171</span>&#160;<span class="comment">// A &quot;threadsafe&quot; style death test obtains the path to the test</span></div><div class="line"><a name="l10172"></a><span class="lineno">10172</span>&#160;<span class="comment">// program from argv[0] and re-executes it in the sub-process. For</span></div><div class="line"><a name="l10173"></a><span class="lineno">10173</span>&#160;<span class="comment">// simplicity, the current implementation doesn&#39;t search the PATH</span></div><div class="line"><a name="l10174"></a><span class="lineno">10174</span>&#160;<span class="comment">// when launching the sub-process. This means that the user must</span></div><div class="line"><a name="l10175"></a><span class="lineno">10175</span>&#160;<span class="comment">// invoke the test program via a path that contains at least one</span></div><div class="line"><a name="l10176"></a><span class="lineno">10176</span>&#160;<span class="comment">// path separator (e.g. path/to/foo_test and</span></div><div class="line"><a name="l10177"></a><span class="lineno">10177</span>&#160;<span class="comment">// /absolute/path/to/bar_test are fine, but foo_test is not). This</span></div><div class="line"><a name="l10178"></a><span class="lineno">10178</span>&#160;<span class="comment">// is rarely a problem as people usually don&#39;t put the test binary</span></div><div class="line"><a name="l10179"></a><span class="lineno">10179</span>&#160;<span class="comment">// directory in PATH.</span></div><div class="line"><a name="l10180"></a><span class="lineno">10180</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10181"></a><span class="lineno">10181</span>&#160;</div><div class="line"><a name="l10182"></a><span class="lineno">10182</span>&#160;<span class="comment">// Asserts that a given statement causes the program to exit, with an</span></div><div class="line"><a name="l10183"></a><span class="lineno">10183</span>&#160;<span class="comment">// integer exit status that satisfies predicate, and emitting error output</span></div><div class="line"><a name="l10184"></a><span class="lineno">10184</span>&#160;<span class="comment">// that matches regex.</span></div><div class="line"><a name="l10185"></a><span class="lineno">10185</span>&#160;<span class="preprocessor"># define ASSERT_EXIT(statement, predicate, regex) \</span></div><div class="line"><a name="l10186"></a><span class="lineno">10186</span>&#160;<span class="preprocessor"> GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l10187"></a><span class="lineno">10187</span>&#160;</div><div class="line"><a name="l10188"></a><span class="lineno">10188</span>&#160;<span class="comment">// Like ASSERT_EXIT, but continues on to successive tests in the</span></div><div class="line"><a name="l10189"></a><span class="lineno">10189</span>&#160;<span class="comment">// test suite, if any:</span></div><div class="line"><a name="l10190"></a><span class="lineno">10190</span>&#160;<span class="preprocessor"># define EXPECT_EXIT(statement, predicate, regex) \</span></div><div class="line"><a name="l10191"></a><span class="lineno">10191</span>&#160;<span class="preprocessor"> GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l10192"></a><span class="lineno">10192</span>&#160;</div><div class="line"><a name="l10193"></a><span class="lineno">10193</span>&#160;<span class="comment">// Asserts that a given statement causes the program to exit, either by</span></div><div class="line"><a name="l10194"></a><span class="lineno">10194</span>&#160;<span class="comment">// explicitly exiting with a nonzero exit code or being killed by a</span></div><div class="line"><a name="l10195"></a><span class="lineno">10195</span>&#160;<span class="comment">// signal, and emitting error output that matches regex.</span></div><div class="line"><a name="l10196"></a><span class="lineno">10196</span>&#160;<span class="preprocessor"># define ASSERT_DEATH(statement, regex) \</span></div><div class="line"><a name="l10197"></a><span class="lineno">10197</span>&#160;<span class="preprocessor"> ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)</span></div><div class="line"><a name="l10198"></a><span class="lineno">10198</span>&#160;</div><div class="line"><a name="l10199"></a><span class="lineno">10199</span>&#160;<span class="comment">// Like ASSERT_DEATH, but continues on to successive tests in the</span></div><div class="line"><a name="l10200"></a><span class="lineno">10200</span>&#160;<span class="comment">// test suite, if any:</span></div><div class="line"><a name="l10201"></a><span class="lineno">10201</span>&#160;<span class="preprocessor"># define EXPECT_DEATH(statement, regex) \</span></div><div class="line"><a name="l10202"></a><span class="lineno">10202</span>&#160;<span class="preprocessor"> EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)</span></div><div class="line"><a name="l10203"></a><span class="lineno">10203</span>&#160;</div><div class="line"><a name="l10204"></a><span class="lineno">10204</span>&#160;<span class="comment">// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*:</span></div><div class="line"><a name="l10205"></a><span class="lineno">10205</span>&#160;</div><div class="line"><a name="l10206"></a><span class="lineno">10206</span>&#160;<span class="comment">// Tests that an exit code describes a normal exit with a given exit code.</span></div><div class="line"><a name="l10207"></a><span class="lineno">10207</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> ExitedWithCode {</div><div class="line"><a name="l10208"></a><span class="lineno">10208</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10209"></a><span class="lineno">10209</span>&#160; <span class="keyword">explicit</span> ExitedWithCode(<span class="keywordtype">int</span> exit_code);</div><div class="line"><a name="l10210"></a><span class="lineno">10210</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keywordtype">int</span> exit_status) <span class="keyword">const</span>;</div><div class="line"><a name="l10211"></a><span class="lineno">10211</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10212"></a><span class="lineno">10212</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l10213"></a><span class="lineno">10213</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> ExitedWithCode&amp; other);</div><div class="line"><a name="l10214"></a><span class="lineno">10214</span>&#160;</div><div class="line"><a name="l10215"></a><span class="lineno">10215</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> exit_code_;</div><div class="line"><a name="l10216"></a><span class="lineno">10216</span>&#160;};</div><div class="line"><a name="l10217"></a><span class="lineno">10217</span>&#160;</div><div class="line"><a name="l10218"></a><span class="lineno">10218</span>&#160;<span class="preprocessor"># if !GTEST_OS_WINDOWS &amp;&amp; !GTEST_OS_FUCHSIA</span></div><div class="line"><a name="l10219"></a><span class="lineno">10219</span>&#160;<span class="comment">// Tests that an exit code describes an exit due to termination by a</span></div><div class="line"><a name="l10220"></a><span class="lineno">10220</span>&#160;<span class="comment">// given signal.</span></div><div class="line"><a name="l10221"></a><span class="lineno">10221</span>&#160;<span class="comment">// GOOGLETEST_CM0006 DO NOT DELETE</span></div><div class="line"><a name="l10222"></a><span class="lineno">10222</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> KilledBySignal {</div><div class="line"><a name="l10223"></a><span class="lineno">10223</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10224"></a><span class="lineno">10224</span>&#160; <span class="keyword">explicit</span> KilledBySignal(<span class="keywordtype">int</span> signum);</div><div class="line"><a name="l10225"></a><span class="lineno">10225</span>&#160; <span class="keywordtype">bool</span> operator()(<span class="keywordtype">int</span> exit_status) <span class="keyword">const</span>;</div><div class="line"><a name="l10226"></a><span class="lineno">10226</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10227"></a><span class="lineno">10227</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> signum_;</div><div class="line"><a name="l10228"></a><span class="lineno">10228</span>&#160;};</div><div class="line"><a name="l10229"></a><span class="lineno">10229</span>&#160;<span class="preprocessor"># endif // !GTEST_OS_WINDOWS</span></div><div class="line"><a name="l10230"></a><span class="lineno">10230</span>&#160;</div><div class="line"><a name="l10231"></a><span class="lineno">10231</span>&#160;<span class="comment">// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode.</span></div><div class="line"><a name="l10232"></a><span class="lineno">10232</span>&#160;<span class="comment">// The death testing framework causes this to have interesting semantics,</span></div><div class="line"><a name="l10233"></a><span class="lineno">10233</span>&#160;<span class="comment">// since the sideeffects of the call are only visible in opt mode, and not</span></div><div class="line"><a name="l10234"></a><span class="lineno">10234</span>&#160;<span class="comment">// in debug mode.</span></div><div class="line"><a name="l10235"></a><span class="lineno">10235</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10236"></a><span class="lineno">10236</span>&#160;<span class="comment">// In practice, this can be used to test functions that utilize the</span></div><div class="line"><a name="l10237"></a><span class="lineno">10237</span>&#160;<span class="comment">// LOG(DFATAL) macro using the following style:</span></div><div class="line"><a name="l10238"></a><span class="lineno">10238</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10239"></a><span class="lineno">10239</span>&#160;<span class="comment">// int DieInDebugOr12(int* sideeffect) {</span></div><div class="line"><a name="l10240"></a><span class="lineno">10240</span>&#160;<span class="comment">// if (sideeffect) {</span></div><div class="line"><a name="l10241"></a><span class="lineno">10241</span>&#160;<span class="comment">// *sideeffect = 12;</span></div><div class="line"><a name="l10242"></a><span class="lineno">10242</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l10243"></a><span class="lineno">10243</span>&#160;<span class="comment">// LOG(DFATAL) &lt;&lt; &quot;death&quot;;</span></div><div class="line"><a name="l10244"></a><span class="lineno">10244</span>&#160;<span class="comment">// return 12;</span></div><div class="line"><a name="l10245"></a><span class="lineno">10245</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l10246"></a><span class="lineno">10246</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10247"></a><span class="lineno">10247</span>&#160;<span class="comment">// TEST(TestSuite, TestDieOr12WorksInDgbAndOpt) {</span></div><div class="line"><a name="l10248"></a><span class="lineno">10248</span>&#160;<span class="comment">// int sideeffect = 0;</span></div><div class="line"><a name="l10249"></a><span class="lineno">10249</span>&#160;<span class="comment">// // Only asserts in dbg.</span></div><div class="line"><a name="l10250"></a><span class="lineno">10250</span>&#160;<span class="comment">// EXPECT_DEBUG_DEATH(DieInDebugOr12(&amp;sideeffect), &quot;death&quot;);</span></div><div class="line"><a name="l10251"></a><span class="lineno">10251</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10252"></a><span class="lineno">10252</span>&#160;<span class="comment">// #ifdef NDEBUG</span></div><div class="line"><a name="l10253"></a><span class="lineno">10253</span>&#160;<span class="comment">// // opt-mode has sideeffect visible.</span></div><div class="line"><a name="l10254"></a><span class="lineno">10254</span>&#160;<span class="comment">// EXPECT_EQ(12, sideeffect);</span></div><div class="line"><a name="l10255"></a><span class="lineno">10255</span>&#160;<span class="comment">// #else</span></div><div class="line"><a name="l10256"></a><span class="lineno">10256</span>&#160;<span class="comment">// // dbg-mode no visible sideeffect.</span></div><div class="line"><a name="l10257"></a><span class="lineno">10257</span>&#160;<span class="comment">// EXPECT_EQ(0, sideeffect);</span></div><div class="line"><a name="l10258"></a><span class="lineno">10258</span>&#160;<span class="comment">// #endif</span></div><div class="line"><a name="l10259"></a><span class="lineno">10259</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l10260"></a><span class="lineno">10260</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10261"></a><span class="lineno">10261</span>&#160;<span class="comment">// This will assert that DieInDebugReturn12InOpt() crashes in debug</span></div><div class="line"><a name="l10262"></a><span class="lineno">10262</span>&#160;<span class="comment">// mode, usually due to a DCHECK or LOG(DFATAL), but returns the</span></div><div class="line"><a name="l10263"></a><span class="lineno">10263</span>&#160;<span class="comment">// appropriate fallback value (12 in this case) in opt mode. If you</span></div><div class="line"><a name="l10264"></a><span class="lineno">10264</span>&#160;<span class="comment">// need to test that a function has appropriate side-effects in opt</span></div><div class="line"><a name="l10265"></a><span class="lineno">10265</span>&#160;<span class="comment">// mode, include assertions against the side-effects. A general</span></div><div class="line"><a name="l10266"></a><span class="lineno">10266</span>&#160;<span class="comment">// pattern for this is:</span></div><div class="line"><a name="l10267"></a><span class="lineno">10267</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10268"></a><span class="lineno">10268</span>&#160;<span class="comment">// EXPECT_DEBUG_DEATH({</span></div><div class="line"><a name="l10269"></a><span class="lineno">10269</span>&#160;<span class="comment">// // Side-effects here will have an effect after this statement in</span></div><div class="line"><a name="l10270"></a><span class="lineno">10270</span>&#160;<span class="comment">// // opt mode, but none in debug mode.</span></div><div class="line"><a name="l10271"></a><span class="lineno">10271</span>&#160;<span class="comment">// EXPECT_EQ(12, DieInDebugOr12(&amp;sideeffect));</span></div><div class="line"><a name="l10272"></a><span class="lineno">10272</span>&#160;<span class="comment">// }, &quot;death&quot;);</span></div><div class="line"><a name="l10273"></a><span class="lineno">10273</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10274"></a><span class="lineno">10274</span>&#160;<span class="preprocessor"># ifdef NDEBUG</span></div><div class="line"><a name="l10275"></a><span class="lineno">10275</span>&#160;</div><div class="line"><a name="l10276"></a><span class="lineno">10276</span>&#160;<span class="preprocessor"># define EXPECT_DEBUG_DEATH(statement, regex) \</span></div><div class="line"><a name="l10277"></a><span class="lineno">10277</span>&#160;<span class="preprocessor"> GTEST_EXECUTE_STATEMENT_(statement, regex)</span></div><div class="line"><a name="l10278"></a><span class="lineno">10278</span>&#160;</div><div class="line"><a name="l10279"></a><span class="lineno">10279</span>&#160;<span class="preprocessor"># define ASSERT_DEBUG_DEATH(statement, regex) \</span></div><div class="line"><a name="l10280"></a><span class="lineno">10280</span>&#160;<span class="preprocessor"> GTEST_EXECUTE_STATEMENT_(statement, regex)</span></div><div class="line"><a name="l10281"></a><span class="lineno">10281</span>&#160;</div><div class="line"><a name="l10282"></a><span class="lineno">10282</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l10283"></a><span class="lineno">10283</span>&#160;</div><div class="line"><a name="l10284"></a><span class="lineno">10284</span>&#160;<span class="preprocessor"># define EXPECT_DEBUG_DEATH(statement, regex) \</span></div><div class="line"><a name="l10285"></a><span class="lineno">10285</span>&#160;<span class="preprocessor"> EXPECT_DEATH(statement, regex)</span></div><div class="line"><a name="l10286"></a><span class="lineno">10286</span>&#160;</div><div class="line"><a name="l10287"></a><span class="lineno">10287</span>&#160;<span class="preprocessor"># define ASSERT_DEBUG_DEATH(statement, regex) \</span></div><div class="line"><a name="l10288"></a><span class="lineno">10288</span>&#160;<span class="preprocessor"> ASSERT_DEATH(statement, regex)</span></div><div class="line"><a name="l10289"></a><span class="lineno">10289</span>&#160;</div><div class="line"><a name="l10290"></a><span class="lineno">10290</span>&#160;<span class="preprocessor"># endif // NDEBUG for EXPECT_DEBUG_DEATH</span></div><div class="line"><a name="l10291"></a><span class="lineno">10291</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l10292"></a><span class="lineno">10292</span>&#160;</div><div class="line"><a name="l10293"></a><span class="lineno">10293</span>&#160;<span class="comment">// This macro is used for implementing macros such as</span></div><div class="line"><a name="l10294"></a><span class="lineno">10294</span>&#160;<span class="comment">// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where</span></div><div class="line"><a name="l10295"></a><span class="lineno">10295</span>&#160;<span class="comment">// death tests are not supported. Those macros must compile on such systems</span></div><div class="line"><a name="l10296"></a><span class="lineno">10296</span>&#160;<span class="comment">// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on</span></div><div class="line"><a name="l10297"></a><span class="lineno">10297</span>&#160;<span class="comment">// systems that support death tests. This allows one to write such a macro</span></div><div class="line"><a name="l10298"></a><span class="lineno">10298</span>&#160;<span class="comment">// on a system that does not support death tests and be sure that it will</span></div><div class="line"><a name="l10299"></a><span class="lineno">10299</span>&#160;<span class="comment">// compile on a death-test supporting system. It is exposed publicly so that</span></div><div class="line"><a name="l10300"></a><span class="lineno">10300</span>&#160;<span class="comment">// systems that have death-tests with stricter requirements than</span></div><div class="line"><a name="l10301"></a><span class="lineno">10301</span>&#160;<span class="comment">// GTEST_HAS_DEATH_TEST can write their own equivalent of</span></div><div class="line"><a name="l10302"></a><span class="lineno">10302</span>&#160;<span class="comment">// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED.</span></div><div class="line"><a name="l10303"></a><span class="lineno">10303</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10304"></a><span class="lineno">10304</span>&#160;<span class="comment">// Parameters:</span></div><div class="line"><a name="l10305"></a><span class="lineno">10305</span>&#160;<span class="comment">// statement - A statement that a macro such as EXPECT_DEATH would test</span></div><div class="line"><a name="l10306"></a><span class="lineno">10306</span>&#160;<span class="comment">// for program termination. This macro has to make sure this</span></div><div class="line"><a name="l10307"></a><span class="lineno">10307</span>&#160;<span class="comment">// statement is compiled but not executed, to ensure that</span></div><div class="line"><a name="l10308"></a><span class="lineno">10308</span>&#160;<span class="comment">// EXPECT_DEATH_IF_SUPPORTED compiles with a certain</span></div><div class="line"><a name="l10309"></a><span class="lineno">10309</span>&#160;<span class="comment">// parameter iff EXPECT_DEATH compiles with it.</span></div><div class="line"><a name="l10310"></a><span class="lineno">10310</span>&#160;<span class="comment">// regex - A regex that a macro such as EXPECT_DEATH would use to test</span></div><div class="line"><a name="l10311"></a><span class="lineno">10311</span>&#160;<span class="comment">// the output of statement. This parameter has to be</span></div><div class="line"><a name="l10312"></a><span class="lineno">10312</span>&#160;<span class="comment">// compiled but not evaluated by this macro, to ensure that</span></div><div class="line"><a name="l10313"></a><span class="lineno">10313</span>&#160;<span class="comment">// this macro only accepts expressions that a macro such as</span></div><div class="line"><a name="l10314"></a><span class="lineno">10314</span>&#160;<span class="comment">// EXPECT_DEATH would accept.</span></div><div class="line"><a name="l10315"></a><span class="lineno">10315</span>&#160;<span class="comment">// terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED</span></div><div class="line"><a name="l10316"></a><span class="lineno">10316</span>&#160;<span class="comment">// and a return statement for ASSERT_DEATH_IF_SUPPORTED.</span></div><div class="line"><a name="l10317"></a><span class="lineno">10317</span>&#160;<span class="comment">// This ensures that ASSERT_DEATH_IF_SUPPORTED will not</span></div><div class="line"><a name="l10318"></a><span class="lineno">10318</span>&#160;<span class="comment">// compile inside functions where ASSERT_DEATH doesn&#39;t</span></div><div class="line"><a name="l10319"></a><span class="lineno">10319</span>&#160;<span class="comment">// compile.</span></div><div class="line"><a name="l10320"></a><span class="lineno">10320</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10321"></a><span class="lineno">10321</span>&#160;<span class="comment">// The branch that has an always false condition is used to ensure that</span></div><div class="line"><a name="l10322"></a><span class="lineno">10322</span>&#160;<span class="comment">// statement and regex are compiled (and thus syntactically correct) but</span></div><div class="line"><a name="l10323"></a><span class="lineno">10323</span>&#160;<span class="comment">// never executed. The unreachable code macro protects the terminator</span></div><div class="line"><a name="l10324"></a><span class="lineno">10324</span>&#160;<span class="comment">// statement from generating an &#39;unreachable code&#39; warning in case</span></div><div class="line"><a name="l10325"></a><span class="lineno">10325</span>&#160;<span class="comment">// statement unconditionally returns or throws. The Message constructor at</span></div><div class="line"><a name="l10326"></a><span class="lineno">10326</span>&#160;<span class="comment">// the end allows the syntax of streaming additional messages into the</span></div><div class="line"><a name="l10327"></a><span class="lineno">10327</span>&#160;<span class="comment">// macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.</span></div><div class="line"><a name="l10328"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa5f42ab29859b7f49a901770d2e66855">10328</a></span>&#160;<span class="preprocessor"># define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator) \</span></div><div class="line"><a name="l10329"></a><span class="lineno">10329</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l10330"></a><span class="lineno">10330</span>&#160;<span class="preprocessor"> if (::testing::internal::AlwaysTrue()) { \</span></div><div class="line"><a name="l10331"></a><span class="lineno">10331</span>&#160;<span class="preprocessor"> GTEST_LOG_(WARNING) \</span></div><div class="line"><a name="l10332"></a><span class="lineno">10332</span>&#160;<span class="preprocessor"> &lt;&lt; &quot;Death tests are not supported on this platform.\n&quot; \</span></div><div class="line"><a name="l10333"></a><span class="lineno">10333</span>&#160;<span class="preprocessor"> &lt;&lt; &quot;Statement &#39;&quot; #statement &quot;&#39; cannot be verified.&quot;; \</span></div><div class="line"><a name="l10334"></a><span class="lineno">10334</span>&#160;<span class="preprocessor"> } else if (::testing::internal::AlwaysFalse()) { \</span></div><div class="line"><a name="l10335"></a><span class="lineno">10335</span>&#160;<span class="preprocessor"> ::testing::internal::RE::PartialMatch(&quot;.*&quot;, (regex)); \</span></div><div class="line"><a name="l10336"></a><span class="lineno">10336</span>&#160;<span class="preprocessor"> GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \</span></div><div class="line"><a name="l10337"></a><span class="lineno">10337</span>&#160;<span class="preprocessor"> terminator; \</span></div><div class="line"><a name="l10338"></a><span class="lineno">10338</span>&#160;<span class="preprocessor"> } else \</span></div><div class="line"><a name="l10339"></a><span class="lineno">10339</span>&#160;<span class="preprocessor"> ::testing::Message()</span></div><div class="line"><a name="l10340"></a><span class="lineno">10340</span>&#160;</div><div class="line"><a name="l10341"></a><span class="lineno">10341</span>&#160;<span class="comment">// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and</span></div><div class="line"><a name="l10342"></a><span class="lineno">10342</span>&#160;<span class="comment">// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if</span></div><div class="line"><a name="l10343"></a><span class="lineno">10343</span>&#160;<span class="comment">// death tests are supported; otherwise they just issue a warning. This is</span></div><div class="line"><a name="l10344"></a><span class="lineno">10344</span>&#160;<span class="comment">// useful when you are combining death test assertions with normal test</span></div><div class="line"><a name="l10345"></a><span class="lineno">10345</span>&#160;<span class="comment">// assertions in one test.</span></div><div class="line"><a name="l10346"></a><span class="lineno">10346</span>&#160;<span class="preprocessor">#if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l10347"></a><span class="lineno">10347</span>&#160;<span class="preprocessor"># define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \</span></div><div class="line"><a name="l10348"></a><span class="lineno">10348</span>&#160;<span class="preprocessor"> EXPECT_DEATH(statement, regex)</span></div><div class="line"><a name="l10349"></a><span class="lineno">10349</span>&#160;<span class="preprocessor"># define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \</span></div><div class="line"><a name="l10350"></a><span class="lineno">10350</span>&#160;<span class="preprocessor"> ASSERT_DEATH(statement, regex)</span></div><div class="line"><a name="l10351"></a><span class="lineno">10351</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l10352"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8564de0e012dd0898949c513d1571f8b">10352</a></span>&#160;<span class="preprocessor"># define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \</span></div><div class="line"><a name="l10353"></a><span class="lineno">10353</span>&#160;<span class="preprocessor"> GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, )</span></div><div class="line"><a name="l10354"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab2f0f25b46353767179a49ebd15b7345">10354</a></span>&#160;<span class="preprocessor"># define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \</span></div><div class="line"><a name="l10355"></a><span class="lineno">10355</span>&#160;<span class="preprocessor"> GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return)</span></div><div class="line"><a name="l10356"></a><span class="lineno">10356</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l10357"></a><span class="lineno">10357</span>&#160;</div><div class="line"><a name="l10358"></a><span class="lineno">10358</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l10359"></a><span class="lineno">10359</span>&#160;</div><div class="line"><a name="l10360"></a><span class="lineno">10360</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_</span></div><div class="line"><a name="l10361"></a><span class="lineno">10361</span>&#160;<span class="comment">// This file was GENERATED by command:</span></div><div class="line"><a name="l10362"></a><span class="lineno">10362</span>&#160;<span class="comment">// pump.py gtest-param-test.h.pump</span></div><div class="line"><a name="l10363"></a><span class="lineno">10363</span>&#160;<span class="comment">// DO NOT EDIT BY HAND!!!</span></div><div class="line"><a name="l10364"></a><span class="lineno">10364</span>&#160;</div><div class="line"><a name="l10365"></a><span class="lineno">10365</span>&#160;<span class="comment">// Copyright 2008, Google Inc.</span></div><div class="line"><a name="l10366"></a><span class="lineno">10366</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l10367"></a><span class="lineno">10367</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10368"></a><span class="lineno">10368</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l10369"></a><span class="lineno">10369</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l10370"></a><span class="lineno">10370</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l10371"></a><span class="lineno">10371</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10372"></a><span class="lineno">10372</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l10373"></a><span class="lineno">10373</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l10374"></a><span class="lineno">10374</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l10375"></a><span class="lineno">10375</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l10376"></a><span class="lineno">10376</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l10377"></a><span class="lineno">10377</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l10378"></a><span class="lineno">10378</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l10379"></a><span class="lineno">10379</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l10380"></a><span class="lineno">10380</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l10381"></a><span class="lineno">10381</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10382"></a><span class="lineno">10382</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l10383"></a><span class="lineno">10383</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l10384"></a><span class="lineno">10384</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l10385"></a><span class="lineno">10385</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l10386"></a><span class="lineno">10386</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l10387"></a><span class="lineno">10387</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l10388"></a><span class="lineno">10388</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l10389"></a><span class="lineno">10389</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l10390"></a><span class="lineno">10390</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l10391"></a><span class="lineno">10391</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l10392"></a><span class="lineno">10392</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l10393"></a><span class="lineno">10393</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10394"></a><span class="lineno">10394</span>&#160;<span class="comment">// Macros and functions for implementing parameterized tests</span></div><div class="line"><a name="l10395"></a><span class="lineno">10395</span>&#160;<span class="comment">// in Google C++ Testing and Mocking Framework (Google Test)</span></div><div class="line"><a name="l10396"></a><span class="lineno">10396</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10397"></a><span class="lineno">10397</span>&#160;<span class="comment">// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!</span></div><div class="line"><a name="l10398"></a><span class="lineno">10398</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10399"></a><span class="lineno">10399</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l10400"></a><span class="lineno">10400</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_</span></div><div class="line"><a name="l10401"></a><span class="lineno"><a class="line" href="gtest_8h.html#a15b9e83e56cafef0ddd12e2444772908">10401</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_</span></div><div class="line"><a name="l10402"></a><span class="lineno">10402</span>&#160;</div><div class="line"><a name="l10403"></a><span class="lineno">10403</span>&#160;</div><div class="line"><a name="l10404"></a><span class="lineno">10404</span>&#160;<span class="comment">// Value-parameterized tests allow you to test your code with different</span></div><div class="line"><a name="l10405"></a><span class="lineno">10405</span>&#160;<span class="comment">// parameters without writing multiple copies of the same test.</span></div><div class="line"><a name="l10406"></a><span class="lineno">10406</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10407"></a><span class="lineno">10407</span>&#160;<span class="comment">// Here is how you use value-parameterized tests:</span></div><div class="line"><a name="l10408"></a><span class="lineno">10408</span>&#160;</div><div class="line"><a name="l10409"></a><span class="lineno">10409</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l10410"></a><span class="lineno">10410</span>&#160;</div><div class="line"><a name="l10411"></a><span class="lineno">10411</span>&#160;<span class="comment">// To write value-parameterized tests, first you should define a fixture</span></div><div class="line"><a name="l10412"></a><span class="lineno">10412</span>&#160;<span class="comment">// class. It is usually derived from testing::TestWithParam&lt;T&gt; (see below for</span></div><div class="line"><a name="l10413"></a><span class="lineno">10413</span>&#160;<span class="comment">// another inheritance scheme that&#39;s sometimes useful in more complicated</span></div><div class="line"><a name="l10414"></a><span class="lineno">10414</span>&#160;<span class="comment">// class hierarchies), where the type of your parameter values.</span></div><div class="line"><a name="l10415"></a><span class="lineno">10415</span>&#160;<span class="comment">// TestWithParam&lt;T&gt; is itself derived from testing::Test. T can be any</span></div><div class="line"><a name="l10416"></a><span class="lineno">10416</span>&#160;<span class="comment">// copyable type. If it&#39;s a raw pointer, you are responsible for managing the</span></div><div class="line"><a name="l10417"></a><span class="lineno">10417</span>&#160;<span class="comment">// lifespan of the pointed values.</span></div><div class="line"><a name="l10418"></a><span class="lineno">10418</span>&#160;</div><div class="line"><a name="l10419"></a><span class="lineno">10419</span>&#160;<span class="keyword">class </span>FooTest : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test_with_param.html">::testing::TestWithParam</a>&lt;const char*&gt; {</div><div class="line"><a name="l10420"></a><span class="lineno">10420</span>&#160; <span class="comment">// You can implement all the usual class fixture members here.</span></div><div class="line"><a name="l10421"></a><span class="lineno">10421</span>&#160;};</div><div class="line"><a name="l10422"></a><span class="lineno">10422</span>&#160;</div><div class="line"><a name="l10423"></a><span class="lineno">10423</span>&#160;<span class="comment">// Then, use the TEST_P macro to define as many parameterized tests</span></div><div class="line"><a name="l10424"></a><span class="lineno">10424</span>&#160;<span class="comment">// for this fixture as you want. The _P suffix is for &quot;parameterized&quot;</span></div><div class="line"><a name="l10425"></a><span class="lineno">10425</span>&#160;<span class="comment">// or &quot;pattern&quot;, whichever you prefer to think.</span></div><div class="line"><a name="l10426"></a><span class="lineno">10426</span>&#160;</div><div class="line"><a name="l10427"></a><span class="lineno">10427</span>&#160;<a class="code" href="gtest_8h.html#a1adc861b311e3fbd97bcc72e0b0f5962">TEST_P</a>(FooTest, DoesBlah) {</div><div class="line"><a name="l10428"></a><span class="lineno">10428</span>&#160; <span class="comment">// Inside a test, access the test parameter with the GetParam() method</span></div><div class="line"><a name="l10429"></a><span class="lineno">10429</span>&#160; <span class="comment">// of the TestWithParam&lt;T&gt; class:</span></div><div class="line"><a name="l10430"></a><span class="lineno">10430</span>&#160; <a class="code" href="gtest_8h.html#ac33e7cdfb5d44a7a0f0ab552eb5c3c6a">EXPECT_TRUE</a>(foo.Blah(GetParam()));</div><div class="line"><a name="l10431"></a><span class="lineno">10431</span>&#160; ...</div><div class="line"><a name="l10432"></a><span class="lineno">10432</span>&#160;}</div><div class="line"><a name="l10433"></a><span class="lineno">10433</span>&#160;</div><div class="line"><a name="l10434"></a><span class="lineno">10434</span>&#160;<a class="code" href="gtest_8h.html#a1adc861b311e3fbd97bcc72e0b0f5962">TEST_P</a>(FooTest, HasBlahBlah) {</div><div class="line"><a name="l10435"></a><span class="lineno">10435</span>&#160; ...</div><div class="line"><a name="l10436"></a><span class="lineno">10436</span>&#160;}</div><div class="line"><a name="l10437"></a><span class="lineno">10437</span>&#160;</div><div class="line"><a name="l10438"></a><span class="lineno">10438</span>&#160;<span class="comment">// Finally, you can use INSTANTIATE_TEST_SUITE_P to instantiate the test</span></div><div class="line"><a name="l10439"></a><span class="lineno">10439</span>&#160;<span class="comment">// case with any set of parameters you want. Google Test defines a number</span></div><div class="line"><a name="l10440"></a><span class="lineno">10440</span>&#160;<span class="comment">// of functions for generating test parameters. They return what we call</span></div><div class="line"><a name="l10441"></a><span class="lineno">10441</span>&#160;<span class="comment">// (surprise!) parameter generators. Here is a summary of them, which</span></div><div class="line"><a name="l10442"></a><span class="lineno">10442</span>&#160;<span class="comment">// are all in the testing namespace:</span></div><div class="line"><a name="l10443"></a><span class="lineno">10443</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10444"></a><span class="lineno">10444</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10445"></a><span class="lineno">10445</span>&#160;<span class="comment">// Range(begin, end [, step]) - Yields values {begin, begin+step,</span></div><div class="line"><a name="l10446"></a><span class="lineno">10446</span>&#160;<span class="comment">// begin+step+step, ...}. The values do not</span></div><div class="line"><a name="l10447"></a><span class="lineno">10447</span>&#160;<span class="comment">// include end. step defaults to 1.</span></div><div class="line"><a name="l10448"></a><span class="lineno">10448</span>&#160;<span class="comment">// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}.</span></div><div class="line"><a name="l10449"></a><span class="lineno">10449</span>&#160;<span class="comment">// ValuesIn(container) - Yields values from a C-style array, an STL</span></div><div class="line"><a name="l10450"></a><span class="lineno">10450</span>&#160;<span class="comment">// ValuesIn(begin,end) container, or an iterator range [begin, end).</span></div><div class="line"><a name="l10451"></a><span class="lineno">10451</span>&#160;<span class="comment">// Bool() - Yields sequence {false, true}.</span></div><div class="line"><a name="l10452"></a><span class="lineno">10452</span>&#160;<span class="comment">// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product</span></div><div class="line"><a name="l10453"></a><span class="lineno">10453</span>&#160;<span class="comment">// for the math savvy) of the values generated</span></div><div class="line"><a name="l10454"></a><span class="lineno">10454</span>&#160;<span class="comment">// by the N generators.</span></div><div class="line"><a name="l10455"></a><span class="lineno">10455</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10456"></a><span class="lineno">10456</span>&#160;<span class="comment">// For more details, see comments at the definitions of these functions below</span></div><div class="line"><a name="l10457"></a><span class="lineno">10457</span>&#160;<span class="comment">// in this file.</span></div><div class="line"><a name="l10458"></a><span class="lineno">10458</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10459"></a><span class="lineno">10459</span>&#160;<span class="comment">// The following statement will instantiate tests from the FooTest test suite</span></div><div class="line"><a name="l10460"></a><span class="lineno">10460</span>&#160;<span class="comment">// each with parameter values &quot;meeny&quot;, &quot;miny&quot;, and &quot;moe&quot;.</span></div><div class="line"><a name="l10461"></a><span class="lineno">10461</span>&#160;</div><div class="line"><a name="l10462"></a><span class="lineno">10462</span>&#160;<a class="code" href="gtest_8h.html#a016124361c862c0db315e4c9dc4d911a">INSTANTIATE_TEST_SUITE_P</a>(InstantiationName,</div><div class="line"><a name="l10463"></a><span class="lineno">10463</span>&#160; FooTest,</div><div class="line"><a name="l10464"></a><span class="lineno">10464</span>&#160; <a class="code" href="namespacetesting.html#a374d4e5fbb4c938058fbe81d4c7ff6a6">Values</a>(<span class="stringliteral">&quot;meeny&quot;</span>, <span class="stringliteral">&quot;miny&quot;</span>, <span class="stringliteral">&quot;moe&quot;</span>));</div><div class="line"><a name="l10465"></a><span class="lineno">10465</span>&#160;</div><div class="line"><a name="l10466"></a><span class="lineno">10466</span>&#160;<span class="comment">// To distinguish different instances of the pattern, (yes, you</span></div><div class="line"><a name="l10467"></a><span class="lineno">10467</span>&#160;<span class="comment">// can instantiate it more then once) the first argument to the</span></div><div class="line"><a name="l10468"></a><span class="lineno">10468</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P macro is a prefix that will be added to the</span></div><div class="line"><a name="l10469"></a><span class="lineno">10469</span>&#160;<span class="comment">// actual test suite name. Remember to pick unique prefixes for different</span></div><div class="line"><a name="l10470"></a><span class="lineno">10470</span>&#160;<span class="comment">// instantiations. The tests from the instantiation above will have</span></div><div class="line"><a name="l10471"></a><span class="lineno">10471</span>&#160;<span class="comment">// these names:</span></div><div class="line"><a name="l10472"></a><span class="lineno">10472</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10473"></a><span class="lineno">10473</span>&#160;<span class="comment">// * InstantiationName/FooTest.DoesBlah/0 for &quot;meeny&quot;</span></div><div class="line"><a name="l10474"></a><span class="lineno">10474</span>&#160;<span class="comment">// * InstantiationName/FooTest.DoesBlah/1 for &quot;miny&quot;</span></div><div class="line"><a name="l10475"></a><span class="lineno">10475</span>&#160;<span class="comment">// * InstantiationName/FooTest.DoesBlah/2 for &quot;moe&quot;</span></div><div class="line"><a name="l10476"></a><span class="lineno">10476</span>&#160;<span class="comment">// * InstantiationName/FooTest.HasBlahBlah/0 for &quot;meeny&quot;</span></div><div class="line"><a name="l10477"></a><span class="lineno">10477</span>&#160;<span class="comment">// * InstantiationName/FooTest.HasBlahBlah/1 for &quot;miny&quot;</span></div><div class="line"><a name="l10478"></a><span class="lineno">10478</span>&#160;<span class="comment">// * InstantiationName/FooTest.HasBlahBlah/2 for &quot;moe&quot;</span></div><div class="line"><a name="l10479"></a><span class="lineno">10479</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10480"></a><span class="lineno">10480</span>&#160;<span class="comment">// You can use these names in --gtest_filter.</span></div><div class="line"><a name="l10481"></a><span class="lineno">10481</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10482"></a><span class="lineno">10482</span>&#160;<span class="comment">// This statement will instantiate all tests from FooTest again, each</span></div><div class="line"><a name="l10483"></a><span class="lineno">10483</span>&#160;<span class="comment">// with parameter values &quot;cat&quot; and &quot;dog&quot;:</span></div><div class="line"><a name="l10484"></a><span class="lineno">10484</span>&#160;</div><div class="line"><a name="l10485"></a><span class="lineno">10485</span>&#160;<span class="keyword">const</span> <span class="keywordtype">char</span>* pets[] = {<span class="stringliteral">&quot;cat&quot;</span>, <span class="stringliteral">&quot;dog&quot;</span>};</div><div class="line"><a name="l10486"></a><span class="lineno">10486</span>&#160;<a class="code" href="gtest_8h.html#a016124361c862c0db315e4c9dc4d911a">INSTANTIATE_TEST_SUITE_P</a>(AnotherInstantiationName, FooTest, <a class="code" href="namespacetesting.html#a0b9ea6594ac06ad5d9eba2511ffa0fb7">ValuesIn</a>(pets));</div><div class="line"><a name="l10487"></a><span class="lineno">10487</span>&#160;</div><div class="line"><a name="l10488"></a><span class="lineno">10488</span>&#160;<span class="comment">// The tests from the instantiation above will have these names:</span></div><div class="line"><a name="l10489"></a><span class="lineno">10489</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10490"></a><span class="lineno">10490</span>&#160;<span class="comment">// * AnotherInstantiationName/FooTest.DoesBlah/0 for &quot;cat&quot;</span></div><div class="line"><a name="l10491"></a><span class="lineno">10491</span>&#160;<span class="comment">// * AnotherInstantiationName/FooTest.DoesBlah/1 for &quot;dog&quot;</span></div><div class="line"><a name="l10492"></a><span class="lineno">10492</span>&#160;<span class="comment">// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for &quot;cat&quot;</span></div><div class="line"><a name="l10493"></a><span class="lineno">10493</span>&#160;<span class="comment">// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for &quot;dog&quot;</span></div><div class="line"><a name="l10494"></a><span class="lineno">10494</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10495"></a><span class="lineno">10495</span>&#160;<span class="comment">// Please note that INSTANTIATE_TEST_SUITE_P will instantiate all tests</span></div><div class="line"><a name="l10496"></a><span class="lineno">10496</span>&#160;<span class="comment">// in the given test suite, whether their definitions come before or</span></div><div class="line"><a name="l10497"></a><span class="lineno">10497</span>&#160;<span class="comment">// AFTER the INSTANTIATE_TEST_SUITE_P statement.</span></div><div class="line"><a name="l10498"></a><span class="lineno">10498</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10499"></a><span class="lineno">10499</span>&#160;<span class="comment">// Please also note that generator expressions (including parameters to the</span></div><div class="line"><a name="l10500"></a><span class="lineno">10500</span>&#160;<span class="comment">// generators) are evaluated in InitGoogleTest(), after main() has started.</span></div><div class="line"><a name="l10501"></a><span class="lineno">10501</span>&#160;<span class="comment">// This allows the user on one hand, to adjust generator parameters in order</span></div><div class="line"><a name="l10502"></a><span class="lineno">10502</span>&#160;<span class="comment">// to dynamically determine a set of tests to run and on the other hand,</span></div><div class="line"><a name="l10503"></a><span class="lineno">10503</span>&#160;<span class="comment">// give the user a chance to inspect the generated tests with Google Test</span></div><div class="line"><a name="l10504"></a><span class="lineno">10504</span>&#160;<span class="comment">// reflection API before RUN_ALL_TESTS() is executed.</span></div><div class="line"><a name="l10505"></a><span class="lineno">10505</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10506"></a><span class="lineno">10506</span>&#160;<span class="comment">// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc</span></div><div class="line"><a name="l10507"></a><span class="lineno">10507</span>&#160;<span class="comment">// for more examples.</span></div><div class="line"><a name="l10508"></a><span class="lineno">10508</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10509"></a><span class="lineno">10509</span>&#160;<span class="comment">// In the future, we plan to publish the API for defining new parameter</span></div><div class="line"><a name="l10510"></a><span class="lineno">10510</span>&#160;<span class="comment">// generators. But for now this interface remains part of the internal</span></div><div class="line"><a name="l10511"></a><span class="lineno">10511</span>&#160;<span class="comment">// implementation and is subject to change.</span></div><div class="line"><a name="l10512"></a><span class="lineno">10512</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10513"></a><span class="lineno">10513</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10514"></a><span class="lineno">10514</span>&#160;<span class="comment">// A parameterized test fixture must be derived from testing::Test and from</span></div><div class="line"><a name="l10515"></a><span class="lineno">10515</span>&#160;<span class="comment">// testing::WithParamInterface&lt;T&gt;, where T is the type of the parameter</span></div><div class="line"><a name="l10516"></a><span class="lineno">10516</span>&#160;<span class="comment">// values. Inheriting from TestWithParam&lt;T&gt; satisfies that requirement because</span></div><div class="line"><a name="l10517"></a><span class="lineno">10517</span>&#160;<span class="comment">// TestWithParam&lt;T&gt; inherits from both Test and WithParamInterface. In more</span></div><div class="line"><a name="l10518"></a><span class="lineno">10518</span>&#160;<span class="comment">// complicated hierarchies, however, it is occasionally useful to inherit</span></div><div class="line"><a name="l10519"></a><span class="lineno">10519</span>&#160;<span class="comment">// separately from Test and WithParamInterface. For example:</span></div><div class="line"><a name="l10520"></a><span class="lineno">10520</span>&#160;</div><div class="line"><a name="l10521"></a><span class="lineno">10521</span>&#160;<span class="keyword">class </span>BaseTest : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test.html">::testing::Test</a> {</div><div class="line"><a name="l10522"></a><span class="lineno">10522</span>&#160; <span class="comment">// You can inherit all the usual members for a non-parameterized test</span></div><div class="line"><a name="l10523"></a><span class="lineno">10523</span>&#160; <span class="comment">// fixture here.</span></div><div class="line"><a name="l10524"></a><span class="lineno">10524</span>&#160;};</div><div class="line"><a name="l10525"></a><span class="lineno">10525</span>&#160;</div><div class="line"><a name="l10526"></a><span class="lineno">10526</span>&#160;<span class="keyword">class </span>DerivedTest : <span class="keyword">public</span> BaseTest, <span class="keyword">public</span> <a class="code" href="classtesting_1_1_with_param_interface.html">::testing::WithParamInterface</a>&lt;int&gt; {</div><div class="line"><a name="l10527"></a><span class="lineno">10527</span>&#160; <span class="comment">// The usual test fixture members go here too.</span></div><div class="line"><a name="l10528"></a><span class="lineno">10528</span>&#160;};</div><div class="line"><a name="l10529"></a><span class="lineno">10529</span>&#160;</div><div class="line"><a name="l10530"></a><span class="lineno">10530</span>&#160;<a class="code" href="gtest_8h.html#a0ee66d464d1a06c20c1929cae09d8758">TEST_F</a>(BaseTest, HasFoo) {</div><div class="line"><a name="l10531"></a><span class="lineno">10531</span>&#160; <span class="comment">// This is an ordinary non-parameterized test.</span></div><div class="line"><a name="l10532"></a><span class="lineno">10532</span>&#160;}</div><div class="line"><a name="l10533"></a><span class="lineno">10533</span>&#160;</div><div class="line"><a name="l10534"></a><span class="lineno">10534</span>&#160;<a class="code" href="gtest_8h.html#a1adc861b311e3fbd97bcc72e0b0f5962">TEST_P</a>(DerivedTest, DoesBlah) {</div><div class="line"><a name="l10535"></a><span class="lineno">10535</span>&#160; <span class="comment">// GetParam works just the same here as if you inherit from TestWithParam.</span></div><div class="line"><a name="l10536"></a><span class="lineno">10536</span>&#160; <a class="code" href="gtest_8h.html#ac33e7cdfb5d44a7a0f0ab552eb5c3c6a">EXPECT_TRUE</a>(foo.Blah(GetParam()));</div><div class="line"><a name="l10537"></a><span class="lineno">10537</span>&#160;}</div><div class="line"><a name="l10538"></a><span class="lineno">10538</span>&#160;</div><div class="line"><a name="l10539"></a><span class="lineno">10539</span>&#160;<span class="preprocessor">#endif // 0</span></div><div class="line"><a name="l10540"></a><span class="lineno">10540</span>&#160;</div><div class="line"><a name="l10541"></a><span class="lineno">10541</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l10542"></a><span class="lineno">10542</span>&#160;</div><div class="line"><a name="l10543"></a><span class="lineno">10543</span>&#160;<span class="comment">// Copyright 2008 Google Inc.</span></div><div class="line"><a name="l10544"></a><span class="lineno">10544</span>&#160;<span class="comment">// All Rights Reserved.</span></div><div class="line"><a name="l10545"></a><span class="lineno">10545</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10546"></a><span class="lineno">10546</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l10547"></a><span class="lineno">10547</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l10548"></a><span class="lineno">10548</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l10549"></a><span class="lineno">10549</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10550"></a><span class="lineno">10550</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l10551"></a><span class="lineno">10551</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l10552"></a><span class="lineno">10552</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l10553"></a><span class="lineno">10553</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l10554"></a><span class="lineno">10554</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l10555"></a><span class="lineno">10555</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l10556"></a><span class="lineno">10556</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l10557"></a><span class="lineno">10557</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l10558"></a><span class="lineno">10558</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l10559"></a><span class="lineno">10559</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10560"></a><span class="lineno">10560</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l10561"></a><span class="lineno">10561</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l10562"></a><span class="lineno">10562</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l10563"></a><span class="lineno">10563</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l10564"></a><span class="lineno">10564</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l10565"></a><span class="lineno">10565</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l10566"></a><span class="lineno">10566</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l10567"></a><span class="lineno">10567</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l10568"></a><span class="lineno">10568</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l10569"></a><span class="lineno">10569</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l10570"></a><span class="lineno">10570</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l10571"></a><span class="lineno">10571</span>&#160;</div><div class="line"><a name="l10572"></a><span class="lineno">10572</span>&#160;</div><div class="line"><a name="l10573"></a><span class="lineno">10573</span>&#160;<span class="comment">// Type and function utilities for implementing parameterized tests.</span></div><div class="line"><a name="l10574"></a><span class="lineno">10574</span>&#160;</div><div class="line"><a name="l10575"></a><span class="lineno">10575</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l10576"></a><span class="lineno">10576</span>&#160;</div><div class="line"><a name="l10577"></a><span class="lineno">10577</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_</span></div><div class="line"><a name="l10578"></a><span class="lineno"><a class="line" href="gtest_8h.html#a83cf5c299fc04d9f8e555cb42a97aa47">10578</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_</span></div><div class="line"><a name="l10579"></a><span class="lineno">10579</span>&#160;</div><div class="line"><a name="l10580"></a><span class="lineno">10580</span>&#160;<span class="preprocessor">#include &lt;ctype.h&gt;</span></div><div class="line"><a name="l10581"></a><span class="lineno">10581</span>&#160;</div><div class="line"><a name="l10582"></a><span class="lineno">10582</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div><div class="line"><a name="l10583"></a><span class="lineno">10583</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l10584"></a><span class="lineno">10584</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l10585"></a><span class="lineno">10585</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div><div class="line"><a name="l10586"></a><span class="lineno">10586</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l10587"></a><span class="lineno">10587</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l10588"></a><span class="lineno">10588</span>&#160;</div><div class="line"><a name="l10589"></a><span class="lineno">10589</span>&#160;</div><div class="line"><a name="l10590"></a><span class="lineno">10590</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l10591"></a><span class="lineno">10591</span>&#160;<span class="comment">// Input to a parameterized test name generator, describing a test parameter.</span></div><div class="line"><a name="l10592"></a><span class="lineno">10592</span>&#160;<span class="comment">// Consists of the parameter value and the integer parameter index.</span></div><div class="line"><a name="l10593"></a><span class="lineno">10593</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10594"></a><span class="lineno"><a class="line" href="structtesting_1_1_test_param_info.html">10594</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1_test_param_info.html">TestParamInfo</a> {</div><div class="line"><a name="l10595"></a><span class="lineno"><a class="line" href="structtesting_1_1_test_param_info.html#aa54199319bcad5a33c8538ecaecb6de5">10595</a></span>&#160; <a class="code" href="structtesting_1_1_test_param_info.html#aa54199319bcad5a33c8538ecaecb6de5">TestParamInfo</a>(<span class="keyword">const</span> ParamType&amp; a_param, <span class="keywordtype">size_t</span> an_index) :</div><div class="line"><a name="l10596"></a><span class="lineno">10596</span>&#160; <a class="code" href="structtesting_1_1_test_param_info.html#a146d921039f9da8b1336f7cc6e8436c2">param</a>(a_param),</div><div class="line"><a name="l10597"></a><span class="lineno">10597</span>&#160; <a class="code" href="structtesting_1_1_test_param_info.html#ad4d7bc02cbcc571eb3c1d2ec3ba5bb53">index</a>(an_index) {}</div><div class="line"><a name="l10598"></a><span class="lineno"><a class="line" href="structtesting_1_1_test_param_info.html#a146d921039f9da8b1336f7cc6e8436c2">10598</a></span>&#160; ParamType <a class="code" href="structtesting_1_1_test_param_info.html#a146d921039f9da8b1336f7cc6e8436c2">param</a>;</div><div class="line"><a name="l10599"></a><span class="lineno"><a class="line" href="structtesting_1_1_test_param_info.html#ad4d7bc02cbcc571eb3c1d2ec3ba5bb53">10599</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structtesting_1_1_test_param_info.html#ad4d7bc02cbcc571eb3c1d2ec3ba5bb53">index</a>;</div><div class="line"><a name="l10600"></a><span class="lineno">10600</span>&#160;};</div><div class="line"><a name="l10601"></a><span class="lineno">10601</span>&#160;</div><div class="line"><a name="l10602"></a><span class="lineno">10602</span>&#160;<span class="comment">// A builtin parameterized test name generator which returns the result of</span></div><div class="line"><a name="l10603"></a><span class="lineno">10603</span>&#160;<span class="comment">// testing::PrintToString.</span></div><div class="line"><a name="l10604"></a><span class="lineno"><a class="line" href="structtesting_1_1_print_to_string_param_name.html">10604</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1_print_to_string_param_name.html">PrintToStringParamName</a> {</div><div class="line"><a name="l10605"></a><span class="lineno">10605</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10606"></a><span class="lineno"><a class="line" href="structtesting_1_1_print_to_string_param_name.html#a05b411cfb75dadb2c3c0355aee1dcf21">10606</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="structtesting_1_1_print_to_string_param_name.html#a05b411cfb75dadb2c3c0355aee1dcf21">operator()</a>(<span class="keyword">const</span> <a class="code" href="structtesting_1_1_test_param_info.html">TestParamInfo&lt;ParamType&gt;</a>&amp; info)<span class="keyword"> const </span>{</div><div class="line"><a name="l10607"></a><span class="lineno">10607</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">PrintToString</a>(info.<a class="code" href="structtesting_1_1_test_param_info.html#a146d921039f9da8b1336f7cc6e8436c2">param</a>);</div><div class="line"><a name="l10608"></a><span class="lineno">10608</span>&#160; }</div><div class="line"><a name="l10609"></a><span class="lineno">10609</span>&#160;};</div><div class="line"><a name="l10610"></a><span class="lineno">10610</span>&#160;</div><div class="line"><a name="l10611"></a><span class="lineno">10611</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l10612"></a><span class="lineno">10612</span>&#160;</div><div class="line"><a name="l10613"></a><span class="lineno">10613</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10614"></a><span class="lineno">10614</span>&#160;<span class="comment">// Utility Functions</span></div><div class="line"><a name="l10615"></a><span class="lineno">10615</span>&#160;</div><div class="line"><a name="l10616"></a><span class="lineno">10616</span>&#160;<span class="comment">// Outputs a message explaining invalid registration of different</span></div><div class="line"><a name="l10617"></a><span class="lineno">10617</span>&#160;<span class="comment">// fixture class for the same test suite. This may happen when</span></div><div class="line"><a name="l10618"></a><span class="lineno">10618</span>&#160;<span class="comment">// TEST_P macro is used to define two tests with the same name</span></div><div class="line"><a name="l10619"></a><span class="lineno">10619</span>&#160;<span class="comment">// but in different namespaces.</span></div><div class="line"><a name="l10620"></a><span class="lineno">10620</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting_1_1internal.html#a5d3e97443d23bf1824f87feb172efd39">ReportInvalidTestSuiteType</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name,</div><div class="line"><a name="l10621"></a><span class="lineno">10621</span>&#160; CodeLocation code_location);</div><div class="line"><a name="l10622"></a><span class="lineno">10622</span>&#160;</div><div class="line"><a name="l10623"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator_interface.html">10623</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>;</div><div class="line"><a name="l10624"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html">10624</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>;</div><div class="line"><a name="l10625"></a><span class="lineno">10625</span>&#160;</div><div class="line"><a name="l10626"></a><span class="lineno">10626</span>&#160;<span class="comment">// Interface for iterating over elements provided by an implementation</span></div><div class="line"><a name="l10627"></a><span class="lineno">10627</span>&#160;<span class="comment">// of ParamGeneratorInterface&lt;T&gt;.</span></div><div class="line"><a name="l10628"></a><span class="lineno">10628</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l10629"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator_interface.html">10629</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a> {</div><div class="line"><a name="l10630"></a><span class="lineno">10630</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10631"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator_interface.html#adf6ba49e6b54a6e3b15dbd5733988bef">10631</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#adf6ba49e6b54a6e3b15dbd5733988bef">~ParamIteratorInterface</a>() {}</div><div class="line"><a name="l10632"></a><span class="lineno">10632</span>&#160; <span class="comment">// A pointer to the base generator instance.</span></div><div class="line"><a name="l10633"></a><span class="lineno">10633</span>&#160; <span class="comment">// Used only for the purposes of iterator comparison</span></div><div class="line"><a name="l10634"></a><span class="lineno">10634</span>&#160; <span class="comment">// to make sure that two iterators belong to the same generator.</span></div><div class="line"><a name="l10635"></a><span class="lineno">10635</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a17500953df75ecda1ace46c08ff731e9">BaseGenerator</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10636"></a><span class="lineno">10636</span>&#160; <span class="comment">// Advances iterator to point to the next element</span></div><div class="line"><a name="l10637"></a><span class="lineno">10637</span>&#160; <span class="comment">// provided by the generator. The caller is responsible</span></div><div class="line"><a name="l10638"></a><span class="lineno">10638</span>&#160; <span class="comment">// for not calling Advance() on an iterator equal to</span></div><div class="line"><a name="l10639"></a><span class="lineno">10639</span>&#160; <span class="comment">// BaseGenerator()-&gt;End().</span></div><div class="line"><a name="l10640"></a><span class="lineno">10640</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a600dbd35fcb551463e379516a1abea48">Advance</a>() = 0;</div><div class="line"><a name="l10641"></a><span class="lineno">10641</span>&#160; <span class="comment">// Clones the iterator object. Used for implementing copy semantics</span></div><div class="line"><a name="l10642"></a><span class="lineno">10642</span>&#160; <span class="comment">// of ParamIterator&lt;T&gt;.</span></div><div class="line"><a name="l10643"></a><span class="lineno">10643</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>* <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a4998c23e27e2943d97546011aa35db80">Clone</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10644"></a><span class="lineno">10644</span>&#160; <span class="comment">// Dereferences the current iterator and provides (read-only) access</span></div><div class="line"><a name="l10645"></a><span class="lineno">10645</span>&#160; <span class="comment">// to the pointed value. It is the caller&#39;s responsibility not to call</span></div><div class="line"><a name="l10646"></a><span class="lineno">10646</span>&#160; <span class="comment">// Current() on an iterator equal to BaseGenerator()-&gt;End().</span></div><div class="line"><a name="l10647"></a><span class="lineno">10647</span>&#160; <span class="comment">// Used for implementing ParamGenerator&lt;T&gt;::operator*().</span></div><div class="line"><a name="l10648"></a><span class="lineno">10648</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> T* <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#adfff808576d929085679c315b255af7e">Current</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10649"></a><span class="lineno">10649</span>&#160; <span class="comment">// Determines whether the given iterator and other point to the same</span></div><div class="line"><a name="l10650"></a><span class="lineno">10650</span>&#160; <span class="comment">// element in the sequence generated by the generator.</span></div><div class="line"><a name="l10651"></a><span class="lineno">10651</span>&#160; <span class="comment">// Used for implementing ParamGenerator&lt;T&gt;::operator==().</span></div><div class="line"><a name="l10652"></a><span class="lineno">10652</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&amp; other) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10653"></a><span class="lineno">10653</span>&#160;};</div><div class="line"><a name="l10654"></a><span class="lineno">10654</span>&#160;</div><div class="line"><a name="l10655"></a><span class="lineno">10655</span>&#160;<span class="comment">// Class iterating over elements provided by an implementation of</span></div><div class="line"><a name="l10656"></a><span class="lineno">10656</span>&#160;<span class="comment">// ParamGeneratorInterface&lt;T&gt;. It wraps ParamIteratorInterface&lt;T&gt;</span></div><div class="line"><a name="l10657"></a><span class="lineno">10657</span>&#160;<span class="comment">// and implements the const forward iterator concept.</span></div><div class="line"><a name="l10658"></a><span class="lineno">10658</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l10659"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html">10659</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a> {</div><div class="line"><a name="l10660"></a><span class="lineno">10660</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10661"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#a4afe3a68db0d0744753c8afe262e35df">10661</a></span>&#160; <span class="keyword">typedef</span> T <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#a4afe3a68db0d0744753c8afe262e35df">value_type</a>;</div><div class="line"><a name="l10662"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#ac96f133ffa06fc0f9faff5a1c7954382">10662</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#ac96f133ffa06fc0f9faff5a1c7954382">reference</a>;</div><div class="line"><a name="l10663"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#a6c37240a04ba3fc4c56f6c413cf4771d">10663</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceutl.html#a1b83655ba00b548af9b51f169c6c567a">ptrdiff_t</a> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#a6c37240a04ba3fc4c56f6c413cf4771d">difference_type</a>;</div><div class="line"><a name="l10664"></a><span class="lineno">10664</span>&#160;</div><div class="line"><a name="l10665"></a><span class="lineno">10665</span>&#160; <span class="comment">// ParamIterator assumes ownership of the impl_ pointer.</span></div><div class="line"><a name="l10666"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#aa10585055ee055e304703a3004f24f33">10666</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#aa10585055ee055e304703a3004f24f33">ParamIterator</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; other) : impl_(other.impl_-&gt;Clone()) {}</div><div class="line"><a name="l10667"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#a8019f54ea1c66ca39ffdec47acfabfe6">10667</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#a8019f54ea1c66ca39ffdec47acfabfe6">operator=</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; other) {</div><div class="line"><a name="l10668"></a><span class="lineno">10668</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other)</div><div class="line"><a name="l10669"></a><span class="lineno">10669</span>&#160; impl_.reset(other.impl_-&gt;Clone());</div><div class="line"><a name="l10670"></a><span class="lineno">10670</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l10671"></a><span class="lineno">10671</span>&#160; }</div><div class="line"><a name="l10672"></a><span class="lineno">10672</span>&#160;</div><div class="line"><a name="l10673"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#a52e5fdca7d497a0ed358051e36b8b491">10673</a></span>&#160; <span class="keyword">const</span> T&amp; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#a52e5fdca7d497a0ed358051e36b8b491">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *impl_-&gt;Current(); }</div><div class="line"><a name="l10674"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#aad035d35e8f0c1412854959a94d4887e">10674</a></span>&#160; <span class="keyword">const</span> T* <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#aad035d35e8f0c1412854959a94d4887e">operator-&gt;</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> impl_-&gt;Current(); }</div><div class="line"><a name="l10675"></a><span class="lineno">10675</span>&#160; <span class="comment">// Prefix version of operator++.</span></div><div class="line"><a name="l10676"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#ab0922f2f554fb3beaf13c442da605e8d">10676</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#ab0922f2f554fb3beaf13c442da605e8d">operator++</a>() {</div><div class="line"><a name="l10677"></a><span class="lineno">10677</span>&#160; impl_-&gt;Advance();</div><div class="line"><a name="l10678"></a><span class="lineno">10678</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l10679"></a><span class="lineno">10679</span>&#160; }</div><div class="line"><a name="l10680"></a><span class="lineno">10680</span>&#160; <span class="comment">// Postfix version of operator++.</span></div><div class="line"><a name="l10681"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#af51e17827dd54977165937550c0fb030">10681</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#af51e17827dd54977165937550c0fb030">operator++</a>(<span class="keywordtype">int</span> <span class="comment">/*unused*/</span>) {</div><div class="line"><a name="l10682"></a><span class="lineno">10682</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* clone = impl_-&gt;Clone();</div><div class="line"><a name="l10683"></a><span class="lineno">10683</span>&#160; impl_-&gt;Advance();</div><div class="line"><a name="l10684"></a><span class="lineno">10684</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#aa10585055ee055e304703a3004f24f33">ParamIterator</a>(clone);</div><div class="line"><a name="l10685"></a><span class="lineno">10685</span>&#160; }</div><div class="line"><a name="l10686"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#adc356b4789eb0c2a1b5b033c7874e5a6">10686</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#adc356b4789eb0c2a1b5b033c7874e5a6">operator==</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; other)<span class="keyword"> const </span>{</div><div class="line"><a name="l10687"></a><span class="lineno">10687</span>&#160; <span class="keywordflow">return</span> impl_.get() == other.impl_.get() || impl_-&gt;Equals(*other.impl_);</div><div class="line"><a name="l10688"></a><span class="lineno">10688</span>&#160; }</div><div class="line"><a name="l10689"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#a7a6aee04e8e44b5c8294929951cfac2b">10689</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#a7a6aee04e8e44b5c8294929951cfac2b">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator</a>&amp; other)<span class="keyword"> const </span>{</div><div class="line"><a name="l10690"></a><span class="lineno">10690</span>&#160; <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == other);</div><div class="line"><a name="l10691"></a><span class="lineno">10691</span>&#160; }</div><div class="line"><a name="l10692"></a><span class="lineno">10692</span>&#160;</div><div class="line"><a name="l10693"></a><span class="lineno">10693</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10694"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_iterator.html#ab73a355ae191f2f7eab54b65ca557714">10694</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&lt;T&gt;;</div><div class="line"><a name="l10695"></a><span class="lineno">10695</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html#aa10585055ee055e304703a3004f24f33">ParamIterator</a>(<a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* impl) : impl_(impl) {}</div><div class="line"><a name="l10696"></a><span class="lineno">10696</span>&#160; std::unique_ptr&lt;ParamIteratorInterface&lt;T&gt; &gt; impl_;</div><div class="line"><a name="l10697"></a><span class="lineno">10697</span>&#160;};</div><div class="line"><a name="l10698"></a><span class="lineno">10698</span>&#160;</div><div class="line"><a name="l10699"></a><span class="lineno">10699</span>&#160;<span class="comment">// ParamGeneratorInterface&lt;T&gt; is the binary interface to access generators</span></div><div class="line"><a name="l10700"></a><span class="lineno">10700</span>&#160;<span class="comment">// defined in other translation units.</span></div><div class="line"><a name="l10701"></a><span class="lineno">10701</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l10702"></a><span class="lineno">10702</span>&#160;<span class="keyword">class </span>ParamGeneratorInterface {</div><div class="line"><a name="l10703"></a><span class="lineno">10703</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10704"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator_interface.html#ab33d2ea424c50beaf503cb125b3cd003">10704</a></span>&#160; <span class="keyword">typedef</span> T <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html#ab33d2ea424c50beaf503cb125b3cd003">ParamType</a>;</div><div class="line"><a name="l10705"></a><span class="lineno">10705</span>&#160;</div><div class="line"><a name="l10706"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator_interface.html#ac2767cb9ad2e292e291c4903323c6eff">10706</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html#ac2767cb9ad2e292e291c4903323c6eff">~ParamGeneratorInterface</a>() {}</div><div class="line"><a name="l10707"></a><span class="lineno">10707</span>&#160;</div><div class="line"><a name="l10708"></a><span class="lineno">10708</span>&#160; <span class="comment">// Generator interface definition</span></div><div class="line"><a name="l10709"></a><span class="lineno">10709</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html#ae1de83b16fe9a53c67778a026c6a9569">Begin</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10710"></a><span class="lineno">10710</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html#afa7211b74990e11d3fc7ad4e7113da4f">End</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l10711"></a><span class="lineno">10711</span>&#160;};</div><div class="line"><a name="l10712"></a><span class="lineno">10712</span>&#160;</div><div class="line"><a name="l10713"></a><span class="lineno">10713</span>&#160;<span class="comment">// Wraps ParamGeneratorInterface&lt;T&gt; and provides general generator syntax</span></div><div class="line"><a name="l10714"></a><span class="lineno">10714</span>&#160;<span class="comment">// compatible with the STL Container concept.</span></div><div class="line"><a name="l10715"></a><span class="lineno">10715</span>&#160;<span class="comment">// This class implements copy initialization semantics and the contained</span></div><div class="line"><a name="l10716"></a><span class="lineno">10716</span>&#160;<span class="comment">// ParamGeneratorInterface&lt;T&gt; instance is shared among all copies</span></div><div class="line"><a name="l10717"></a><span class="lineno">10717</span>&#160;<span class="comment">// of the original object. This is possible because that instance is immutable.</span></div><div class="line"><a name="l10718"></a><span class="lineno">10718</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l10719"></a><span class="lineno">10719</span>&#160;<span class="keyword">class </span>ParamGenerator {</div><div class="line"><a name="l10720"></a><span class="lineno">10720</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10721"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">10721</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamIterator&lt;T&gt;</a> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">iterator</a>;</div><div class="line"><a name="l10722"></a><span class="lineno">10722</span>&#160;</div><div class="line"><a name="l10723"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#a6b017d4d030927714d495ee95ae92fbc">10723</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a6b017d4d030927714d495ee95ae92fbc">ParamGenerator</a>(<a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;T&gt;</a>* impl) : impl_(impl) {}</div><div class="line"><a name="l10724"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#a5891d25c31919b3099489f8bbcd58b5e">10724</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a5891d25c31919b3099489f8bbcd58b5e">ParamGenerator</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&amp; other) : impl_(other.impl_) {}</div><div class="line"><a name="l10725"></a><span class="lineno">10725</span>&#160;</div><div class="line"><a name="l10726"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#a590a03c6e0a3a3ac6279943ad1f01dc8">10726</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&amp; <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a590a03c6e0a3a3ac6279943ad1f01dc8">operator=</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&amp; other) {</div><div class="line"><a name="l10727"></a><span class="lineno">10727</span>&#160; impl_ = other.impl_;</div><div class="line"><a name="l10728"></a><span class="lineno">10728</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l10729"></a><span class="lineno">10729</span>&#160; }</div><div class="line"><a name="l10730"></a><span class="lineno">10730</span>&#160;</div><div class="line"><a name="l10731"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">10731</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">iterator</a> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">iterator</a>(impl_-&gt;Begin()); }</div><div class="line"><a name="l10732"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">10732</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">iterator</a> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">iterator</a>(impl_-&gt;End()); }</div><div class="line"><a name="l10733"></a><span class="lineno">10733</span>&#160;</div><div class="line"><a name="l10734"></a><span class="lineno">10734</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10735"></a><span class="lineno">10735</span>&#160; std::shared_ptr&lt;const ParamGeneratorInterface&lt;T&gt; &gt; impl_;</div><div class="line"><a name="l10736"></a><span class="lineno">10736</span>&#160;};</div><div class="line"><a name="l10737"></a><span class="lineno">10737</span>&#160;</div><div class="line"><a name="l10738"></a><span class="lineno">10738</span>&#160;<span class="comment">// Generates values from a range of two comparable values. Can be used to</span></div><div class="line"><a name="l10739"></a><span class="lineno">10739</span>&#160;<span class="comment">// generate sequences of user-defined types that implement operator+() and</span></div><div class="line"><a name="l10740"></a><span class="lineno">10740</span>&#160;<span class="comment">// operator&lt;().</span></div><div class="line"><a name="l10741"></a><span class="lineno">10741</span>&#160;<span class="comment">// This class is used in the Range() function.</span></div><div class="line"><a name="l10742"></a><span class="lineno">10742</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> IncrementT&gt;</div><div class="line"><a name="l10743"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_range_generator.html">10743</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_range_generator.html">RangeGenerator</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt;T&gt; {</div><div class="line"><a name="l10744"></a><span class="lineno">10744</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10745"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_range_generator.html#a5b3b83223b9cada3569bcee729e0fdf3">10745</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_range_generator.html#a5b3b83223b9cada3569bcee729e0fdf3">RangeGenerator</a>(T begin, T end, IncrementT step)</div><div class="line"><a name="l10746"></a><span class="lineno">10746</span>&#160; : begin_(begin), end_(end),</div><div class="line"><a name="l10747"></a><span class="lineno">10747</span>&#160; step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}</div><div class="line"><a name="l10748"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_range_generator.html#a72f6e6f65f1dd3f86672f6ed47df74ef">10748</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_range_generator.html#a72f6e6f65f1dd3f86672f6ed47df74ef">~RangeGenerator</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l10749"></a><span class="lineno">10749</span>&#160;</div><div class="line"><a name="l10750"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_range_generator.html#a502913fbcf14e89d5765dfb44f3c1295">10750</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_range_generator.html#a502913fbcf14e89d5765dfb44f3c1295">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10751"></a><span class="lineno">10751</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, begin_, 0, step_);</div><div class="line"><a name="l10752"></a><span class="lineno">10752</span>&#160; }</div><div class="line"><a name="l10753"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_range_generator.html#ac112ca69567b9c47bf14554e0473e1e2">10753</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_range_generator.html#ac112ca69567b9c47bf14554e0473e1e2">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10754"></a><span class="lineno">10754</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, end_, end_index_, step_);</div><div class="line"><a name="l10755"></a><span class="lineno">10755</span>&#160; }</div><div class="line"><a name="l10756"></a><span class="lineno">10756</span>&#160;</div><div class="line"><a name="l10757"></a><span class="lineno">10757</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10758"></a><span class="lineno">10758</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;T&gt; {</div><div class="line"><a name="l10759"></a><span class="lineno">10759</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10760"></a><span class="lineno">10760</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;T&gt;</a>* base, T value, <span class="keywordtype">int</span> index,</div><div class="line"><a name="l10761"></a><span class="lineno">10761</span>&#160; IncrementT step)</div><div class="line"><a name="l10762"></a><span class="lineno">10762</span>&#160; : base_(base), value_(value), <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>(index), step_(step) {}</div><div class="line"><a name="l10763"></a><span class="lineno">10763</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l10764"></a><span class="lineno">10764</span>&#160;</div><div class="line"><a name="l10765"></a><span class="lineno">10765</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;T&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10766"></a><span class="lineno">10766</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l10767"></a><span class="lineno">10767</span>&#160; }</div><div class="line"><a name="l10768"></a><span class="lineno">10768</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l10769"></a><span class="lineno">10769</span>&#160; value_ = <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(value_ + step_);</div><div class="line"><a name="l10770"></a><span class="lineno">10770</span>&#160; <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>++;</div><div class="line"><a name="l10771"></a><span class="lineno">10771</span>&#160; }</div><div class="line"><a name="l10772"></a><span class="lineno">10772</span>&#160; ParamIteratorInterface&lt;T&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10773"></a><span class="lineno">10773</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l10774"></a><span class="lineno">10774</span>&#160; }</div><div class="line"><a name="l10775"></a><span class="lineno">10775</span>&#160; <span class="keyword">const</span> T* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> &amp;value_; }</div><div class="line"><a name="l10776"></a><span class="lineno">10776</span>&#160; <span class="keywordtype">bool</span> Equals(<span class="keyword">const</span> ParamIteratorInterface&lt;T&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l10777"></a><span class="lineno">10777</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l10778"></a><span class="lineno">10778</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l10779"></a><span class="lineno">10779</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l10780"></a><span class="lineno">10780</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l10781"></a><span class="lineno">10781</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l10782"></a><span class="lineno">10782</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> other_index =</div><div class="line"><a name="l10783"></a><span class="lineno">10783</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other)-&gt;<a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>;</div><div class="line"><a name="l10784"></a><span class="lineno">10784</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a> == other_index;</div><div class="line"><a name="l10785"></a><span class="lineno">10785</span>&#160; }</div><div class="line"><a name="l10786"></a><span class="lineno">10786</span>&#160;</div><div class="line"><a name="l10787"></a><span class="lineno">10787</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10788"></a><span class="lineno">10788</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l10789"></a><span class="lineno">10789</span>&#160; : ParamIteratorInterface&lt;T&gt;(),</div><div class="line"><a name="l10790"></a><span class="lineno">10790</span>&#160; base_(other.base_), value_(other.value_), <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>(other.<a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>),</div><div class="line"><a name="l10791"></a><span class="lineno">10791</span>&#160; step_(other.step_) {}</div><div class="line"><a name="l10792"></a><span class="lineno">10792</span>&#160;</div><div class="line"><a name="l10793"></a><span class="lineno">10793</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l10794"></a><span class="lineno">10794</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l10795"></a><span class="lineno">10795</span>&#160;</div><div class="line"><a name="l10796"></a><span class="lineno">10796</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;T&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l10797"></a><span class="lineno">10797</span>&#160; T value_;</div><div class="line"><a name="l10798"></a><span class="lineno">10798</span>&#160; <span class="keywordtype">int</span> <a class="code" href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">index_</a>;</div><div class="line"><a name="l10799"></a><span class="lineno">10799</span>&#160; <span class="keyword">const</span> IncrementT step_;</div><div class="line"><a name="l10800"></a><span class="lineno">10800</span>&#160; }; <span class="comment">// class RangeGenerator::Iterator</span></div><div class="line"><a name="l10801"></a><span class="lineno">10801</span>&#160;</div><div class="line"><a name="l10802"></a><span class="lineno">10802</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> CalculateEndIndex(<span class="keyword">const</span> T&amp; begin,</div><div class="line"><a name="l10803"></a><span class="lineno">10803</span>&#160; <span class="keyword">const</span> T&amp; end,</div><div class="line"><a name="l10804"></a><span class="lineno">10804</span>&#160; <span class="keyword">const</span> IncrementT&amp; step) {</div><div class="line"><a name="l10805"></a><span class="lineno">10805</span>&#160; <span class="keywordtype">int</span> end_index = 0;</div><div class="line"><a name="l10806"></a><span class="lineno">10806</span>&#160; <span class="keywordflow">for</span> (T i = begin; i &lt; end; i = static_cast&lt;T&gt;(i + step))</div><div class="line"><a name="l10807"></a><span class="lineno">10807</span>&#160; end_index++;</div><div class="line"><a name="l10808"></a><span class="lineno">10808</span>&#160; <span class="keywordflow">return</span> end_index;</div><div class="line"><a name="l10809"></a><span class="lineno">10809</span>&#160; }</div><div class="line"><a name="l10810"></a><span class="lineno">10810</span>&#160;</div><div class="line"><a name="l10811"></a><span class="lineno">10811</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l10812"></a><span class="lineno">10812</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_range_generator.html#a5b3b83223b9cada3569bcee729e0fdf3">RangeGenerator</a>&amp; other);</div><div class="line"><a name="l10813"></a><span class="lineno">10813</span>&#160;</div><div class="line"><a name="l10814"></a><span class="lineno">10814</span>&#160; <span class="keyword">const</span> T begin_;</div><div class="line"><a name="l10815"></a><span class="lineno">10815</span>&#160; <span class="keyword">const</span> T end_;</div><div class="line"><a name="l10816"></a><span class="lineno">10816</span>&#160; <span class="keyword">const</span> IncrementT step_;</div><div class="line"><a name="l10817"></a><span class="lineno">10817</span>&#160; <span class="comment">// The index for the end() iterator. All the elements in the generated</span></div><div class="line"><a name="l10818"></a><span class="lineno">10818</span>&#160; <span class="comment">// sequence are indexed (0-based) to aid iterator comparison.</span></div><div class="line"><a name="l10819"></a><span class="lineno">10819</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> end_index_;</div><div class="line"><a name="l10820"></a><span class="lineno">10820</span>&#160;}; <span class="comment">// class RangeGenerator</span></div><div class="line"><a name="l10821"></a><span class="lineno">10821</span>&#160;</div><div class="line"><a name="l10822"></a><span class="lineno">10822</span>&#160;</div><div class="line"><a name="l10823"></a><span class="lineno">10823</span>&#160;<span class="comment">// Generates values from a pair of STL-style iterators. Used in the</span></div><div class="line"><a name="l10824"></a><span class="lineno">10824</span>&#160;<span class="comment">// ValuesIn() function. The elements are copied from the source range</span></div><div class="line"><a name="l10825"></a><span class="lineno">10825</span>&#160;<span class="comment">// since the source can be located on the stack, and the generator</span></div><div class="line"><a name="l10826"></a><span class="lineno">10826</span>&#160;<span class="comment">// is likely to persist beyond that stack frame.</span></div><div class="line"><a name="l10827"></a><span class="lineno">10827</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l10828"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html">10828</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html">ValuesInIteratorRangeGenerator</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt;T&gt; {</div><div class="line"><a name="l10829"></a><span class="lineno">10829</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10830"></a><span class="lineno">10830</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ForwardIterator&gt;</div><div class="line"><a name="l10831"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a8b30f6028bc5739bbd7c24b0f0e409f7">10831</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a8b30f6028bc5739bbd7c24b0f0e409f7">ValuesInIteratorRangeGenerator</a>(ForwardIterator begin, ForwardIterator end)</div><div class="line"><a name="l10832"></a><span class="lineno">10832</span>&#160; : container_(begin, end) {}</div><div class="line"><a name="l10833"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a9070d5b79803164625d3aa77a1659e9f">10833</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a9070d5b79803164625d3aa77a1659e9f">~ValuesInIteratorRangeGenerator</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l10834"></a><span class="lineno">10834</span>&#160;</div><div class="line"><a name="l10835"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a71ffed6f1deba05f11c9d45f6ab5b85d">10835</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a71ffed6f1deba05f11c9d45f6ab5b85d">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10836"></a><span class="lineno">10836</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, container_.begin());</div><div class="line"><a name="l10837"></a><span class="lineno">10837</span>&#160; }</div><div class="line"><a name="l10838"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a298cfb66a90b1a39c0cea3ca7ae1ece1">10838</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;T&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a298cfb66a90b1a39c0cea3ca7ae1ece1">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10839"></a><span class="lineno">10839</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, container_.end());</div><div class="line"><a name="l10840"></a><span class="lineno">10840</span>&#160; }</div><div class="line"><a name="l10841"></a><span class="lineno">10841</span>&#160;</div><div class="line"><a name="l10842"></a><span class="lineno">10842</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10843"></a><span class="lineno">10843</span>&#160; <span class="keyword">typedef</span> typename ::std::vector&lt;T&gt; ContainerType;</div><div class="line"><a name="l10844"></a><span class="lineno">10844</span>&#160;</div><div class="line"><a name="l10845"></a><span class="lineno">10845</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;T&gt; {</div><div class="line"><a name="l10846"></a><span class="lineno">10846</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10847"></a><span class="lineno">10847</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;T&gt;</a>* base,</div><div class="line"><a name="l10848"></a><span class="lineno">10848</span>&#160; <span class="keyword">typename</span> ContainerType::const_iterator iterator)</div><div class="line"><a name="l10849"></a><span class="lineno">10849</span>&#160; : base_(base), iterator_(iterator) {}</div><div class="line"><a name="l10850"></a><span class="lineno">10850</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l10851"></a><span class="lineno">10851</span>&#160;</div><div class="line"><a name="l10852"></a><span class="lineno">10852</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;T&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10853"></a><span class="lineno">10853</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l10854"></a><span class="lineno">10854</span>&#160; }</div><div class="line"><a name="l10855"></a><span class="lineno">10855</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l10856"></a><span class="lineno">10856</span>&#160; ++iterator_;</div><div class="line"><a name="l10857"></a><span class="lineno">10857</span>&#160; value_.reset();</div><div class="line"><a name="l10858"></a><span class="lineno">10858</span>&#160; }</div><div class="line"><a name="l10859"></a><span class="lineno">10859</span>&#160; ParamIteratorInterface&lt;T&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10860"></a><span class="lineno">10860</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l10861"></a><span class="lineno">10861</span>&#160; }</div><div class="line"><a name="l10862"></a><span class="lineno">10862</span>&#160; <span class="comment">// We need to use cached value referenced by iterator_ because *iterator_</span></div><div class="line"><a name="l10863"></a><span class="lineno">10863</span>&#160; <span class="comment">// can return a temporary object (and of type other then T), so just</span></div><div class="line"><a name="l10864"></a><span class="lineno">10864</span>&#160; <span class="comment">// having &quot;return &amp;*iterator_;&quot; doesn&#39;t work.</span></div><div class="line"><a name="l10865"></a><span class="lineno">10865</span>&#160; <span class="comment">// value_ is updated here and not in Advance() because Advance()</span></div><div class="line"><a name="l10866"></a><span class="lineno">10866</span>&#160; <span class="comment">// can advance iterator_ beyond the end of the range, and we cannot</span></div><div class="line"><a name="l10867"></a><span class="lineno">10867</span>&#160; <span class="comment">// detect that fact. The client code, on the other hand, is</span></div><div class="line"><a name="l10868"></a><span class="lineno">10868</span>&#160; <span class="comment">// responsible for not calling Current() on an out-of-range iterator.</span></div><div class="line"><a name="l10869"></a><span class="lineno">10869</span>&#160; <span class="keyword">const</span> T* Current()<span class="keyword"> const override </span>{</div><div class="line"><a name="l10870"></a><span class="lineno">10870</span>&#160; <span class="keywordflow">if</span> (value_.get() == <span class="keyword">nullptr</span>) value_.reset(<span class="keyword">new</span> T(*iterator_));</div><div class="line"><a name="l10871"></a><span class="lineno">10871</span>&#160; <span class="keywordflow">return</span> value_.get();</div><div class="line"><a name="l10872"></a><span class="lineno">10872</span>&#160; }</div><div class="line"><a name="l10873"></a><span class="lineno">10873</span>&#160; <span class="keywordtype">bool</span> Equals(<span class="keyword">const</span> ParamIteratorInterface&lt;T&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l10874"></a><span class="lineno">10874</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l10875"></a><span class="lineno">10875</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l10876"></a><span class="lineno">10876</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l10877"></a><span class="lineno">10877</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l10878"></a><span class="lineno">10878</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l10879"></a><span class="lineno">10879</span>&#160; <span class="keywordflow">return</span> iterator_ ==</div><div class="line"><a name="l10880"></a><span class="lineno">10880</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other)-&gt;iterator_;</div><div class="line"><a name="l10881"></a><span class="lineno">10881</span>&#160; }</div><div class="line"><a name="l10882"></a><span class="lineno">10882</span>&#160;</div><div class="line"><a name="l10883"></a><span class="lineno">10883</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10884"></a><span class="lineno">10884</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l10885"></a><span class="lineno">10885</span>&#160; <span class="comment">// The explicit constructor call suppresses a false warning</span></div><div class="line"><a name="l10886"></a><span class="lineno">10886</span>&#160; <span class="comment">// emitted by gcc when supplied with the -Wextra option.</span></div><div class="line"><a name="l10887"></a><span class="lineno">10887</span>&#160; : ParamIteratorInterface&lt;T&gt;(),</div><div class="line"><a name="l10888"></a><span class="lineno">10888</span>&#160; base_(other.base_),</div><div class="line"><a name="l10889"></a><span class="lineno">10889</span>&#160; iterator_(other.iterator_) {}</div><div class="line"><a name="l10890"></a><span class="lineno">10890</span>&#160;</div><div class="line"><a name="l10891"></a><span class="lineno">10891</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;T&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l10892"></a><span class="lineno">10892</span>&#160; <span class="keyword">typename</span> ContainerType::const_iterator iterator_;</div><div class="line"><a name="l10893"></a><span class="lineno">10893</span>&#160; <span class="comment">// A cached value of *iterator_. We keep it here to allow access by</span></div><div class="line"><a name="l10894"></a><span class="lineno">10894</span>&#160; <span class="comment">// pointer in the wrapping iterator&#39;s operator-&gt;().</span></div><div class="line"><a name="l10895"></a><span class="lineno">10895</span>&#160; <span class="comment">// value_ needs to be mutable to be accessed in Current().</span></div><div class="line"><a name="l10896"></a><span class="lineno">10896</span>&#160; <span class="comment">// Use of std::unique_ptr helps manage cached value&#39;s lifetime,</span></div><div class="line"><a name="l10897"></a><span class="lineno">10897</span>&#160; <span class="comment">// which is bound by the lifespan of the iterator itself.</span></div><div class="line"><a name="l10898"></a><span class="lineno">10898</span>&#160; <span class="keyword">mutable</span> std::unique_ptr&lt;const T&gt; value_;</div><div class="line"><a name="l10899"></a><span class="lineno">10899</span>&#160; }; <span class="comment">// class ValuesInIteratorRangeGenerator::Iterator</span></div><div class="line"><a name="l10900"></a><span class="lineno">10900</span>&#160;</div><div class="line"><a name="l10901"></a><span class="lineno">10901</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l10902"></a><span class="lineno">10902</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a8b30f6028bc5739bbd7c24b0f0e409f7">ValuesInIteratorRangeGenerator</a>&amp; other);</div><div class="line"><a name="l10903"></a><span class="lineno">10903</span>&#160;</div><div class="line"><a name="l10904"></a><span class="lineno">10904</span>&#160; <span class="keyword">const</span> ContainerType container_;</div><div class="line"><a name="l10905"></a><span class="lineno">10905</span>&#160;}; <span class="comment">// class ValuesInIteratorRangeGenerator</span></div><div class="line"><a name="l10906"></a><span class="lineno">10906</span>&#160;</div><div class="line"><a name="l10907"></a><span class="lineno">10907</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10908"></a><span class="lineno">10908</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10909"></a><span class="lineno">10909</span>&#160;<span class="comment">// Default parameterized test name generator, returns a string containing the</span></div><div class="line"><a name="l10910"></a><span class="lineno">10910</span>&#160;<span class="comment">// integer test parameter index.</span></div><div class="line"><a name="l10911"></a><span class="lineno">10911</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10912"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a954ec4a8a932dac7743e77e459ffefdc">10912</a></span>&#160;<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting_1_1internal.html#a954ec4a8a932dac7743e77e459ffefdc">DefaultParamName</a>(<span class="keyword">const</span> <a class="code" href="structtesting_1_1_test_param_info.html">TestParamInfo&lt;ParamType&gt;</a>&amp; info) {</div><div class="line"><a name="l10913"></a><span class="lineno">10913</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a> name_stream;</div><div class="line"><a name="l10914"></a><span class="lineno">10914</span>&#160; name_stream &lt;&lt; info.<a class="code" href="structtesting_1_1_test_param_info.html#ad4d7bc02cbcc571eb3c1d2ec3ba5bb53">index</a>;</div><div class="line"><a name="l10915"></a><span class="lineno">10915</span>&#160; <span class="keywordflow">return</span> name_stream.<a class="code" href="classtesting_1_1_message.html#a2cdc4df62bdcc9df37651a1cf527704e">GetString</a>();</div><div class="line"><a name="l10916"></a><span class="lineno">10916</span>&#160;}</div><div class="line"><a name="l10917"></a><span class="lineno">10917</span>&#160;</div><div class="line"><a name="l10918"></a><span class="lineno">10918</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10919"></a><span class="lineno">10919</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10920"></a><span class="lineno">10920</span>&#160;<span class="comment">// Parameterized test name overload helpers, which help the</span></div><div class="line"><a name="l10921"></a><span class="lineno">10921</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P macro choose between the default parameterized</span></div><div class="line"><a name="l10922"></a><span class="lineno">10922</span>&#160;<span class="comment">// test name generator and user param name generator.</span></div><div class="line"><a name="l10923"></a><span class="lineno">10923</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType, <span class="keyword">class</span> ParamNameGenFunctor&gt;</div><div class="line"><a name="l10924"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#abc0f0626877188afba6ad122d502f088">10924</a></span>&#160;ParamNameGenFunctor <a class="code" href="namespacetesting_1_1internal.html#abc0f0626877188afba6ad122d502f088">GetParamNameGen</a>(ParamNameGenFunctor func) {</div><div class="line"><a name="l10925"></a><span class="lineno">10925</span>&#160; <span class="keywordflow">return</span> func;</div><div class="line"><a name="l10926"></a><span class="lineno">10926</span>&#160;}</div><div class="line"><a name="l10927"></a><span class="lineno">10927</span>&#160;</div><div class="line"><a name="l10928"></a><span class="lineno">10928</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10929"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_param_name_gen_func.html">10929</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1_param_name_gen_func.html">ParamNameGenFunc</a> {</div><div class="line"><a name="l10930"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1_param_name_gen_func.html#adf1ce5df22a930ae715082862d72590f">10930</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="structtesting_1_1internal_1_1_param_name_gen_func.html#adf1ce5df22a930ae715082862d72590f">Type</a>(<span class="keyword">const</span> <a class="code" href="structtesting_1_1_test_param_info.html">TestParamInfo&lt;ParamType&gt;</a>&amp;);</div><div class="line"><a name="l10931"></a><span class="lineno">10931</span>&#160;};</div><div class="line"><a name="l10932"></a><span class="lineno">10932</span>&#160;</div><div class="line"><a name="l10933"></a><span class="lineno">10933</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10934"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a27d6ea7d401e877cb0fbddf4206ebbe4">10934</a></span>&#160;<span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_param_name_gen_func.html">ParamNameGenFunc&lt;ParamType&gt;::Type</a> *<a class="code" href="namespacetesting_1_1internal.html#abc0f0626877188afba6ad122d502f088">GetParamNameGen</a>() {</div><div class="line"><a name="l10935"></a><span class="lineno">10935</span>&#160; <span class="keywordflow">return</span> &amp;<a class="code" href="namespacetesting_1_1internal.html#a954ec4a8a932dac7743e77e459ffefdc">DefaultParamName</a>;</div><div class="line"><a name="l10936"></a><span class="lineno">10936</span>&#160;}</div><div class="line"><a name="l10937"></a><span class="lineno">10937</span>&#160;</div><div class="line"><a name="l10938"></a><span class="lineno">10938</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10939"></a><span class="lineno">10939</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10940"></a><span class="lineno">10940</span>&#160;<span class="comment">// Stores a parameter value and later creates tests parameterized with that</span></div><div class="line"><a name="l10941"></a><span class="lineno">10941</span>&#160;<span class="comment">// value.</span></div><div class="line"><a name="l10942"></a><span class="lineno">10942</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> TestClass&gt;</div><div class="line"><a name="l10943"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_factory.html">10943</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html">ParameterizedTestFactory</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a> {</div><div class="line"><a name="l10944"></a><span class="lineno">10944</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10945"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#ad9a27b8e1a83de2f1687625bccff460d">10945</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> TestClass::ParamType <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#ad9a27b8e1a83de2f1687625bccff460d">ParamType</a>;</div><div class="line"><a name="l10946"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a82d78356cd402224255edec760a048fb">10946</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a82d78356cd402224255edec760a048fb">ParameterizedTestFactory</a>(<a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#ad9a27b8e1a83de2f1687625bccff460d">ParamType</a> parameter) :</div><div class="line"><a name="l10947"></a><span class="lineno">10947</span>&#160; parameter_(parameter) {}</div><div class="line"><a name="l10948"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a36d962674d7bf845398637338b9f75cb">10948</a></span>&#160; <a class="code" href="classtesting_1_1_test.html">Test</a>* <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a36d962674d7bf845398637338b9f75cb">CreateTest</a>()<span class="keyword"> override </span>{</div><div class="line"><a name="l10949"></a><span class="lineno">10949</span>&#160; TestClass::SetParam(&amp;parameter_);</div><div class="line"><a name="l10950"></a><span class="lineno">10950</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> TestClass();</div><div class="line"><a name="l10951"></a><span class="lineno">10951</span>&#160; }</div><div class="line"><a name="l10952"></a><span class="lineno">10952</span>&#160;</div><div class="line"><a name="l10953"></a><span class="lineno">10953</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10954"></a><span class="lineno">10954</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html#ad9a27b8e1a83de2f1687625bccff460d">ParamType</a> parameter_;</div><div class="line"><a name="l10955"></a><span class="lineno">10955</span>&#160;</div><div class="line"><a name="l10956"></a><span class="lineno">10956</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html">ParameterizedTestFactory</a>);</div><div class="line"><a name="l10957"></a><span class="lineno">10957</span>&#160;};</div><div class="line"><a name="l10958"></a><span class="lineno">10958</span>&#160;</div><div class="line"><a name="l10959"></a><span class="lineno">10959</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10960"></a><span class="lineno">10960</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10961"></a><span class="lineno">10961</span>&#160;<span class="comment">// TestMetaFactoryBase is a base class for meta-factories that create</span></div><div class="line"><a name="l10962"></a><span class="lineno">10962</span>&#160;<span class="comment">// test factories for passing into MakeAndRegisterTestInfo function.</span></div><div class="line"><a name="l10963"></a><span class="lineno">10963</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> ParamType&gt;</div><div class="line"><a name="l10964"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory_base.html">10964</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html">TestMetaFactoryBase</a> {</div><div class="line"><a name="l10965"></a><span class="lineno">10965</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10966"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory_base.html#aad80adf04686f7dfcf952e44afc02767">10966</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html#aad80adf04686f7dfcf952e44afc02767">~TestMetaFactoryBase</a>() {}</div><div class="line"><a name="l10967"></a><span class="lineno">10967</span>&#160;</div><div class="line"><a name="l10968"></a><span class="lineno">10968</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a>* <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html#a853daab362740bcac55e180128d564ef">CreateTestFactory</a>(ParamType parameter) = 0;</div><div class="line"><a name="l10969"></a><span class="lineno">10969</span>&#160;};</div><div class="line"><a name="l10970"></a><span class="lineno">10970</span>&#160;</div><div class="line"><a name="l10971"></a><span class="lineno">10971</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10972"></a><span class="lineno">10972</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10973"></a><span class="lineno">10973</span>&#160;<span class="comment">// TestMetaFactory creates test factories for passing into</span></div><div class="line"><a name="l10974"></a><span class="lineno">10974</span>&#160;<span class="comment">// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives</span></div><div class="line"><a name="l10975"></a><span class="lineno">10975</span>&#160;<span class="comment">// ownership of test factory pointer, same factory object cannot be passed</span></div><div class="line"><a name="l10976"></a><span class="lineno">10976</span>&#160;<span class="comment">// into that method twice. But ParameterizedTestSuiteInfo is going to call</span></div><div class="line"><a name="l10977"></a><span class="lineno">10977</span>&#160;<span class="comment">// it for each Test/Parameter value combination. Thus it needs meta factory</span></div><div class="line"><a name="l10978"></a><span class="lineno">10978</span>&#160;<span class="comment">// creator class.</span></div><div class="line"><a name="l10979"></a><span class="lineno">10979</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> TestSuite&gt;</div><div class="line"><a name="l10980"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory.html">10980</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html">TestMetaFactory</a></div><div class="line"><a name="l10981"></a><span class="lineno">10981</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html">TestMetaFactoryBase</a>&lt;typename TestSuite::ParamType&gt; {</div><div class="line"><a name="l10982"></a><span class="lineno">10982</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l10983"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory.html#a392ebab15dfdcfa1b54bbe15878aa9cd">10983</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html#a392ebab15dfdcfa1b54bbe15878aa9cd">ParamType</a> = <span class="keyword">typename</span> TestSuite::ParamType;</div><div class="line"><a name="l10984"></a><span class="lineno">10984</span>&#160;</div><div class="line"><a name="l10985"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory.html#a1a48d63fbff650741c8f718af5c373d2">10985</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html#a1a48d63fbff650741c8f718af5c373d2">TestMetaFactory</a>() {}</div><div class="line"><a name="l10986"></a><span class="lineno">10986</span>&#160;</div><div class="line"><a name="l10987"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_test_meta_factory.html#abd5d30fab71229deb5e63f5bb5ea3fd8">10987</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">TestFactoryBase</a>* <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html#abd5d30fab71229deb5e63f5bb5ea3fd8">CreateTestFactory</a>(<a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html#a392ebab15dfdcfa1b54bbe15878aa9cd">ParamType</a> parameter)<span class="keyword"> override </span>{</div><div class="line"><a name="l10988"></a><span class="lineno">10988</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html">ParameterizedTestFactory&lt;TestSuite&gt;</a>(parameter);</div><div class="line"><a name="l10989"></a><span class="lineno">10989</span>&#160; }</div><div class="line"><a name="l10990"></a><span class="lineno">10990</span>&#160;</div><div class="line"><a name="l10991"></a><span class="lineno">10991</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l10992"></a><span class="lineno">10992</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_test_meta_factory.html">TestMetaFactory</a>);</div><div class="line"><a name="l10993"></a><span class="lineno">10993</span>&#160;};</div><div class="line"><a name="l10994"></a><span class="lineno">10994</span>&#160;</div><div class="line"><a name="l10995"></a><span class="lineno">10995</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l10996"></a><span class="lineno">10996</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l10997"></a><span class="lineno">10997</span>&#160;<span class="comment">// ParameterizedTestSuiteInfoBase is a generic interface</span></div><div class="line"><a name="l10998"></a><span class="lineno">10998</span>&#160;<span class="comment">// to ParameterizedTestSuiteInfo classes. ParameterizedTestSuiteInfoBase</span></div><div class="line"><a name="l10999"></a><span class="lineno">10999</span>&#160;<span class="comment">// accumulates test information provided by TEST_P macro invocations</span></div><div class="line"><a name="l11000"></a><span class="lineno">11000</span>&#160;<span class="comment">// and generators provided by INSTANTIATE_TEST_SUITE_P macro invocations</span></div><div class="line"><a name="l11001"></a><span class="lineno">11001</span>&#160;<span class="comment">// and uses that information to register all resulting test instances</span></div><div class="line"><a name="l11002"></a><span class="lineno">11002</span>&#160;<span class="comment">// in RegisterTests method. The ParameterizeTestSuiteRegistry class holds</span></div><div class="line"><a name="l11003"></a><span class="lineno">11003</span>&#160;<span class="comment">// a collection of pointers to the ParameterizedTestSuiteInfo objects</span></div><div class="line"><a name="l11004"></a><span class="lineno">11004</span>&#160;<span class="comment">// and calls RegisterTests() on each of them when asked.</span></div><div class="line"><a name="l11005"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html">11005</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html">ParameterizedTestSuiteInfoBase</a> {</div><div class="line"><a name="l11006"></a><span class="lineno">11006</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11007"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#ac2aa0664f56e84cacab823d345c7d67b">11007</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#ac2aa0664f56e84cacab823d345c7d67b">~ParameterizedTestSuiteInfoBase</a>() {}</div><div class="line"><a name="l11008"></a><span class="lineno">11008</span>&#160;</div><div class="line"><a name="l11009"></a><span class="lineno">11009</span>&#160; <span class="comment">// Base part of test suite name for display purposes.</span></div><div class="line"><a name="l11010"></a><span class="lineno">11010</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#aa6e36241431dc72c251ecee9b637b4d3">GetTestSuiteName</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l11011"></a><span class="lineno">11011</span>&#160; <span class="comment">// Test case id to verify identity.</span></div><div class="line"><a name="l11012"></a><span class="lineno">11012</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#ac5bcbf8c50a44472d697e0c80b54387d">GetTestSuiteTypeId</a>() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l11013"></a><span class="lineno">11013</span>&#160; <span class="comment">// UnitTest class invokes this method to register tests in this</span></div><div class="line"><a name="l11014"></a><span class="lineno">11014</span>&#160; <span class="comment">// test suite right before running them in RUN_ALL_TESTS macro.</span></div><div class="line"><a name="l11015"></a><span class="lineno">11015</span>&#160; <span class="comment">// This method should not be called more then once on any single</span></div><div class="line"><a name="l11016"></a><span class="lineno">11016</span>&#160; <span class="comment">// instance of a ParameterizedTestSuiteInfoBase derived class.</span></div><div class="line"><a name="l11017"></a><span class="lineno">11017</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#a41d7d663014af0c1e614c5a61293cb5a">RegisterTests</a>() = 0;</div><div class="line"><a name="l11018"></a><span class="lineno">11018</span>&#160;</div><div class="line"><a name="l11019"></a><span class="lineno">11019</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l11020"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#a3b50ae419b0de858f3ad9b8dd49989de">11020</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#a3b50ae419b0de858f3ad9b8dd49989de">ParameterizedTestSuiteInfoBase</a>() {}</div><div class="line"><a name="l11021"></a><span class="lineno">11021</span>&#160;</div><div class="line"><a name="l11022"></a><span class="lineno">11022</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11023"></a><span class="lineno">11023</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html">ParameterizedTestSuiteInfoBase</a>);</div><div class="line"><a name="l11024"></a><span class="lineno">11024</span>&#160;};</div><div class="line"><a name="l11025"></a><span class="lineno">11025</span>&#160;</div><div class="line"><a name="l11026"></a><span class="lineno">11026</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l11027"></a><span class="lineno">11027</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11028"></a><span class="lineno">11028</span>&#160;<span class="comment">// ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P</span></div><div class="line"><a name="l11029"></a><span class="lineno">11029</span>&#160;<span class="comment">// macro invocations for a particular test suite and generators</span></div><div class="line"><a name="l11030"></a><span class="lineno">11030</span>&#160;<span class="comment">// obtained from INSTANTIATE_TEST_SUITE_P macro invocations for that</span></div><div class="line"><a name="l11031"></a><span class="lineno">11031</span>&#160;<span class="comment">// test suite. It registers tests with all values generated by all</span></div><div class="line"><a name="l11032"></a><span class="lineno">11032</span>&#160;<span class="comment">// generators when asked.</span></div><div class="line"><a name="l11033"></a><span class="lineno">11033</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> TestSuite&gt;</div><div class="line"><a name="l11034"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">11034</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html">ParameterizedTestSuiteInfoBase</a> {</div><div class="line"><a name="l11035"></a><span class="lineno">11035</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11036"></a><span class="lineno">11036</span>&#160; <span class="comment">// ParamType and GeneratorCreationFunc are private types but are required</span></div><div class="line"><a name="l11037"></a><span class="lineno">11037</span>&#160; <span class="comment">// for declarations of public methods AddTestPattern() and</span></div><div class="line"><a name="l11038"></a><span class="lineno">11038</span>&#160; <span class="comment">// AddTestSuiteInstantiation().</span></div><div class="line"><a name="l11039"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a10761bd750a6820a8d8d2c654b10fe54">11039</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a10761bd750a6820a8d8d2c654b10fe54">ParamType</a> = <span class="keyword">typename</span> TestSuite::ParamType;</div><div class="line"><a name="l11040"></a><span class="lineno">11040</span>&#160; <span class="comment">// A function that returns an instance of appropriate generator type.</span></div><div class="line"><a name="l11041"></a><span class="lineno">11041</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;ParamType&gt;</a>(GeneratorCreationFunc)();</div><div class="line"><a name="l11042"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">11042</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_param_name_gen_func.html">ParamNameGenFunc&lt;ParamType&gt;::Type</a> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">ParamNameGeneratorFunc</a>;</div><div class="line"><a name="l11043"></a><span class="lineno">11043</span>&#160;</div><div class="line"><a name="l11044"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a56fc02ddec2cf2101332d1125e4c75a9">11044</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a56fc02ddec2cf2101332d1125e4c75a9">ParameterizedTestSuiteInfo</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div><div class="line"><a name="l11045"></a><span class="lineno">11045</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_code_location.html">CodeLocation</a> code_location)</div><div class="line"><a name="l11046"></a><span class="lineno">11046</span>&#160; : test_suite_name_(name), code_location_(code_location) {}</div><div class="line"><a name="l11047"></a><span class="lineno">11047</span>&#160;</div><div class="line"><a name="l11048"></a><span class="lineno">11048</span>&#160; <span class="comment">// Test case base name for display purposes.</span></div><div class="line"><a name="l11049"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a4a5ddc2cd0404438c2b4d405cd0e706c">11049</a></span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a4a5ddc2cd0404438c2b4d405cd0e706c">GetTestSuiteName</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11050"></a><span class="lineno">11050</span>&#160; <span class="keywordflow">return</span> test_suite_name_;</div><div class="line"><a name="l11051"></a><span class="lineno">11051</span>&#160; }</div><div class="line"><a name="l11052"></a><span class="lineno">11052</span>&#160; <span class="comment">// Test case id to verify identity.</span></div><div class="line"><a name="l11053"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#af488d1d7c1889a250acff2ea6eba4c84">11053</a></span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">TypeId</a> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#af488d1d7c1889a250acff2ea6eba4c84">GetTestSuiteTypeId</a>()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> GetTypeId&lt;TestSuite&gt;(); }</div><div class="line"><a name="l11054"></a><span class="lineno">11054</span>&#160; <span class="comment">// TEST_P macro uses AddTestPattern() to record information</span></div><div class="line"><a name="l11055"></a><span class="lineno">11055</span>&#160; <span class="comment">// about a single test in a LocalTestInfo structure.</span></div><div class="line"><a name="l11056"></a><span class="lineno">11056</span>&#160; <span class="comment">// test_suite_name is the base name of the test suite (without invocation</span></div><div class="line"><a name="l11057"></a><span class="lineno">11057</span>&#160; <span class="comment">// prefix). test_base_name is the name of an individual test without</span></div><div class="line"><a name="l11058"></a><span class="lineno">11058</span>&#160; <span class="comment">// parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is</span></div><div class="line"><a name="l11059"></a><span class="lineno">11059</span>&#160; <span class="comment">// test suite base name and DoBar is test base name.</span></div><div class="line"><a name="l11060"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a07445ac68713383f38747e1c56c6a04a">11060</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a07445ac68713383f38747e1c56c6a04a">AddTestPattern</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* test_base_name,</div><div class="line"><a name="l11061"></a><span class="lineno">11061</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html">TestMetaFactoryBase&lt;ParamType&gt;</a>* meta_factory) {</div><div class="line"><a name="l11062"></a><span class="lineno">11062</span>&#160; tests_.push_back(std::shared_ptr&lt;TestInfo&gt;(</div><div class="line"><a name="l11063"></a><span class="lineno">11063</span>&#160; <span class="keyword">new</span> TestInfo(test_suite_name, test_base_name, meta_factory)));</div><div class="line"><a name="l11064"></a><span class="lineno">11064</span>&#160; }</div><div class="line"><a name="l11065"></a><span class="lineno">11065</span>&#160; <span class="comment">// INSTANTIATE_TEST_SUITE_P macro uses AddGenerator() to record information</span></div><div class="line"><a name="l11066"></a><span class="lineno">11066</span>&#160; <span class="comment">// about a generator.</span></div><div class="line"><a name="l11067"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a174f164f38e522a3935da911a9c1e450">11067</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a174f164f38e522a3935da911a9c1e450">AddTestSuiteInstantiation</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; instantiation_name,</div><div class="line"><a name="l11068"></a><span class="lineno">11068</span>&#160; GeneratorCreationFunc* func,</div><div class="line"><a name="l11069"></a><span class="lineno">11069</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">ParamNameGeneratorFunc</a>* name_func,</div><div class="line"><a name="l11070"></a><span class="lineno">11070</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line) {</div><div class="line"><a name="l11071"></a><span class="lineno">11071</span>&#160; instantiations_.push_back(</div><div class="line"><a name="l11072"></a><span class="lineno">11072</span>&#160; InstantiationInfo(instantiation_name, func, name_func, file, line));</div><div class="line"><a name="l11073"></a><span class="lineno">11073</span>&#160; <span class="keywordflow">return</span> 0; <span class="comment">// Return value used only to run this method in namespace scope.</span></div><div class="line"><a name="l11074"></a><span class="lineno">11074</span>&#160; }</div><div class="line"><a name="l11075"></a><span class="lineno">11075</span>&#160; <span class="comment">// UnitTest class invokes this method to register tests in this test suite</span></div><div class="line"><a name="l11076"></a><span class="lineno">11076</span>&#160; <span class="comment">// test suites right before running tests in RUN_ALL_TESTS macro.</span></div><div class="line"><a name="l11077"></a><span class="lineno">11077</span>&#160; <span class="comment">// This method should not be called more then once on any single</span></div><div class="line"><a name="l11078"></a><span class="lineno">11078</span>&#160; <span class="comment">// instance of a ParameterizedTestSuiteInfoBase derived class.</span></div><div class="line"><a name="l11079"></a><span class="lineno">11079</span>&#160; <span class="comment">// UnitTest has a guard to prevent from calling this method more then once.</span></div><div class="line"><a name="l11080"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a8c0af866d3c291a63d3f4581ccd452d1">11080</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a8c0af866d3c291a63d3f4581ccd452d1">RegisterTests</a>()<span class="keyword"> override </span>{</div><div class="line"><a name="l11081"></a><span class="lineno">11081</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> TestInfoContainer::iterator test_it = tests_.begin();</div><div class="line"><a name="l11082"></a><span class="lineno">11082</span>&#160; test_it != tests_.end(); ++test_it) {</div><div class="line"><a name="l11083"></a><span class="lineno">11083</span>&#160; std::shared_ptr&lt;TestInfo&gt; test_info = *test_it;</div><div class="line"><a name="l11084"></a><span class="lineno">11084</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> InstantiationContainer::iterator gen_it =</div><div class="line"><a name="l11085"></a><span class="lineno">11085</span>&#160; instantiations_.begin(); gen_it != instantiations_.end();</div><div class="line"><a name="l11086"></a><span class="lineno">11086</span>&#160; ++gen_it) {</div><div class="line"><a name="l11087"></a><span class="lineno">11087</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; instantiation_name = gen_it-&gt;name;</div><div class="line"><a name="l11088"></a><span class="lineno">11088</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;ParamType&gt;</a> generator((*gen_it-&gt;generator)());</div><div class="line"><a name="l11089"></a><span class="lineno">11089</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">ParamNameGeneratorFunc</a>* name_func = gen_it-&gt;name_func;</div><div class="line"><a name="l11090"></a><span class="lineno">11090</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file = gen_it-&gt;file;</div><div class="line"><a name="l11091"></a><span class="lineno">11091</span>&#160; <span class="keywordtype">int</span> line = gen_it-&gt;line;</div><div class="line"><a name="l11092"></a><span class="lineno">11092</span>&#160;</div><div class="line"><a name="l11093"></a><span class="lineno">11093</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_suite_name;</div><div class="line"><a name="l11094"></a><span class="lineno">11094</span>&#160; <span class="keywordflow">if</span> ( !instantiation_name.empty() )</div><div class="line"><a name="l11095"></a><span class="lineno">11095</span>&#160; test_suite_name = instantiation_name + <span class="stringliteral">&quot;/&quot;</span>;</div><div class="line"><a name="l11096"></a><span class="lineno">11096</span>&#160; test_suite_name += test_info-&gt;test_suite_base_name;</div><div class="line"><a name="l11097"></a><span class="lineno">11097</span>&#160;</div><div class="line"><a name="l11098"></a><span class="lineno">11098</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l11099"></a><span class="lineno">11099</span>&#160; std::set&lt;std::string&gt; test_param_names;</div><div class="line"><a name="l11100"></a><span class="lineno">11100</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator.html">ParamGenerator&lt;ParamType&gt;::iterator</a> param_it =</div><div class="line"><a name="l11101"></a><span class="lineno">11101</span>&#160; generator.begin();</div><div class="line"><a name="l11102"></a><span class="lineno">11102</span>&#160; param_it != generator.end(); ++param_it, ++i) {</div><div class="line"><a name="l11103"></a><span class="lineno">11103</span>&#160; <a class="code" href="classtesting_1_1_message.html">Message</a> test_name_stream;</div><div class="line"><a name="l11104"></a><span class="lineno">11104</span>&#160;</div><div class="line"><a name="l11105"></a><span class="lineno">11105</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> param_name = name_func(</div><div class="line"><a name="l11106"></a><span class="lineno">11106</span>&#160; <a class="code" href="structtesting_1_1_test_param_info.html">TestParamInfo&lt;ParamType&gt;</a>(*param_it, i));</div><div class="line"><a name="l11107"></a><span class="lineno">11107</span>&#160;</div><div class="line"><a name="l11108"></a><span class="lineno">11108</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(IsValidParamName(param_name))</div><div class="line"><a name="l11109"></a><span class="lineno">11109</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Parameterized test name &#39;&quot;</span> &lt;&lt; param_name</div><div class="line"><a name="l11110"></a><span class="lineno">11110</span>&#160; &lt;&lt; <span class="stringliteral">&quot;&#39; is invalid, in &quot;</span> &lt;&lt; file</div><div class="line"><a name="l11111"></a><span class="lineno">11111</span>&#160; &lt;&lt; <span class="stringliteral">&quot; line &quot;</span> &lt;&lt; line &lt;&lt; std::endl;</div><div class="line"><a name="l11112"></a><span class="lineno">11112</span>&#160;</div><div class="line"><a name="l11113"></a><span class="lineno">11113</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(test_param_names.count(param_name) == 0)</div><div class="line"><a name="l11114"></a><span class="lineno">11114</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Duplicate parameterized test name &#39;&quot;</span> &lt;&lt; param_name</div><div class="line"><a name="l11115"></a><span class="lineno">11115</span>&#160; &lt;&lt; <span class="stringliteral">&quot;&#39;, in &quot;</span> &lt;&lt; file &lt;&lt; <span class="stringliteral">&quot; line &quot;</span> &lt;&lt; line &lt;&lt; std::endl;</div><div class="line"><a name="l11116"></a><span class="lineno">11116</span>&#160;</div><div class="line"><a name="l11117"></a><span class="lineno">11117</span>&#160; test_param_names.insert(param_name);</div><div class="line"><a name="l11118"></a><span class="lineno">11118</span>&#160;</div><div class="line"><a name="l11119"></a><span class="lineno">11119</span>&#160; test_name_stream &lt;&lt; test_info-&gt;test_base_name &lt;&lt; <span class="stringliteral">&quot;/&quot;</span> &lt;&lt; param_name;</div><div class="line"><a name="l11120"></a><span class="lineno">11120</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">MakeAndRegisterTestInfo</a>(</div><div class="line"><a name="l11121"></a><span class="lineno">11121</span>&#160; test_suite_name.c_str(), test_name_stream.<a class="code" href="classtesting_1_1_message.html#a2cdc4df62bdcc9df37651a1cf527704e">GetString</a>().c_str(),</div><div class="line"><a name="l11122"></a><span class="lineno">11122</span>&#160; <span class="keyword">nullptr</span>, <span class="comment">// No type parameter.</span></div><div class="line"><a name="l11123"></a><span class="lineno">11123</span>&#160; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">PrintToString</a>(*param_it).c_str(), code_location_,</div><div class="line"><a name="l11124"></a><span class="lineno">11124</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#af488d1d7c1889a250acff2ea6eba4c84">GetTestSuiteTypeId</a>(),</div><div class="line"><a name="l11125"></a><span class="lineno">11125</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a460c8a0039577824e9170e6c332b530f">SuiteApiResolver&lt;TestSuite&gt;::GetSetUpCaseOrSuite</a>(),</div><div class="line"><a name="l11126"></a><span class="lineno">11126</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html#a8495afe4e71c81842119035a71db7e18">SuiteApiResolver&lt;TestSuite&gt;::GetTearDownCaseOrSuite</a>(),</div><div class="line"><a name="l11127"></a><span class="lineno">11127</span>&#160; test_info-&gt;test_meta_factory-&gt;CreateTestFactory(*param_it));</div><div class="line"><a name="l11128"></a><span class="lineno">11128</span>&#160; } <span class="comment">// for param_it</span></div><div class="line"><a name="l11129"></a><span class="lineno">11129</span>&#160; } <span class="comment">// for gen_it</span></div><div class="line"><a name="l11130"></a><span class="lineno">11130</span>&#160; } <span class="comment">// for test_it</span></div><div class="line"><a name="l11131"></a><span class="lineno">11131</span>&#160; } <span class="comment">// RegisterTests</span></div><div class="line"><a name="l11132"></a><span class="lineno">11132</span>&#160;</div><div class="line"><a name="l11133"></a><span class="lineno">11133</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11134"></a><span class="lineno">11134</span>&#160; <span class="comment">// LocalTestInfo structure keeps information about a single test registered</span></div><div class="line"><a name="l11135"></a><span class="lineno">11135</span>&#160; <span class="comment">// with TEST_P macro.</span></div><div class="line"><a name="l11136"></a><span class="lineno">11136</span>&#160; <span class="keyword">struct </span><a class="code" href="classtesting_1_1_test_info.html">TestInfo</a> {</div><div class="line"><a name="l11137"></a><span class="lineno">11137</span>&#160; <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* a_test_suite_base_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* a_test_base_name,</div><div class="line"><a name="l11138"></a><span class="lineno">11138</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_meta_factory_base.html">TestMetaFactoryBase&lt;ParamType&gt;</a>* a_test_meta_factory)</div><div class="line"><a name="l11139"></a><span class="lineno">11139</span>&#160; : test_suite_base_name(a_test_suite_base_name),</div><div class="line"><a name="l11140"></a><span class="lineno">11140</span>&#160; test_base_name(a_test_base_name),</div><div class="line"><a name="l11141"></a><span class="lineno">11141</span>&#160; test_meta_factory(a_test_meta_factory) {}</div><div class="line"><a name="l11142"></a><span class="lineno">11142</span>&#160;</div><div class="line"><a name="l11143"></a><span class="lineno">11143</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_suite_base_name;</div><div class="line"><a name="l11144"></a><span class="lineno">11144</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_base_name;</div><div class="line"><a name="l11145"></a><span class="lineno">11145</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt;TestMetaFactoryBase&lt;ParamType&gt; &gt; test_meta_factory;</div><div class="line"><a name="l11146"></a><span class="lineno">11146</span>&#160; };</div><div class="line"><a name="l11147"></a><span class="lineno">11147</span>&#160; <span class="keyword">using</span> TestInfoContainer = ::std::vector&lt;std::shared_ptr&lt;TestInfo&gt; &gt;;</div><div class="line"><a name="l11148"></a><span class="lineno">11148</span>&#160; <span class="comment">// Records data received from INSTANTIATE_TEST_SUITE_P macros:</span></div><div class="line"><a name="l11149"></a><span class="lineno">11149</span>&#160; <span class="comment">// &lt;Instantiation name, Sequence generator creation function,</span></div><div class="line"><a name="l11150"></a><span class="lineno">11150</span>&#160; <span class="comment">// Name generator function, Source file, Source line&gt;</span></div><div class="line"><a name="l11151"></a><span class="lineno">11151</span>&#160; <span class="keyword">struct </span>InstantiationInfo {</div><div class="line"><a name="l11152"></a><span class="lineno">11152</span>&#160; InstantiationInfo(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> &amp;name_in,</div><div class="line"><a name="l11153"></a><span class="lineno">11153</span>&#160; GeneratorCreationFunc* generator_in,</div><div class="line"><a name="l11154"></a><span class="lineno">11154</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">ParamNameGeneratorFunc</a>* name_func_in,</div><div class="line"><a name="l11155"></a><span class="lineno">11155</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file_in,</div><div class="line"><a name="l11156"></a><span class="lineno">11156</span>&#160; <span class="keywordtype">int</span> line_in)</div><div class="line"><a name="l11157"></a><span class="lineno">11157</span>&#160; : name(name_in),</div><div class="line"><a name="l11158"></a><span class="lineno">11158</span>&#160; generator(generator_in),</div><div class="line"><a name="l11159"></a><span class="lineno">11159</span>&#160; name_func(name_func_in),</div><div class="line"><a name="l11160"></a><span class="lineno">11160</span>&#160; file(file_in),</div><div class="line"><a name="l11161"></a><span class="lineno">11161</span>&#160; line(line_in) {}</div><div class="line"><a name="l11162"></a><span class="lineno">11162</span>&#160;</div><div class="line"><a name="l11163"></a><span class="lineno">11163</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> name;</div><div class="line"><a name="l11164"></a><span class="lineno">11164</span>&#160; GeneratorCreationFunc* generator;</div><div class="line"><a name="l11165"></a><span class="lineno">11165</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">ParamNameGeneratorFunc</a>* name_func;</div><div class="line"><a name="l11166"></a><span class="lineno">11166</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file;</div><div class="line"><a name="l11167"></a><span class="lineno">11167</span>&#160; <span class="keywordtype">int</span> line;</div><div class="line"><a name="l11168"></a><span class="lineno">11168</span>&#160; };</div><div class="line"><a name="l11169"></a><span class="lineno">11169</span>&#160; typedef ::std::vector&lt;InstantiationInfo&gt; InstantiationContainer;</div><div class="line"><a name="l11170"></a><span class="lineno">11170</span>&#160;</div><div class="line"><a name="l11171"></a><span class="lineno">11171</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> IsValidParamName(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; name) {</div><div class="line"><a name="l11172"></a><span class="lineno">11172</span>&#160; <span class="comment">// Check for empty string</span></div><div class="line"><a name="l11173"></a><span class="lineno">11173</span>&#160; <span class="keywordflow">if</span> (name.empty())</div><div class="line"><a name="l11174"></a><span class="lineno">11174</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l11175"></a><span class="lineno">11175</span>&#160;</div><div class="line"><a name="l11176"></a><span class="lineno">11176</span>&#160; <span class="comment">// Check for invalid characters</span></div><div class="line"><a name="l11177"></a><span class="lineno">11177</span>&#160; <span class="keywordflow">for</span> (std::string::size_type index = 0; index &lt; name.size(); ++index) {</div><div class="line"><a name="l11178"></a><span class="lineno">11178</span>&#160; <span class="keywordflow">if</span> (!isalnum(name[index]) &amp;&amp; name[index] != <span class="charliteral">&#39;_&#39;</span>)</div><div class="line"><a name="l11179"></a><span class="lineno">11179</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l11180"></a><span class="lineno">11180</span>&#160; }</div><div class="line"><a name="l11181"></a><span class="lineno">11181</span>&#160;</div><div class="line"><a name="l11182"></a><span class="lineno">11182</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l11183"></a><span class="lineno">11183</span>&#160; }</div><div class="line"><a name="l11184"></a><span class="lineno">11184</span>&#160;</div><div class="line"><a name="l11185"></a><span class="lineno">11185</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_suite_name_;</div><div class="line"><a name="l11186"></a><span class="lineno">11186</span>&#160; CodeLocation code_location_;</div><div class="line"><a name="l11187"></a><span class="lineno">11187</span>&#160; TestInfoContainer tests_;</div><div class="line"><a name="l11188"></a><span class="lineno">11188</span>&#160; InstantiationContainer instantiations_;</div><div class="line"><a name="l11189"></a><span class="lineno">11189</span>&#160;</div><div class="line"><a name="l11190"></a><span class="lineno">11190</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a56fc02ddec2cf2101332d1125e4c75a9">ParameterizedTestSuiteInfo</a>);</div><div class="line"><a name="l11191"></a><span class="lineno">11191</span>&#160;}; <span class="comment">// class ParameterizedTestSuiteInfo</span></div><div class="line"><a name="l11192"></a><span class="lineno">11192</span>&#160;</div><div class="line"><a name="l11193"></a><span class="lineno">11193</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l11194"></a><span class="lineno">11194</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l11195"></a><span class="lineno">11195</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> TestCase&gt;</div><div class="line"><a name="l11196"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#aac31682b6b41997d6cc610a5787dc8bc">11196</a></span>&#160;<span class="keyword">using</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestCaseInfo</a> = <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo&lt;TestCase&gt;</a>;</div><div class="line"><a name="l11197"></a><span class="lineno">11197</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l11198"></a><span class="lineno">11198</span>&#160;</div><div class="line"><a name="l11199"></a><span class="lineno">11199</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l11200"></a><span class="lineno">11200</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11201"></a><span class="lineno">11201</span>&#160;<span class="comment">// ParameterizedTestSuiteRegistry contains a map of</span></div><div class="line"><a name="l11202"></a><span class="lineno">11202</span>&#160;<span class="comment">// ParameterizedTestSuiteInfoBase classes accessed by test suite names. TEST_P</span></div><div class="line"><a name="l11203"></a><span class="lineno">11203</span>&#160;<span class="comment">// and INSTANTIATE_TEST_SUITE_P macros use it to locate their corresponding</span></div><div class="line"><a name="l11204"></a><span class="lineno">11204</span>&#160;<span class="comment">// ParameterizedTestSuiteInfo descriptors.</span></div><div class="line"><a name="l11205"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html">11205</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html">ParameterizedTestSuiteRegistry</a> {</div><div class="line"><a name="l11206"></a><span class="lineno">11206</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11207"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ae3827c085ed16faaa9197486513292c0">11207</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ae3827c085ed16faaa9197486513292c0">ParameterizedTestSuiteRegistry</a>() {}</div><div class="line"><a name="l11208"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ab29f7a321883945d7f86f3292c100eb5">11208</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ab29f7a321883945d7f86f3292c100eb5">~ParameterizedTestSuiteRegistry</a>() {</div><div class="line"><a name="l11209"></a><span class="lineno">11209</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; test_suite_info : test_suite_infos_) {</div><div class="line"><a name="l11210"></a><span class="lineno">11210</span>&#160; <span class="keyword">delete</span> test_suite_info;</div><div class="line"><a name="l11211"></a><span class="lineno">11211</span>&#160; }</div><div class="line"><a name="l11212"></a><span class="lineno">11212</span>&#160; }</div><div class="line"><a name="l11213"></a><span class="lineno">11213</span>&#160;</div><div class="line"><a name="l11214"></a><span class="lineno">11214</span>&#160; <span class="comment">// Looks up or creates and returns a structure containing information about</span></div><div class="line"><a name="l11215"></a><span class="lineno">11215</span>&#160; <span class="comment">// tests and instantiations of a particular test suite.</span></div><div class="line"><a name="l11216"></a><span class="lineno">11216</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> TestSuite&gt;</div><div class="line"><a name="l11217"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a89ef6dd228f4188e1928513e860580d0">11217</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo&lt;TestSuite&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a89ef6dd228f4188e1928513e860580d0">GetTestSuitePatternHolder</a>(</div><div class="line"><a name="l11218"></a><span class="lineno">11218</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name, <a class="code" href="structtesting_1_1internal_1_1_code_location.html">CodeLocation</a> code_location) {</div><div class="line"><a name="l11219"></a><span class="lineno">11219</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo&lt;TestSuite&gt;</a>* typed_test_info = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l11220"></a><span class="lineno">11220</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; test_suite_info : test_suite_infos_) {</div><div class="line"><a name="l11221"></a><span class="lineno">11221</span>&#160; <span class="keywordflow">if</span> (test_suite_info-&gt;GetTestSuiteName() == test_suite_name) {</div><div class="line"><a name="l11222"></a><span class="lineno">11222</span>&#160; <span class="keywordflow">if</span> (test_suite_info-&gt;GetTestSuiteTypeId() != GetTypeId&lt;TestSuite&gt;()) {</div><div class="line"><a name="l11223"></a><span class="lineno">11223</span>&#160; <span class="comment">// Complain about incorrect usage of Google Test facilities</span></div><div class="line"><a name="l11224"></a><span class="lineno">11224</span>&#160; <span class="comment">// and terminate the program since we cannot guaranty correct</span></div><div class="line"><a name="l11225"></a><span class="lineno">11225</span>&#160; <span class="comment">// test suite setup and tear-down in this case.</span></div><div class="line"><a name="l11226"></a><span class="lineno">11226</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a5d3e97443d23bf1824f87feb172efd39">ReportInvalidTestSuiteType</a>(test_suite_name, code_location);</div><div class="line"><a name="l11227"></a><span class="lineno">11227</span>&#160; <a class="code" href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">posix::Abort</a>();</div><div class="line"><a name="l11228"></a><span class="lineno">11228</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l11229"></a><span class="lineno">11229</span>&#160; <span class="comment">// At this point we are sure that the object we found is of the same</span></div><div class="line"><a name="l11230"></a><span class="lineno">11230</span>&#160; <span class="comment">// type we are looking for, so we downcast it to that type</span></div><div class="line"><a name="l11231"></a><span class="lineno">11231</span>&#160; <span class="comment">// without further checks.</span></div><div class="line"><a name="l11232"></a><span class="lineno">11232</span>&#160; typed_test_info = <a class="code" href="namespacetesting_1_1internal.html#abfe9bfb020d38aa4e0e12c001911b22b">CheckedDowncastToActualType</a>&lt;</div><div class="line"><a name="l11233"></a><span class="lineno">11233</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo&lt;TestSuite&gt;</a> &gt;(test_suite_info);</div><div class="line"><a name="l11234"></a><span class="lineno">11234</span>&#160; }</div><div class="line"><a name="l11235"></a><span class="lineno">11235</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l11236"></a><span class="lineno">11236</span>&#160; }</div><div class="line"><a name="l11237"></a><span class="lineno">11237</span>&#160; }</div><div class="line"><a name="l11238"></a><span class="lineno">11238</span>&#160; <span class="keywordflow">if</span> (typed_test_info == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l11239"></a><span class="lineno">11239</span>&#160; typed_test_info = <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestSuiteInfo&lt;TestSuite&gt;</a>(</div><div class="line"><a name="l11240"></a><span class="lineno">11240</span>&#160; test_suite_name, code_location);</div><div class="line"><a name="l11241"></a><span class="lineno">11241</span>&#160; test_suite_infos_.push_back(typed_test_info);</div><div class="line"><a name="l11242"></a><span class="lineno">11242</span>&#160; }</div><div class="line"><a name="l11243"></a><span class="lineno">11243</span>&#160; <span class="keywordflow">return</span> typed_test_info;</div><div class="line"><a name="l11244"></a><span class="lineno">11244</span>&#160; }</div><div class="line"><a name="l11245"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a44c2ee0296de42dc6ca7abbf48d00495">11245</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a44c2ee0296de42dc6ca7abbf48d00495">RegisterTests</a>() {</div><div class="line"><a name="l11246"></a><span class="lineno">11246</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; test_suite_info : test_suite_infos_) {</div><div class="line"><a name="l11247"></a><span class="lineno">11247</span>&#160; test_suite_info-&gt;RegisterTests();</div><div class="line"><a name="l11248"></a><span class="lineno">11248</span>&#160; }</div><div class="line"><a name="l11249"></a><span class="lineno">11249</span>&#160; }</div><div class="line"><a name="l11250"></a><span class="lineno">11250</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l11251"></a><span class="lineno">11251</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l11252"></a><span class="lineno">11252</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> TestCase&gt;</div><div class="line"><a name="l11253"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a3fe06fb4e1b4194dae1fbcdf3560fbd3">11253</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">ParameterizedTestCaseInfo&lt;TestCase&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a3fe06fb4e1b4194dae1fbcdf3560fbd3">GetTestCasePatternHolder</a>(</div><div class="line"><a name="l11254"></a><span class="lineno">11254</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_case_name, <a class="code" href="structtesting_1_1internal_1_1_code_location.html">CodeLocation</a> code_location) {</div><div class="line"><a name="l11255"></a><span class="lineno">11255</span>&#160; <span class="keywordflow">return</span> GetTestSuitePatternHolder&lt;TestCase&gt;(test_case_name, code_location);</div><div class="line"><a name="l11256"></a><span class="lineno">11256</span>&#160; }</div><div class="line"><a name="l11257"></a><span class="lineno">11257</span>&#160;</div><div class="line"><a name="l11258"></a><span class="lineno">11258</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l11259"></a><span class="lineno">11259</span>&#160;</div><div class="line"><a name="l11260"></a><span class="lineno">11260</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11261"></a><span class="lineno">11261</span>&#160; <span class="keyword">using</span> TestSuiteInfoContainer = ::std::vector&lt;ParameterizedTestSuiteInfoBase*&gt;;</div><div class="line"><a name="l11262"></a><span class="lineno">11262</span>&#160;</div><div class="line"><a name="l11263"></a><span class="lineno">11263</span>&#160; TestSuiteInfoContainer test_suite_infos_;</div><div class="line"><a name="l11264"></a><span class="lineno">11264</span>&#160;</div><div class="line"><a name="l11265"></a><span class="lineno">11265</span>&#160; GTEST_DISALLOW_COPY_AND_ASSIGN_(<a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html">ParameterizedTestSuiteRegistry</a>);</div><div class="line"><a name="l11266"></a><span class="lineno">11266</span>&#160;};</div><div class="line"><a name="l11267"></a><span class="lineno">11267</span>&#160;</div><div class="line"><a name="l11268"></a><span class="lineno">11268</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l11269"></a><span class="lineno">11269</span>&#160;</div><div class="line"><a name="l11270"></a><span class="lineno">11270</span>&#160;<span class="comment">// Forward declarations of ValuesIn(), which is implemented in</span></div><div class="line"><a name="l11271"></a><span class="lineno">11271</span>&#160;<span class="comment">// include/gtest/gtest-param-test.h.</span></div><div class="line"><a name="l11272"></a><span class="lineno">11272</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Container&gt;</div><div class="line"><a name="l11273"></a><span class="lineno">11273</span>&#160;internal::ParamGenerator&lt;typename Container::value_type&gt; <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(</div><div class="line"><a name="l11274"></a><span class="lineno">11274</span>&#160; <span class="keyword">const</span> Container&amp; container);</div><div class="line"><a name="l11275"></a><span class="lineno">11275</span>&#160;</div><div class="line"><a name="l11276"></a><span class="lineno">11276</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l11277"></a><span class="lineno">11277</span>&#160;<span class="comment">// Used in the Values() function to provide polymorphic capabilities.</span></div><div class="line"><a name="l11278"></a><span class="lineno">11278</span>&#160;</div><div class="line"><a name="l11279"></a><span class="lineno">11279</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Ts&gt;</div><div class="line"><a name="l11280"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_value_array.html">11280</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_value_array.html">ValueArray</a> {</div><div class="line"><a name="l11281"></a><span class="lineno">11281</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11282"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_value_array.html#acd7cd6a969a7e95152eac1787c42c9ed">11282</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_value_array.html#acd7cd6a969a7e95152eac1787c42c9ed">ValueArray</a>(Ts... v) : v_{std::move(v)...} {}</div><div class="line"><a name="l11283"></a><span class="lineno">11283</span>&#160;</div><div class="line"><a name="l11284"></a><span class="lineno">11284</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l11285"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_value_array.html#a019560f10debdce5f47bb18c0e5261b5">11285</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T&gt;</a>() <span class="keyword">const</span> { <span class="comment">// NOLINT</span></div><div class="line"><a name="l11286"></a><span class="lineno">11286</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(MakeVector&lt;T&gt;(<a class="code" href="structtesting_1_1internal_1_1_make_index_sequence.html">MakeIndexSequence</a>&lt;<span class="keyword">sizeof</span>...(Ts)&gt;()));</div><div class="line"><a name="l11287"></a><span class="lineno">11287</span>&#160; }</div><div class="line"><a name="l11288"></a><span class="lineno">11288</span>&#160;</div><div class="line"><a name="l11289"></a><span class="lineno">11289</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11290"></a><span class="lineno">11290</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span>... I&gt;</div><div class="line"><a name="l11291"></a><span class="lineno">11291</span>&#160; std::vector&lt;T&gt; MakeVector(<a class="code" href="structtesting_1_1internal_1_1_index_sequence.html">IndexSequence&lt;I...&gt;</a>)<span class="keyword"> const </span>{</div><div class="line"><a name="l11292"></a><span class="lineno">11292</span>&#160; <span class="keywordflow">return</span> std::vector&lt;T&gt;{<span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(v_.template Get&lt;I&gt;())...};</div><div class="line"><a name="l11293"></a><span class="lineno">11293</span>&#160; }</div><div class="line"><a name="l11294"></a><span class="lineno">11294</span>&#160;</div><div class="line"><a name="l11295"></a><span class="lineno">11295</span>&#160; FlatTuple&lt;Ts...&gt; v_;</div><div class="line"><a name="l11296"></a><span class="lineno">11296</span>&#160;};</div><div class="line"><a name="l11297"></a><span class="lineno">11297</span>&#160;</div><div class="line"><a name="l11298"></a><span class="lineno">11298</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l11299"></a><span class="lineno">11299</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l11300"></a><span class="lineno">11300</span>&#160;</div><div class="line"><a name="l11301"></a><span class="lineno">11301</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_</span></div><div class="line"><a name="l11302"></a><span class="lineno">11302</span>&#160;<span class="comment">// This file was GENERATED by command:</span></div><div class="line"><a name="l11303"></a><span class="lineno">11303</span>&#160;<span class="comment">// pump.py gtest-param-util-generated.h.pump</span></div><div class="line"><a name="l11304"></a><span class="lineno">11304</span>&#160;<span class="comment">// DO NOT EDIT BY HAND!!!</span></div><div class="line"><a name="l11305"></a><span class="lineno">11305</span>&#160;</div><div class="line"><a name="l11306"></a><span class="lineno">11306</span>&#160;<span class="comment">// Copyright 2008 Google Inc.</span></div><div class="line"><a name="l11307"></a><span class="lineno">11307</span>&#160;<span class="comment">// All Rights Reserved.</span></div><div class="line"><a name="l11308"></a><span class="lineno">11308</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11309"></a><span class="lineno">11309</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l11310"></a><span class="lineno">11310</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l11311"></a><span class="lineno">11311</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l11312"></a><span class="lineno">11312</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11313"></a><span class="lineno">11313</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l11314"></a><span class="lineno">11314</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l11315"></a><span class="lineno">11315</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l11316"></a><span class="lineno">11316</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l11317"></a><span class="lineno">11317</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l11318"></a><span class="lineno">11318</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l11319"></a><span class="lineno">11319</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l11320"></a><span class="lineno">11320</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l11321"></a><span class="lineno">11321</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l11322"></a><span class="lineno">11322</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11323"></a><span class="lineno">11323</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l11324"></a><span class="lineno">11324</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l11325"></a><span class="lineno">11325</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l11326"></a><span class="lineno">11326</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l11327"></a><span class="lineno">11327</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l11328"></a><span class="lineno">11328</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l11329"></a><span class="lineno">11329</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l11330"></a><span class="lineno">11330</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l11331"></a><span class="lineno">11331</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l11332"></a><span class="lineno">11332</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l11333"></a><span class="lineno">11333</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l11334"></a><span class="lineno">11334</span>&#160;</div><div class="line"><a name="l11335"></a><span class="lineno">11335</span>&#160;</div><div class="line"><a name="l11336"></a><span class="lineno">11336</span>&#160;<span class="comment">// Type and function utilities for implementing parameterized tests.</span></div><div class="line"><a name="l11337"></a><span class="lineno">11337</span>&#160;<span class="comment">// This file is generated by a SCRIPT. DO NOT EDIT BY HAND!</span></div><div class="line"><a name="l11338"></a><span class="lineno">11338</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11339"></a><span class="lineno">11339</span>&#160;<span class="comment">// Currently Google Test supports at most 50 arguments in Values,</span></div><div class="line"><a name="l11340"></a><span class="lineno">11340</span>&#160;<span class="comment">// and at most 10 arguments in Combine. Please contact</span></div><div class="line"><a name="l11341"></a><span class="lineno">11341</span>&#160;<span class="comment">// googletestframework@googlegroups.com if you need more.</span></div><div class="line"><a name="l11342"></a><span class="lineno">11342</span>&#160;<span class="comment">// Please note that the number of arguments to Combine is limited</span></div><div class="line"><a name="l11343"></a><span class="lineno">11343</span>&#160;<span class="comment">// by the maximum arity of the implementation of tuple which is</span></div><div class="line"><a name="l11344"></a><span class="lineno">11344</span>&#160;<span class="comment">// currently set at 10.</span></div><div class="line"><a name="l11345"></a><span class="lineno">11345</span>&#160;</div><div class="line"><a name="l11346"></a><span class="lineno">11346</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l11347"></a><span class="lineno">11347</span>&#160;</div><div class="line"><a name="l11348"></a><span class="lineno">11348</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div><div class="line"><a name="l11349"></a><span class="lineno">11349</span>&#160;</div><div class="line"><a name="l11350"></a><span class="lineno">11350</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l11351"></a><span class="lineno">11351</span>&#160;</div><div class="line"><a name="l11352"></a><span class="lineno">11352</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_</span></div><div class="line"><a name="l11353"></a><span class="lineno"><a class="line" href="gtest_8h.html#a34b82ce6255f2f5666647d35498f4c65">11353</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_</span></div><div class="line"><a name="l11354"></a><span class="lineno">11354</span>&#160;</div><div class="line"><a name="l11355"></a><span class="lineno">11355</span>&#160;</div><div class="line"><a name="l11356"></a><span class="lineno">11356</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l11357"></a><span class="lineno">11357</span>&#160;</div><div class="line"><a name="l11358"></a><span class="lineno">11358</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l11359"></a><span class="lineno">11359</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l11360"></a><span class="lineno">11360</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11361"></a><span class="lineno">11361</span>&#160;<span class="comment">// Generates values from the Cartesian product of values produced</span></div><div class="line"><a name="l11362"></a><span class="lineno">11362</span>&#160;<span class="comment">// by the argument generators.</span></div><div class="line"><a name="l11363"></a><span class="lineno">11363</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l11364"></a><span class="lineno">11364</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l11365"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html">11365</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html">CartesianProductGenerator2</a></div><div class="line"><a name="l11366"></a><span class="lineno">11366</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2&gt; &gt; {</div><div class="line"><a name="l11367"></a><span class="lineno">11367</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11368"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4dd5db877d076b52d44fb631e34cd47f">11368</a></span>&#160; typedef ::std::tuple&lt;T1, T2&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4dd5db877d076b52d44fb631e34cd47f">ParamType</a>;</div><div class="line"><a name="l11369"></a><span class="lineno">11369</span>&#160;</div><div class="line"><a name="l11370"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a971ef5a45783db277f5fae84eaef41a3">11370</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a971ef5a45783db277f5fae84eaef41a3">CartesianProductGenerator2</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11371"></a><span class="lineno">11371</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2)</div><div class="line"><a name="l11372"></a><span class="lineno">11372</span>&#160; : g1_(g1), g2_(g2) {}</div><div class="line"><a name="l11373"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4359f80cc1888d4a18d2e0a6865b920d">11373</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4359f80cc1888d4a18d2e0a6865b920d">~CartesianProductGenerator2</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11374"></a><span class="lineno">11374</span>&#160;</div><div class="line"><a name="l11375"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#aa68e7d9334ba6318bc17ccb0669767fe">11375</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#aa68e7d9334ba6318bc17ccb0669767fe">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11376"></a><span class="lineno">11376</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l11377"></a><span class="lineno">11377</span>&#160; }</div><div class="line"><a name="l11378"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#afb1a5fe2810721040689e2e8c85b8a42">11378</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#afb1a5fe2810721040689e2e8c85b8a42">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11379"></a><span class="lineno">11379</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l11380"></a><span class="lineno">11380</span>&#160; }</div><div class="line"><a name="l11381"></a><span class="lineno">11381</span>&#160;</div><div class="line"><a name="l11382"></a><span class="lineno">11382</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11383"></a><span class="lineno">11383</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l11384"></a><span class="lineno">11384</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11385"></a><span class="lineno">11385</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l11386"></a><span class="lineno">11386</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11387"></a><span class="lineno">11387</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l11388"></a><span class="lineno">11388</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l11389"></a><span class="lineno">11389</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2)</div><div class="line"><a name="l11390"></a><span class="lineno">11390</span>&#160; : base_(base),</div><div class="line"><a name="l11391"></a><span class="lineno">11391</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l11392"></a><span class="lineno">11392</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {</div><div class="line"><a name="l11393"></a><span class="lineno">11393</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11394"></a><span class="lineno">11394</span>&#160; }</div><div class="line"><a name="l11395"></a><span class="lineno">11395</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11396"></a><span class="lineno">11396</span>&#160;</div><div class="line"><a name="l11397"></a><span class="lineno">11397</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11398"></a><span class="lineno">11398</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l11399"></a><span class="lineno">11399</span>&#160; }</div><div class="line"><a name="l11400"></a><span class="lineno">11400</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l11401"></a><span class="lineno">11401</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l11402"></a><span class="lineno">11402</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l11403"></a><span class="lineno">11403</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l11404"></a><span class="lineno">11404</span>&#160; ++current2_;</div><div class="line"><a name="l11405"></a><span class="lineno">11405</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l11406"></a><span class="lineno">11406</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l11407"></a><span class="lineno">11407</span>&#160; ++current1_;</div><div class="line"><a name="l11408"></a><span class="lineno">11408</span>&#160; }</div><div class="line"><a name="l11409"></a><span class="lineno">11409</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11410"></a><span class="lineno">11410</span>&#160; }</div><div class="line"><a name="l11411"></a><span class="lineno">11411</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11412"></a><span class="lineno">11412</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l11413"></a><span class="lineno">11413</span>&#160; }</div><div class="line"><a name="l11414"></a><span class="lineno">11414</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4dd5db877d076b52d44fb631e34cd47f">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l11415"></a><span class="lineno">11415</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l11416"></a><span class="lineno">11416</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l11417"></a><span class="lineno">11417</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l11418"></a><span class="lineno">11418</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l11419"></a><span class="lineno">11419</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l11420"></a><span class="lineno">11420</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l11421"></a><span class="lineno">11421</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l11422"></a><span class="lineno">11422</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l11423"></a><span class="lineno">11423</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l11424"></a><span class="lineno">11424</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l11425"></a><span class="lineno">11425</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l11426"></a><span class="lineno">11426</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l11427"></a><span class="lineno">11427</span>&#160; (</div><div class="line"><a name="l11428"></a><span class="lineno">11428</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l11429"></a><span class="lineno">11429</span>&#160; current2_ == typed_other-&gt;current2_);</div><div class="line"><a name="l11430"></a><span class="lineno">11430</span>&#160; }</div><div class="line"><a name="l11431"></a><span class="lineno">11431</span>&#160;</div><div class="line"><a name="l11432"></a><span class="lineno">11432</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11433"></a><span class="lineno">11433</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l11434"></a><span class="lineno">11434</span>&#160; : base_(other.base_),</div><div class="line"><a name="l11435"></a><span class="lineno">11435</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l11436"></a><span class="lineno">11436</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l11437"></a><span class="lineno">11437</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l11438"></a><span class="lineno">11438</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l11439"></a><span class="lineno">11439</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l11440"></a><span class="lineno">11440</span>&#160; current2_(other.current2_) {</div><div class="line"><a name="l11441"></a><span class="lineno">11441</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11442"></a><span class="lineno">11442</span>&#160; }</div><div class="line"><a name="l11443"></a><span class="lineno">11443</span>&#160;</div><div class="line"><a name="l11444"></a><span class="lineno">11444</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l11445"></a><span class="lineno">11445</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l11446"></a><span class="lineno">11446</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4dd5db877d076b52d44fb631e34cd47f">ParamType</a>(*current1_, *current2_));</div><div class="line"><a name="l11447"></a><span class="lineno">11447</span>&#160; }</div><div class="line"><a name="l11448"></a><span class="lineno">11448</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l11449"></a><span class="lineno">11449</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l11450"></a><span class="lineno">11450</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l11451"></a><span class="lineno">11451</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l11452"></a><span class="lineno">11452</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l11453"></a><span class="lineno">11453</span>&#160; current2_ == end2_;</div><div class="line"><a name="l11454"></a><span class="lineno">11454</span>&#160; }</div><div class="line"><a name="l11455"></a><span class="lineno">11455</span>&#160;</div><div class="line"><a name="l11456"></a><span class="lineno">11456</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11457"></a><span class="lineno">11457</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l11458"></a><span class="lineno">11458</span>&#160;</div><div class="line"><a name="l11459"></a><span class="lineno">11459</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l11460"></a><span class="lineno">11460</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l11461"></a><span class="lineno">11461</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l11462"></a><span class="lineno">11462</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l11463"></a><span class="lineno">11463</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l11464"></a><span class="lineno">11464</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l11465"></a><span class="lineno">11465</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l11466"></a><span class="lineno">11466</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l11467"></a><span class="lineno">11467</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l11468"></a><span class="lineno">11468</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l11469"></a><span class="lineno">11469</span>&#160; }; <span class="comment">// class CartesianProductGenerator2::Iterator</span></div><div class="line"><a name="l11470"></a><span class="lineno">11470</span>&#160;</div><div class="line"><a name="l11471"></a><span class="lineno">11471</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11472"></a><span class="lineno">11472</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a971ef5a45783db277f5fae84eaef41a3">CartesianProductGenerator2</a>&amp; other);</div><div class="line"><a name="l11473"></a><span class="lineno">11473</span>&#160;</div><div class="line"><a name="l11474"></a><span class="lineno">11474</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l11475"></a><span class="lineno">11475</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l11476"></a><span class="lineno">11476</span>&#160;}; <span class="comment">// class CartesianProductGenerator2</span></div><div class="line"><a name="l11477"></a><span class="lineno">11477</span>&#160;</div><div class="line"><a name="l11478"></a><span class="lineno">11478</span>&#160;</div><div class="line"><a name="l11479"></a><span class="lineno">11479</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3&gt;</div><div class="line"><a name="l11480"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html">11480</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html">CartesianProductGenerator3</a></div><div class="line"><a name="l11481"></a><span class="lineno">11481</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3&gt; &gt; {</div><div class="line"><a name="l11482"></a><span class="lineno">11482</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11483"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a8ef3e248a6d5ba1ea4ae17a8d045e98a">11483</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a8ef3e248a6d5ba1ea4ae17a8d045e98a">ParamType</a>;</div><div class="line"><a name="l11484"></a><span class="lineno">11484</span>&#160;</div><div class="line"><a name="l11485"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#afdca1e94b01f654564b9cbe66fb5ca94">11485</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#afdca1e94b01f654564b9cbe66fb5ca94">CartesianProductGenerator3</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11486"></a><span class="lineno">11486</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3)</div><div class="line"><a name="l11487"></a><span class="lineno">11487</span>&#160; : g1_(g1), g2_(g2), g3_(g3) {}</div><div class="line"><a name="l11488"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a230b2ec353e917e1afeb6aae5668e19e">11488</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a230b2ec353e917e1afeb6aae5668e19e">~CartesianProductGenerator3</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11489"></a><span class="lineno">11489</span>&#160;</div><div class="line"><a name="l11490"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a2a1d5af705de6cc340291294fa38437e">11490</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a2a1d5af705de6cc340291294fa38437e">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11491"></a><span class="lineno">11491</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l11492"></a><span class="lineno">11492</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l11493"></a><span class="lineno">11493</span>&#160; }</div><div class="line"><a name="l11494"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a474d70e577e76b7f84b0d83e90a6ec89">11494</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a474d70e577e76b7f84b0d83e90a6ec89">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11495"></a><span class="lineno">11495</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l11496"></a><span class="lineno">11496</span>&#160; }</div><div class="line"><a name="l11497"></a><span class="lineno">11497</span>&#160;</div><div class="line"><a name="l11498"></a><span class="lineno">11498</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11499"></a><span class="lineno">11499</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l11500"></a><span class="lineno">11500</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11501"></a><span class="lineno">11501</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l11502"></a><span class="lineno">11502</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11503"></a><span class="lineno">11503</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l11504"></a><span class="lineno">11504</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l11505"></a><span class="lineno">11505</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l11506"></a><span class="lineno">11506</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11507"></a><span class="lineno">11507</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3)</div><div class="line"><a name="l11508"></a><span class="lineno">11508</span>&#160; : base_(base),</div><div class="line"><a name="l11509"></a><span class="lineno">11509</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l11510"></a><span class="lineno">11510</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l11511"></a><span class="lineno">11511</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {</div><div class="line"><a name="l11512"></a><span class="lineno">11512</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11513"></a><span class="lineno">11513</span>&#160; }</div><div class="line"><a name="l11514"></a><span class="lineno">11514</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11515"></a><span class="lineno">11515</span>&#160;</div><div class="line"><a name="l11516"></a><span class="lineno">11516</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11517"></a><span class="lineno">11517</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l11518"></a><span class="lineno">11518</span>&#160; }</div><div class="line"><a name="l11519"></a><span class="lineno">11519</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l11520"></a><span class="lineno">11520</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l11521"></a><span class="lineno">11521</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l11522"></a><span class="lineno">11522</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l11523"></a><span class="lineno">11523</span>&#160; ++current3_;</div><div class="line"><a name="l11524"></a><span class="lineno">11524</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l11525"></a><span class="lineno">11525</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l11526"></a><span class="lineno">11526</span>&#160; ++current2_;</div><div class="line"><a name="l11527"></a><span class="lineno">11527</span>&#160; }</div><div class="line"><a name="l11528"></a><span class="lineno">11528</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l11529"></a><span class="lineno">11529</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l11530"></a><span class="lineno">11530</span>&#160; ++current1_;</div><div class="line"><a name="l11531"></a><span class="lineno">11531</span>&#160; }</div><div class="line"><a name="l11532"></a><span class="lineno">11532</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11533"></a><span class="lineno">11533</span>&#160; }</div><div class="line"><a name="l11534"></a><span class="lineno">11534</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11535"></a><span class="lineno">11535</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l11536"></a><span class="lineno">11536</span>&#160; }</div><div class="line"><a name="l11537"></a><span class="lineno">11537</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a8ef3e248a6d5ba1ea4ae17a8d045e98a">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l11538"></a><span class="lineno">11538</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l11539"></a><span class="lineno">11539</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l11540"></a><span class="lineno">11540</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l11541"></a><span class="lineno">11541</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l11542"></a><span class="lineno">11542</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l11543"></a><span class="lineno">11543</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l11544"></a><span class="lineno">11544</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l11545"></a><span class="lineno">11545</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l11546"></a><span class="lineno">11546</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l11547"></a><span class="lineno">11547</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l11548"></a><span class="lineno">11548</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l11549"></a><span class="lineno">11549</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l11550"></a><span class="lineno">11550</span>&#160; (</div><div class="line"><a name="l11551"></a><span class="lineno">11551</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l11552"></a><span class="lineno">11552</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l11553"></a><span class="lineno">11553</span>&#160; current3_ == typed_other-&gt;current3_);</div><div class="line"><a name="l11554"></a><span class="lineno">11554</span>&#160; }</div><div class="line"><a name="l11555"></a><span class="lineno">11555</span>&#160;</div><div class="line"><a name="l11556"></a><span class="lineno">11556</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11557"></a><span class="lineno">11557</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l11558"></a><span class="lineno">11558</span>&#160; : base_(other.base_),</div><div class="line"><a name="l11559"></a><span class="lineno">11559</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l11560"></a><span class="lineno">11560</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l11561"></a><span class="lineno">11561</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l11562"></a><span class="lineno">11562</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l11563"></a><span class="lineno">11563</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l11564"></a><span class="lineno">11564</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l11565"></a><span class="lineno">11565</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l11566"></a><span class="lineno">11566</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l11567"></a><span class="lineno">11567</span>&#160; current3_(other.current3_) {</div><div class="line"><a name="l11568"></a><span class="lineno">11568</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11569"></a><span class="lineno">11569</span>&#160; }</div><div class="line"><a name="l11570"></a><span class="lineno">11570</span>&#160;</div><div class="line"><a name="l11571"></a><span class="lineno">11571</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l11572"></a><span class="lineno">11572</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l11573"></a><span class="lineno">11573</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a8ef3e248a6d5ba1ea4ae17a8d045e98a">ParamType</a>(*current1_, *current2_, *current3_));</div><div class="line"><a name="l11574"></a><span class="lineno">11574</span>&#160; }</div><div class="line"><a name="l11575"></a><span class="lineno">11575</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l11576"></a><span class="lineno">11576</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l11577"></a><span class="lineno">11577</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l11578"></a><span class="lineno">11578</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l11579"></a><span class="lineno">11579</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l11580"></a><span class="lineno">11580</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l11581"></a><span class="lineno">11581</span>&#160; current3_ == end3_;</div><div class="line"><a name="l11582"></a><span class="lineno">11582</span>&#160; }</div><div class="line"><a name="l11583"></a><span class="lineno">11583</span>&#160;</div><div class="line"><a name="l11584"></a><span class="lineno">11584</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11585"></a><span class="lineno">11585</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l11586"></a><span class="lineno">11586</span>&#160;</div><div class="line"><a name="l11587"></a><span class="lineno">11587</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l11588"></a><span class="lineno">11588</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l11589"></a><span class="lineno">11589</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l11590"></a><span class="lineno">11590</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l11591"></a><span class="lineno">11591</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l11592"></a><span class="lineno">11592</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l11593"></a><span class="lineno">11593</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l11594"></a><span class="lineno">11594</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l11595"></a><span class="lineno">11595</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l11596"></a><span class="lineno">11596</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l11597"></a><span class="lineno">11597</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l11598"></a><span class="lineno">11598</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l11599"></a><span class="lineno">11599</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l11600"></a><span class="lineno">11600</span>&#160; }; <span class="comment">// class CartesianProductGenerator3::Iterator</span></div><div class="line"><a name="l11601"></a><span class="lineno">11601</span>&#160;</div><div class="line"><a name="l11602"></a><span class="lineno">11602</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11603"></a><span class="lineno">11603</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#afdca1e94b01f654564b9cbe66fb5ca94">CartesianProductGenerator3</a>&amp; other);</div><div class="line"><a name="l11604"></a><span class="lineno">11604</span>&#160;</div><div class="line"><a name="l11605"></a><span class="lineno">11605</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l11606"></a><span class="lineno">11606</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l11607"></a><span class="lineno">11607</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l11608"></a><span class="lineno">11608</span>&#160;}; <span class="comment">// class CartesianProductGenerator3</span></div><div class="line"><a name="l11609"></a><span class="lineno">11609</span>&#160;</div><div class="line"><a name="l11610"></a><span class="lineno">11610</span>&#160;</div><div class="line"><a name="l11611"></a><span class="lineno">11611</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4&gt;</div><div class="line"><a name="l11612"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html">11612</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html">CartesianProductGenerator4</a></div><div class="line"><a name="l11613"></a><span class="lineno">11613</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4&gt; &gt; {</div><div class="line"><a name="l11614"></a><span class="lineno">11614</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11615"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ab5e2480f7abacb80850de470c3225412">11615</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ab5e2480f7abacb80850de470c3225412">ParamType</a>;</div><div class="line"><a name="l11616"></a><span class="lineno">11616</span>&#160;</div><div class="line"><a name="l11617"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a4e4512b35f0d71f7a718ded6fe829296">11617</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a4e4512b35f0d71f7a718ded6fe829296">CartesianProductGenerator4</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11618"></a><span class="lineno">11618</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11619"></a><span class="lineno">11619</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4)</div><div class="line"><a name="l11620"></a><span class="lineno">11620</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}</div><div class="line"><a name="l11621"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a75d7d9ee7bae873295df5d4dbec6a165">11621</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a75d7d9ee7bae873295df5d4dbec6a165">~CartesianProductGenerator4</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11622"></a><span class="lineno">11622</span>&#160;</div><div class="line"><a name="l11623"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae04bf9d551c6dc3996d18e90e88f4bfd">11623</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae04bf9d551c6dc3996d18e90e88f4bfd">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11624"></a><span class="lineno">11624</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l11625"></a><span class="lineno">11625</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l11626"></a><span class="lineno">11626</span>&#160; }</div><div class="line"><a name="l11627"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae25a27430e476014a2f07c0be4f030f7">11627</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae25a27430e476014a2f07c0be4f030f7">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11628"></a><span class="lineno">11628</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l11629"></a><span class="lineno">11629</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l11630"></a><span class="lineno">11630</span>&#160; }</div><div class="line"><a name="l11631"></a><span class="lineno">11631</span>&#160;</div><div class="line"><a name="l11632"></a><span class="lineno">11632</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11633"></a><span class="lineno">11633</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l11634"></a><span class="lineno">11634</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11635"></a><span class="lineno">11635</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l11636"></a><span class="lineno">11636</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11637"></a><span class="lineno">11637</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l11638"></a><span class="lineno">11638</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l11639"></a><span class="lineno">11639</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l11640"></a><span class="lineno">11640</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11641"></a><span class="lineno">11641</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l11642"></a><span class="lineno">11642</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l11643"></a><span class="lineno">11643</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4)</div><div class="line"><a name="l11644"></a><span class="lineno">11644</span>&#160; : base_(base),</div><div class="line"><a name="l11645"></a><span class="lineno">11645</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l11646"></a><span class="lineno">11646</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l11647"></a><span class="lineno">11647</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l11648"></a><span class="lineno">11648</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {</div><div class="line"><a name="l11649"></a><span class="lineno">11649</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11650"></a><span class="lineno">11650</span>&#160; }</div><div class="line"><a name="l11651"></a><span class="lineno">11651</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11652"></a><span class="lineno">11652</span>&#160;</div><div class="line"><a name="l11653"></a><span class="lineno">11653</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11654"></a><span class="lineno">11654</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l11655"></a><span class="lineno">11655</span>&#160; }</div><div class="line"><a name="l11656"></a><span class="lineno">11656</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l11657"></a><span class="lineno">11657</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l11658"></a><span class="lineno">11658</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l11659"></a><span class="lineno">11659</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l11660"></a><span class="lineno">11660</span>&#160; ++current4_;</div><div class="line"><a name="l11661"></a><span class="lineno">11661</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l11662"></a><span class="lineno">11662</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l11663"></a><span class="lineno">11663</span>&#160; ++current3_;</div><div class="line"><a name="l11664"></a><span class="lineno">11664</span>&#160; }</div><div class="line"><a name="l11665"></a><span class="lineno">11665</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l11666"></a><span class="lineno">11666</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l11667"></a><span class="lineno">11667</span>&#160; ++current2_;</div><div class="line"><a name="l11668"></a><span class="lineno">11668</span>&#160; }</div><div class="line"><a name="l11669"></a><span class="lineno">11669</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l11670"></a><span class="lineno">11670</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l11671"></a><span class="lineno">11671</span>&#160; ++current1_;</div><div class="line"><a name="l11672"></a><span class="lineno">11672</span>&#160; }</div><div class="line"><a name="l11673"></a><span class="lineno">11673</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11674"></a><span class="lineno">11674</span>&#160; }</div><div class="line"><a name="l11675"></a><span class="lineno">11675</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11676"></a><span class="lineno">11676</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l11677"></a><span class="lineno">11677</span>&#160; }</div><div class="line"><a name="l11678"></a><span class="lineno">11678</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ab5e2480f7abacb80850de470c3225412">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l11679"></a><span class="lineno">11679</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l11680"></a><span class="lineno">11680</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l11681"></a><span class="lineno">11681</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l11682"></a><span class="lineno">11682</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l11683"></a><span class="lineno">11683</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l11684"></a><span class="lineno">11684</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l11685"></a><span class="lineno">11685</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l11686"></a><span class="lineno">11686</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l11687"></a><span class="lineno">11687</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l11688"></a><span class="lineno">11688</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l11689"></a><span class="lineno">11689</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l11690"></a><span class="lineno">11690</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l11691"></a><span class="lineno">11691</span>&#160; (</div><div class="line"><a name="l11692"></a><span class="lineno">11692</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l11693"></a><span class="lineno">11693</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l11694"></a><span class="lineno">11694</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l11695"></a><span class="lineno">11695</span>&#160; current4_ == typed_other-&gt;current4_);</div><div class="line"><a name="l11696"></a><span class="lineno">11696</span>&#160; }</div><div class="line"><a name="l11697"></a><span class="lineno">11697</span>&#160;</div><div class="line"><a name="l11698"></a><span class="lineno">11698</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11699"></a><span class="lineno">11699</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l11700"></a><span class="lineno">11700</span>&#160; : base_(other.base_),</div><div class="line"><a name="l11701"></a><span class="lineno">11701</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l11702"></a><span class="lineno">11702</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l11703"></a><span class="lineno">11703</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l11704"></a><span class="lineno">11704</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l11705"></a><span class="lineno">11705</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l11706"></a><span class="lineno">11706</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l11707"></a><span class="lineno">11707</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l11708"></a><span class="lineno">11708</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l11709"></a><span class="lineno">11709</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l11710"></a><span class="lineno">11710</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l11711"></a><span class="lineno">11711</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l11712"></a><span class="lineno">11712</span>&#160; current4_(other.current4_) {</div><div class="line"><a name="l11713"></a><span class="lineno">11713</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11714"></a><span class="lineno">11714</span>&#160; }</div><div class="line"><a name="l11715"></a><span class="lineno">11715</span>&#160;</div><div class="line"><a name="l11716"></a><span class="lineno">11716</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l11717"></a><span class="lineno">11717</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l11718"></a><span class="lineno">11718</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ab5e2480f7abacb80850de470c3225412">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l11719"></a><span class="lineno">11719</span>&#160; *current4_));</div><div class="line"><a name="l11720"></a><span class="lineno">11720</span>&#160; }</div><div class="line"><a name="l11721"></a><span class="lineno">11721</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l11722"></a><span class="lineno">11722</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l11723"></a><span class="lineno">11723</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l11724"></a><span class="lineno">11724</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l11725"></a><span class="lineno">11725</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l11726"></a><span class="lineno">11726</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l11727"></a><span class="lineno">11727</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l11728"></a><span class="lineno">11728</span>&#160; current4_ == end4_;</div><div class="line"><a name="l11729"></a><span class="lineno">11729</span>&#160; }</div><div class="line"><a name="l11730"></a><span class="lineno">11730</span>&#160;</div><div class="line"><a name="l11731"></a><span class="lineno">11731</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11732"></a><span class="lineno">11732</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l11733"></a><span class="lineno">11733</span>&#160;</div><div class="line"><a name="l11734"></a><span class="lineno">11734</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l11735"></a><span class="lineno">11735</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l11736"></a><span class="lineno">11736</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l11737"></a><span class="lineno">11737</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l11738"></a><span class="lineno">11738</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l11739"></a><span class="lineno">11739</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l11740"></a><span class="lineno">11740</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l11741"></a><span class="lineno">11741</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l11742"></a><span class="lineno">11742</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l11743"></a><span class="lineno">11743</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l11744"></a><span class="lineno">11744</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l11745"></a><span class="lineno">11745</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l11746"></a><span class="lineno">11746</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l11747"></a><span class="lineno">11747</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l11748"></a><span class="lineno">11748</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l11749"></a><span class="lineno">11749</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l11750"></a><span class="lineno">11750</span>&#160; }; <span class="comment">// class CartesianProductGenerator4::Iterator</span></div><div class="line"><a name="l11751"></a><span class="lineno">11751</span>&#160;</div><div class="line"><a name="l11752"></a><span class="lineno">11752</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11753"></a><span class="lineno">11753</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a4e4512b35f0d71f7a718ded6fe829296">CartesianProductGenerator4</a>&amp; other);</div><div class="line"><a name="l11754"></a><span class="lineno">11754</span>&#160;</div><div class="line"><a name="l11755"></a><span class="lineno">11755</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l11756"></a><span class="lineno">11756</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l11757"></a><span class="lineno">11757</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l11758"></a><span class="lineno">11758</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l11759"></a><span class="lineno">11759</span>&#160;}; <span class="comment">// class CartesianProductGenerator4</span></div><div class="line"><a name="l11760"></a><span class="lineno">11760</span>&#160;</div><div class="line"><a name="l11761"></a><span class="lineno">11761</span>&#160;</div><div class="line"><a name="l11762"></a><span class="lineno">11762</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5&gt;</div><div class="line"><a name="l11763"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html">11763</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html">CartesianProductGenerator5</a></div><div class="line"><a name="l11764"></a><span class="lineno">11764</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5&gt; &gt; {</div><div class="line"><a name="l11765"></a><span class="lineno">11765</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11766"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a381a9c3c18106872251acffe59453a95">11766</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a381a9c3c18106872251acffe59453a95">ParamType</a>;</div><div class="line"><a name="l11767"></a><span class="lineno">11767</span>&#160;</div><div class="line"><a name="l11768"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#ab25fd0df9d6325f10f218c3b7553820d">11768</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#ab25fd0df9d6325f10f218c3b7553820d">CartesianProductGenerator5</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11769"></a><span class="lineno">11769</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11770"></a><span class="lineno">11770</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5)</div><div class="line"><a name="l11771"></a><span class="lineno">11771</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}</div><div class="line"><a name="l11772"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a13453a5614cda6c4d4b09011daa37800">11772</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a13453a5614cda6c4d4b09011daa37800">~CartesianProductGenerator5</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11773"></a><span class="lineno">11773</span>&#160;</div><div class="line"><a name="l11774"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#aadf6e9a6638c07af046c489b78aed214">11774</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#aadf6e9a6638c07af046c489b78aed214">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11775"></a><span class="lineno">11775</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l11776"></a><span class="lineno">11776</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l11777"></a><span class="lineno">11777</span>&#160; }</div><div class="line"><a name="l11778"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#af1829ba003b0e7c3a463f87dacd4c3b2">11778</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#af1829ba003b0e7c3a463f87dacd4c3b2">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11779"></a><span class="lineno">11779</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l11780"></a><span class="lineno">11780</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l11781"></a><span class="lineno">11781</span>&#160; }</div><div class="line"><a name="l11782"></a><span class="lineno">11782</span>&#160;</div><div class="line"><a name="l11783"></a><span class="lineno">11783</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11784"></a><span class="lineno">11784</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l11785"></a><span class="lineno">11785</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11786"></a><span class="lineno">11786</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l11787"></a><span class="lineno">11787</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11788"></a><span class="lineno">11788</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l11789"></a><span class="lineno">11789</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l11790"></a><span class="lineno">11790</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l11791"></a><span class="lineno">11791</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11792"></a><span class="lineno">11792</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l11793"></a><span class="lineno">11793</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l11794"></a><span class="lineno">11794</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l11795"></a><span class="lineno">11795</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l11796"></a><span class="lineno">11796</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5)</div><div class="line"><a name="l11797"></a><span class="lineno">11797</span>&#160; : base_(base),</div><div class="line"><a name="l11798"></a><span class="lineno">11798</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l11799"></a><span class="lineno">11799</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l11800"></a><span class="lineno">11800</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l11801"></a><span class="lineno">11801</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l11802"></a><span class="lineno">11802</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {</div><div class="line"><a name="l11803"></a><span class="lineno">11803</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11804"></a><span class="lineno">11804</span>&#160; }</div><div class="line"><a name="l11805"></a><span class="lineno">11805</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11806"></a><span class="lineno">11806</span>&#160;</div><div class="line"><a name="l11807"></a><span class="lineno">11807</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11808"></a><span class="lineno">11808</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l11809"></a><span class="lineno">11809</span>&#160; }</div><div class="line"><a name="l11810"></a><span class="lineno">11810</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l11811"></a><span class="lineno">11811</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l11812"></a><span class="lineno">11812</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l11813"></a><span class="lineno">11813</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l11814"></a><span class="lineno">11814</span>&#160; ++current5_;</div><div class="line"><a name="l11815"></a><span class="lineno">11815</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l11816"></a><span class="lineno">11816</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l11817"></a><span class="lineno">11817</span>&#160; ++current4_;</div><div class="line"><a name="l11818"></a><span class="lineno">11818</span>&#160; }</div><div class="line"><a name="l11819"></a><span class="lineno">11819</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l11820"></a><span class="lineno">11820</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l11821"></a><span class="lineno">11821</span>&#160; ++current3_;</div><div class="line"><a name="l11822"></a><span class="lineno">11822</span>&#160; }</div><div class="line"><a name="l11823"></a><span class="lineno">11823</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l11824"></a><span class="lineno">11824</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l11825"></a><span class="lineno">11825</span>&#160; ++current2_;</div><div class="line"><a name="l11826"></a><span class="lineno">11826</span>&#160; }</div><div class="line"><a name="l11827"></a><span class="lineno">11827</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l11828"></a><span class="lineno">11828</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l11829"></a><span class="lineno">11829</span>&#160; ++current1_;</div><div class="line"><a name="l11830"></a><span class="lineno">11830</span>&#160; }</div><div class="line"><a name="l11831"></a><span class="lineno">11831</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11832"></a><span class="lineno">11832</span>&#160; }</div><div class="line"><a name="l11833"></a><span class="lineno">11833</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11834"></a><span class="lineno">11834</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l11835"></a><span class="lineno">11835</span>&#160; }</div><div class="line"><a name="l11836"></a><span class="lineno">11836</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a381a9c3c18106872251acffe59453a95">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l11837"></a><span class="lineno">11837</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l11838"></a><span class="lineno">11838</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l11839"></a><span class="lineno">11839</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l11840"></a><span class="lineno">11840</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l11841"></a><span class="lineno">11841</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l11842"></a><span class="lineno">11842</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l11843"></a><span class="lineno">11843</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l11844"></a><span class="lineno">11844</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l11845"></a><span class="lineno">11845</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l11846"></a><span class="lineno">11846</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l11847"></a><span class="lineno">11847</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l11848"></a><span class="lineno">11848</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l11849"></a><span class="lineno">11849</span>&#160; (</div><div class="line"><a name="l11850"></a><span class="lineno">11850</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l11851"></a><span class="lineno">11851</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l11852"></a><span class="lineno">11852</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l11853"></a><span class="lineno">11853</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l11854"></a><span class="lineno">11854</span>&#160; current5_ == typed_other-&gt;current5_);</div><div class="line"><a name="l11855"></a><span class="lineno">11855</span>&#160; }</div><div class="line"><a name="l11856"></a><span class="lineno">11856</span>&#160;</div><div class="line"><a name="l11857"></a><span class="lineno">11857</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11858"></a><span class="lineno">11858</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l11859"></a><span class="lineno">11859</span>&#160; : base_(other.base_),</div><div class="line"><a name="l11860"></a><span class="lineno">11860</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l11861"></a><span class="lineno">11861</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l11862"></a><span class="lineno">11862</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l11863"></a><span class="lineno">11863</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l11864"></a><span class="lineno">11864</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l11865"></a><span class="lineno">11865</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l11866"></a><span class="lineno">11866</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l11867"></a><span class="lineno">11867</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l11868"></a><span class="lineno">11868</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l11869"></a><span class="lineno">11869</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l11870"></a><span class="lineno">11870</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l11871"></a><span class="lineno">11871</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l11872"></a><span class="lineno">11872</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l11873"></a><span class="lineno">11873</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l11874"></a><span class="lineno">11874</span>&#160; current5_(other.current5_) {</div><div class="line"><a name="l11875"></a><span class="lineno">11875</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11876"></a><span class="lineno">11876</span>&#160; }</div><div class="line"><a name="l11877"></a><span class="lineno">11877</span>&#160;</div><div class="line"><a name="l11878"></a><span class="lineno">11878</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l11879"></a><span class="lineno">11879</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l11880"></a><span class="lineno">11880</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a381a9c3c18106872251acffe59453a95">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l11881"></a><span class="lineno">11881</span>&#160; *current4_, *current5_));</div><div class="line"><a name="l11882"></a><span class="lineno">11882</span>&#160; }</div><div class="line"><a name="l11883"></a><span class="lineno">11883</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l11884"></a><span class="lineno">11884</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l11885"></a><span class="lineno">11885</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l11886"></a><span class="lineno">11886</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l11887"></a><span class="lineno">11887</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l11888"></a><span class="lineno">11888</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l11889"></a><span class="lineno">11889</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l11890"></a><span class="lineno">11890</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l11891"></a><span class="lineno">11891</span>&#160; current5_ == end5_;</div><div class="line"><a name="l11892"></a><span class="lineno">11892</span>&#160; }</div><div class="line"><a name="l11893"></a><span class="lineno">11893</span>&#160;</div><div class="line"><a name="l11894"></a><span class="lineno">11894</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11895"></a><span class="lineno">11895</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l11896"></a><span class="lineno">11896</span>&#160;</div><div class="line"><a name="l11897"></a><span class="lineno">11897</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l11898"></a><span class="lineno">11898</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l11899"></a><span class="lineno">11899</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l11900"></a><span class="lineno">11900</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l11901"></a><span class="lineno">11901</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l11902"></a><span class="lineno">11902</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l11903"></a><span class="lineno">11903</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l11904"></a><span class="lineno">11904</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l11905"></a><span class="lineno">11905</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l11906"></a><span class="lineno">11906</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l11907"></a><span class="lineno">11907</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l11908"></a><span class="lineno">11908</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l11909"></a><span class="lineno">11909</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l11910"></a><span class="lineno">11910</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l11911"></a><span class="lineno">11911</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l11912"></a><span class="lineno">11912</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l11913"></a><span class="lineno">11913</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l11914"></a><span class="lineno">11914</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l11915"></a><span class="lineno">11915</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l11916"></a><span class="lineno">11916</span>&#160; }; <span class="comment">// class CartesianProductGenerator5::Iterator</span></div><div class="line"><a name="l11917"></a><span class="lineno">11917</span>&#160;</div><div class="line"><a name="l11918"></a><span class="lineno">11918</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l11919"></a><span class="lineno">11919</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#ab25fd0df9d6325f10f218c3b7553820d">CartesianProductGenerator5</a>&amp; other);</div><div class="line"><a name="l11920"></a><span class="lineno">11920</span>&#160;</div><div class="line"><a name="l11921"></a><span class="lineno">11921</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l11922"></a><span class="lineno">11922</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l11923"></a><span class="lineno">11923</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l11924"></a><span class="lineno">11924</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l11925"></a><span class="lineno">11925</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l11926"></a><span class="lineno">11926</span>&#160;}; <span class="comment">// class CartesianProductGenerator5</span></div><div class="line"><a name="l11927"></a><span class="lineno">11927</span>&#160;</div><div class="line"><a name="l11928"></a><span class="lineno">11928</span>&#160;</div><div class="line"><a name="l11929"></a><span class="lineno">11929</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l11930"></a><span class="lineno">11930</span>&#160; <span class="keyword">typename</span> T6&gt;</div><div class="line"><a name="l11931"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html">11931</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html">CartesianProductGenerator6</a></div><div class="line"><a name="l11932"></a><span class="lineno">11932</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6&gt; &gt; {</div><div class="line"><a name="l11933"></a><span class="lineno">11933</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11934"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#aa9d67ce7d77623ebb27053bb2f704c62">11934</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5, T6&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#aa9d67ce7d77623ebb27053bb2f704c62">ParamType</a>;</div><div class="line"><a name="l11935"></a><span class="lineno">11935</span>&#160;</div><div class="line"><a name="l11936"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6ff15d46e4ff7f8f24215b8244a6a094">11936</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6ff15d46e4ff7f8f24215b8244a6a094">CartesianProductGenerator6</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11937"></a><span class="lineno">11937</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11938"></a><span class="lineno">11938</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l11939"></a><span class="lineno">11939</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6)</div><div class="line"><a name="l11940"></a><span class="lineno">11940</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}</div><div class="line"><a name="l11941"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6d59c2e75fd2a0a042ee102e08956f7f">11941</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6d59c2e75fd2a0a042ee102e08956f7f">~CartesianProductGenerator6</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11942"></a><span class="lineno">11942</span>&#160;</div><div class="line"><a name="l11943"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#ae9a8a36d7d4a5270a21ffd38744bbfce">11943</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#ae9a8a36d7d4a5270a21ffd38744bbfce">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11944"></a><span class="lineno">11944</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l11945"></a><span class="lineno">11945</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l11946"></a><span class="lineno">11946</span>&#160; }</div><div class="line"><a name="l11947"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a952895ad20d5a89b913f80ad2f54391b">11947</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a952895ad20d5a89b913f80ad2f54391b">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11948"></a><span class="lineno">11948</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l11949"></a><span class="lineno">11949</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l11950"></a><span class="lineno">11950</span>&#160; }</div><div class="line"><a name="l11951"></a><span class="lineno">11951</span>&#160;</div><div class="line"><a name="l11952"></a><span class="lineno">11952</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l11953"></a><span class="lineno">11953</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l11954"></a><span class="lineno">11954</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l11955"></a><span class="lineno">11955</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l11956"></a><span class="lineno">11956</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l11957"></a><span class="lineno">11957</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l11958"></a><span class="lineno">11958</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l11959"></a><span class="lineno">11959</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l11960"></a><span class="lineno">11960</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l11961"></a><span class="lineno">11961</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l11962"></a><span class="lineno">11962</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l11963"></a><span class="lineno">11963</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l11964"></a><span class="lineno">11964</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l11965"></a><span class="lineno">11965</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5,</div><div class="line"><a name="l11966"></a><span class="lineno">11966</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6,</div><div class="line"><a name="l11967"></a><span class="lineno">11967</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;::iterator</a>&amp; current6)</div><div class="line"><a name="l11968"></a><span class="lineno">11968</span>&#160; : base_(base),</div><div class="line"><a name="l11969"></a><span class="lineno">11969</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l11970"></a><span class="lineno">11970</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l11971"></a><span class="lineno">11971</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l11972"></a><span class="lineno">11972</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l11973"></a><span class="lineno">11973</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5),</div><div class="line"><a name="l11974"></a><span class="lineno">11974</span>&#160; begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {</div><div class="line"><a name="l11975"></a><span class="lineno">11975</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l11976"></a><span class="lineno">11976</span>&#160; }</div><div class="line"><a name="l11977"></a><span class="lineno">11977</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l11978"></a><span class="lineno">11978</span>&#160;</div><div class="line"><a name="l11979"></a><span class="lineno">11979</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l11980"></a><span class="lineno">11980</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l11981"></a><span class="lineno">11981</span>&#160; }</div><div class="line"><a name="l11982"></a><span class="lineno">11982</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l11983"></a><span class="lineno">11983</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l11984"></a><span class="lineno">11984</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l11985"></a><span class="lineno">11985</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l11986"></a><span class="lineno">11986</span>&#160; ++current6_;</div><div class="line"><a name="l11987"></a><span class="lineno">11987</span>&#160; <span class="keywordflow">if</span> (current6_ == end6_) {</div><div class="line"><a name="l11988"></a><span class="lineno">11988</span>&#160; current6_ = begin6_;</div><div class="line"><a name="l11989"></a><span class="lineno">11989</span>&#160; ++current5_;</div><div class="line"><a name="l11990"></a><span class="lineno">11990</span>&#160; }</div><div class="line"><a name="l11991"></a><span class="lineno">11991</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l11992"></a><span class="lineno">11992</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l11993"></a><span class="lineno">11993</span>&#160; ++current4_;</div><div class="line"><a name="l11994"></a><span class="lineno">11994</span>&#160; }</div><div class="line"><a name="l11995"></a><span class="lineno">11995</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l11996"></a><span class="lineno">11996</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l11997"></a><span class="lineno">11997</span>&#160; ++current3_;</div><div class="line"><a name="l11998"></a><span class="lineno">11998</span>&#160; }</div><div class="line"><a name="l11999"></a><span class="lineno">11999</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l12000"></a><span class="lineno">12000</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l12001"></a><span class="lineno">12001</span>&#160; ++current2_;</div><div class="line"><a name="l12002"></a><span class="lineno">12002</span>&#160; }</div><div class="line"><a name="l12003"></a><span class="lineno">12003</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l12004"></a><span class="lineno">12004</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l12005"></a><span class="lineno">12005</span>&#160; ++current1_;</div><div class="line"><a name="l12006"></a><span class="lineno">12006</span>&#160; }</div><div class="line"><a name="l12007"></a><span class="lineno">12007</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12008"></a><span class="lineno">12008</span>&#160; }</div><div class="line"><a name="l12009"></a><span class="lineno">12009</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12010"></a><span class="lineno">12010</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l12011"></a><span class="lineno">12011</span>&#160; }</div><div class="line"><a name="l12012"></a><span class="lineno">12012</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#aa9d67ce7d77623ebb27053bb2f704c62">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l12013"></a><span class="lineno">12013</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l12014"></a><span class="lineno">12014</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l12015"></a><span class="lineno">12015</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l12016"></a><span class="lineno">12016</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l12017"></a><span class="lineno">12017</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l12018"></a><span class="lineno">12018</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l12019"></a><span class="lineno">12019</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l12020"></a><span class="lineno">12020</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l12021"></a><span class="lineno">12021</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l12022"></a><span class="lineno">12022</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l12023"></a><span class="lineno">12023</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l12024"></a><span class="lineno">12024</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l12025"></a><span class="lineno">12025</span>&#160; (</div><div class="line"><a name="l12026"></a><span class="lineno">12026</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l12027"></a><span class="lineno">12027</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l12028"></a><span class="lineno">12028</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l12029"></a><span class="lineno">12029</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l12030"></a><span class="lineno">12030</span>&#160; current5_ == typed_other-&gt;current5_ &amp;&amp;</div><div class="line"><a name="l12031"></a><span class="lineno">12031</span>&#160; current6_ == typed_other-&gt;current6_);</div><div class="line"><a name="l12032"></a><span class="lineno">12032</span>&#160; }</div><div class="line"><a name="l12033"></a><span class="lineno">12033</span>&#160;</div><div class="line"><a name="l12034"></a><span class="lineno">12034</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12035"></a><span class="lineno">12035</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l12036"></a><span class="lineno">12036</span>&#160; : base_(other.base_),</div><div class="line"><a name="l12037"></a><span class="lineno">12037</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l12038"></a><span class="lineno">12038</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l12039"></a><span class="lineno">12039</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l12040"></a><span class="lineno">12040</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l12041"></a><span class="lineno">12041</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l12042"></a><span class="lineno">12042</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l12043"></a><span class="lineno">12043</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l12044"></a><span class="lineno">12044</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l12045"></a><span class="lineno">12045</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l12046"></a><span class="lineno">12046</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l12047"></a><span class="lineno">12047</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l12048"></a><span class="lineno">12048</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l12049"></a><span class="lineno">12049</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l12050"></a><span class="lineno">12050</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l12051"></a><span class="lineno">12051</span>&#160; current5_(other.current5_),</div><div class="line"><a name="l12052"></a><span class="lineno">12052</span>&#160; begin6_(other.begin6_),</div><div class="line"><a name="l12053"></a><span class="lineno">12053</span>&#160; end6_(other.end6_),</div><div class="line"><a name="l12054"></a><span class="lineno">12054</span>&#160; current6_(other.current6_) {</div><div class="line"><a name="l12055"></a><span class="lineno">12055</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12056"></a><span class="lineno">12056</span>&#160; }</div><div class="line"><a name="l12057"></a><span class="lineno">12057</span>&#160;</div><div class="line"><a name="l12058"></a><span class="lineno">12058</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l12059"></a><span class="lineno">12059</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l12060"></a><span class="lineno">12060</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#aa9d67ce7d77623ebb27053bb2f704c62">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l12061"></a><span class="lineno">12061</span>&#160; *current4_, *current5_, *current6_));</div><div class="line"><a name="l12062"></a><span class="lineno">12062</span>&#160; }</div><div class="line"><a name="l12063"></a><span class="lineno">12063</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l12064"></a><span class="lineno">12064</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l12065"></a><span class="lineno">12065</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l12066"></a><span class="lineno">12066</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l12067"></a><span class="lineno">12067</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l12068"></a><span class="lineno">12068</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l12069"></a><span class="lineno">12069</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l12070"></a><span class="lineno">12070</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l12071"></a><span class="lineno">12071</span>&#160; current5_ == end5_ ||</div><div class="line"><a name="l12072"></a><span class="lineno">12072</span>&#160; current6_ == end6_;</div><div class="line"><a name="l12073"></a><span class="lineno">12073</span>&#160; }</div><div class="line"><a name="l12074"></a><span class="lineno">12074</span>&#160;</div><div class="line"><a name="l12075"></a><span class="lineno">12075</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12076"></a><span class="lineno">12076</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l12077"></a><span class="lineno">12077</span>&#160;</div><div class="line"><a name="l12078"></a><span class="lineno">12078</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l12079"></a><span class="lineno">12079</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l12080"></a><span class="lineno">12080</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l12081"></a><span class="lineno">12081</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l12082"></a><span class="lineno">12082</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l12083"></a><span class="lineno">12083</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l12084"></a><span class="lineno">12084</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l12085"></a><span class="lineno">12085</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l12086"></a><span class="lineno">12086</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l12087"></a><span class="lineno">12087</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l12088"></a><span class="lineno">12088</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l12089"></a><span class="lineno">12089</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l12090"></a><span class="lineno">12090</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l12091"></a><span class="lineno">12091</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l12092"></a><span class="lineno">12092</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l12093"></a><span class="lineno">12093</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l12094"></a><span class="lineno">12094</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l12095"></a><span class="lineno">12095</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l12096"></a><span class="lineno">12096</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> begin6_;</div><div class="line"><a name="l12097"></a><span class="lineno">12097</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> end6_;</div><div class="line"><a name="l12098"></a><span class="lineno">12098</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> current6_;</div><div class="line"><a name="l12099"></a><span class="lineno">12099</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l12100"></a><span class="lineno">12100</span>&#160; }; <span class="comment">// class CartesianProductGenerator6::Iterator</span></div><div class="line"><a name="l12101"></a><span class="lineno">12101</span>&#160;</div><div class="line"><a name="l12102"></a><span class="lineno">12102</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12103"></a><span class="lineno">12103</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6ff15d46e4ff7f8f24215b8244a6a094">CartesianProductGenerator6</a>&amp; other);</div><div class="line"><a name="l12104"></a><span class="lineno">12104</span>&#160;</div><div class="line"><a name="l12105"></a><span class="lineno">12105</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l12106"></a><span class="lineno">12106</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l12107"></a><span class="lineno">12107</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l12108"></a><span class="lineno">12108</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l12109"></a><span class="lineno">12109</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l12110"></a><span class="lineno">12110</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T6&gt; g6_;</div><div class="line"><a name="l12111"></a><span class="lineno">12111</span>&#160;}; <span class="comment">// class CartesianProductGenerator6</span></div><div class="line"><a name="l12112"></a><span class="lineno">12112</span>&#160;</div><div class="line"><a name="l12113"></a><span class="lineno">12113</span>&#160;</div><div class="line"><a name="l12114"></a><span class="lineno">12114</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l12115"></a><span class="lineno">12115</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7&gt;</div><div class="line"><a name="l12116"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html">12116</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html">CartesianProductGenerator7</a></div><div class="line"><a name="l12117"></a><span class="lineno">12117</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6,</div><div class="line"><a name="l12118"></a><span class="lineno">12118</span>&#160; T7&gt; &gt; {</div><div class="line"><a name="l12119"></a><span class="lineno">12119</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12120"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a1481728b2ece0109ac7897074d42a1f4">12120</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a1481728b2ece0109ac7897074d42a1f4">ParamType</a>;</div><div class="line"><a name="l12121"></a><span class="lineno">12121</span>&#160;</div><div class="line"><a name="l12122"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#aafc9c559223d3a685028ec98aa727818">12122</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#aafc9c559223d3a685028ec98aa727818">CartesianProductGenerator7</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12123"></a><span class="lineno">12123</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12124"></a><span class="lineno">12124</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12125"></a><span class="lineno">12125</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7)</div><div class="line"><a name="l12126"></a><span class="lineno">12126</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}</div><div class="line"><a name="l12127"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a242bc369feb56ff096b906c833403077">12127</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a242bc369feb56ff096b906c833403077">~CartesianProductGenerator7</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12128"></a><span class="lineno">12128</span>&#160;</div><div class="line"><a name="l12129"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#ac8b315cd7dbe5566d5ff98b04921b815">12129</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#ac8b315cd7dbe5566d5ff98b04921b815">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12130"></a><span class="lineno">12130</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l12131"></a><span class="lineno">12131</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g7_,</div><div class="line"><a name="l12132"></a><span class="lineno">12132</span>&#160; g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l12133"></a><span class="lineno">12133</span>&#160; }</div><div class="line"><a name="l12134"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a452dadb9cedbc18f539cfc98eb6e5b88">12134</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a452dadb9cedbc18f539cfc98eb6e5b88">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12135"></a><span class="lineno">12135</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l12136"></a><span class="lineno">12136</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g7_, g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l12137"></a><span class="lineno">12137</span>&#160; }</div><div class="line"><a name="l12138"></a><span class="lineno">12138</span>&#160;</div><div class="line"><a name="l12139"></a><span class="lineno">12139</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12140"></a><span class="lineno">12140</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l12141"></a><span class="lineno">12141</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12142"></a><span class="lineno">12142</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l12143"></a><span class="lineno">12143</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12144"></a><span class="lineno">12144</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l12145"></a><span class="lineno">12145</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l12146"></a><span class="lineno">12146</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l12147"></a><span class="lineno">12147</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12148"></a><span class="lineno">12148</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l12149"></a><span class="lineno">12149</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l12150"></a><span class="lineno">12150</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l12151"></a><span class="lineno">12151</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12152"></a><span class="lineno">12152</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5,</div><div class="line"><a name="l12153"></a><span class="lineno">12153</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6,</div><div class="line"><a name="l12154"></a><span class="lineno">12154</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;::iterator</a>&amp; current6,</div><div class="line"><a name="l12155"></a><span class="lineno">12155</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12156"></a><span class="lineno">12156</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;::iterator</a>&amp; current7)</div><div class="line"><a name="l12157"></a><span class="lineno">12157</span>&#160; : base_(base),</div><div class="line"><a name="l12158"></a><span class="lineno">12158</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l12159"></a><span class="lineno">12159</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l12160"></a><span class="lineno">12160</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l12161"></a><span class="lineno">12161</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l12162"></a><span class="lineno">12162</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5),</div><div class="line"><a name="l12163"></a><span class="lineno">12163</span>&#160; begin6_(g6.begin()), end6_(g6.end()), current6_(current6),</div><div class="line"><a name="l12164"></a><span class="lineno">12164</span>&#160; begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {</div><div class="line"><a name="l12165"></a><span class="lineno">12165</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12166"></a><span class="lineno">12166</span>&#160; }</div><div class="line"><a name="l12167"></a><span class="lineno">12167</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12168"></a><span class="lineno">12168</span>&#160;</div><div class="line"><a name="l12169"></a><span class="lineno">12169</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12170"></a><span class="lineno">12170</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l12171"></a><span class="lineno">12171</span>&#160; }</div><div class="line"><a name="l12172"></a><span class="lineno">12172</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l12173"></a><span class="lineno">12173</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l12174"></a><span class="lineno">12174</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l12175"></a><span class="lineno">12175</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l12176"></a><span class="lineno">12176</span>&#160; ++current7_;</div><div class="line"><a name="l12177"></a><span class="lineno">12177</span>&#160; <span class="keywordflow">if</span> (current7_ == end7_) {</div><div class="line"><a name="l12178"></a><span class="lineno">12178</span>&#160; current7_ = begin7_;</div><div class="line"><a name="l12179"></a><span class="lineno">12179</span>&#160; ++current6_;</div><div class="line"><a name="l12180"></a><span class="lineno">12180</span>&#160; }</div><div class="line"><a name="l12181"></a><span class="lineno">12181</span>&#160; <span class="keywordflow">if</span> (current6_ == end6_) {</div><div class="line"><a name="l12182"></a><span class="lineno">12182</span>&#160; current6_ = begin6_;</div><div class="line"><a name="l12183"></a><span class="lineno">12183</span>&#160; ++current5_;</div><div class="line"><a name="l12184"></a><span class="lineno">12184</span>&#160; }</div><div class="line"><a name="l12185"></a><span class="lineno">12185</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l12186"></a><span class="lineno">12186</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l12187"></a><span class="lineno">12187</span>&#160; ++current4_;</div><div class="line"><a name="l12188"></a><span class="lineno">12188</span>&#160; }</div><div class="line"><a name="l12189"></a><span class="lineno">12189</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l12190"></a><span class="lineno">12190</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l12191"></a><span class="lineno">12191</span>&#160; ++current3_;</div><div class="line"><a name="l12192"></a><span class="lineno">12192</span>&#160; }</div><div class="line"><a name="l12193"></a><span class="lineno">12193</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l12194"></a><span class="lineno">12194</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l12195"></a><span class="lineno">12195</span>&#160; ++current2_;</div><div class="line"><a name="l12196"></a><span class="lineno">12196</span>&#160; }</div><div class="line"><a name="l12197"></a><span class="lineno">12197</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l12198"></a><span class="lineno">12198</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l12199"></a><span class="lineno">12199</span>&#160; ++current1_;</div><div class="line"><a name="l12200"></a><span class="lineno">12200</span>&#160; }</div><div class="line"><a name="l12201"></a><span class="lineno">12201</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12202"></a><span class="lineno">12202</span>&#160; }</div><div class="line"><a name="l12203"></a><span class="lineno">12203</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12204"></a><span class="lineno">12204</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l12205"></a><span class="lineno">12205</span>&#160; }</div><div class="line"><a name="l12206"></a><span class="lineno">12206</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a1481728b2ece0109ac7897074d42a1f4">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l12207"></a><span class="lineno">12207</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l12208"></a><span class="lineno">12208</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l12209"></a><span class="lineno">12209</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l12210"></a><span class="lineno">12210</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l12211"></a><span class="lineno">12211</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l12212"></a><span class="lineno">12212</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l12213"></a><span class="lineno">12213</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l12214"></a><span class="lineno">12214</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l12215"></a><span class="lineno">12215</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l12216"></a><span class="lineno">12216</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l12217"></a><span class="lineno">12217</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l12218"></a><span class="lineno">12218</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l12219"></a><span class="lineno">12219</span>&#160; (</div><div class="line"><a name="l12220"></a><span class="lineno">12220</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l12221"></a><span class="lineno">12221</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l12222"></a><span class="lineno">12222</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l12223"></a><span class="lineno">12223</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l12224"></a><span class="lineno">12224</span>&#160; current5_ == typed_other-&gt;current5_ &amp;&amp;</div><div class="line"><a name="l12225"></a><span class="lineno">12225</span>&#160; current6_ == typed_other-&gt;current6_ &amp;&amp;</div><div class="line"><a name="l12226"></a><span class="lineno">12226</span>&#160; current7_ == typed_other-&gt;current7_);</div><div class="line"><a name="l12227"></a><span class="lineno">12227</span>&#160; }</div><div class="line"><a name="l12228"></a><span class="lineno">12228</span>&#160;</div><div class="line"><a name="l12229"></a><span class="lineno">12229</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12230"></a><span class="lineno">12230</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l12231"></a><span class="lineno">12231</span>&#160; : base_(other.base_),</div><div class="line"><a name="l12232"></a><span class="lineno">12232</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l12233"></a><span class="lineno">12233</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l12234"></a><span class="lineno">12234</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l12235"></a><span class="lineno">12235</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l12236"></a><span class="lineno">12236</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l12237"></a><span class="lineno">12237</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l12238"></a><span class="lineno">12238</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l12239"></a><span class="lineno">12239</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l12240"></a><span class="lineno">12240</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l12241"></a><span class="lineno">12241</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l12242"></a><span class="lineno">12242</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l12243"></a><span class="lineno">12243</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l12244"></a><span class="lineno">12244</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l12245"></a><span class="lineno">12245</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l12246"></a><span class="lineno">12246</span>&#160; current5_(other.current5_),</div><div class="line"><a name="l12247"></a><span class="lineno">12247</span>&#160; begin6_(other.begin6_),</div><div class="line"><a name="l12248"></a><span class="lineno">12248</span>&#160; end6_(other.end6_),</div><div class="line"><a name="l12249"></a><span class="lineno">12249</span>&#160; current6_(other.current6_),</div><div class="line"><a name="l12250"></a><span class="lineno">12250</span>&#160; begin7_(other.begin7_),</div><div class="line"><a name="l12251"></a><span class="lineno">12251</span>&#160; end7_(other.end7_),</div><div class="line"><a name="l12252"></a><span class="lineno">12252</span>&#160; current7_(other.current7_) {</div><div class="line"><a name="l12253"></a><span class="lineno">12253</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12254"></a><span class="lineno">12254</span>&#160; }</div><div class="line"><a name="l12255"></a><span class="lineno">12255</span>&#160;</div><div class="line"><a name="l12256"></a><span class="lineno">12256</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l12257"></a><span class="lineno">12257</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l12258"></a><span class="lineno">12258</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a1481728b2ece0109ac7897074d42a1f4">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l12259"></a><span class="lineno">12259</span>&#160; *current4_, *current5_, *current6_, *current7_));</div><div class="line"><a name="l12260"></a><span class="lineno">12260</span>&#160; }</div><div class="line"><a name="l12261"></a><span class="lineno">12261</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l12262"></a><span class="lineno">12262</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l12263"></a><span class="lineno">12263</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l12264"></a><span class="lineno">12264</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l12265"></a><span class="lineno">12265</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l12266"></a><span class="lineno">12266</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l12267"></a><span class="lineno">12267</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l12268"></a><span class="lineno">12268</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l12269"></a><span class="lineno">12269</span>&#160; current5_ == end5_ ||</div><div class="line"><a name="l12270"></a><span class="lineno">12270</span>&#160; current6_ == end6_ ||</div><div class="line"><a name="l12271"></a><span class="lineno">12271</span>&#160; current7_ == end7_;</div><div class="line"><a name="l12272"></a><span class="lineno">12272</span>&#160; }</div><div class="line"><a name="l12273"></a><span class="lineno">12273</span>&#160;</div><div class="line"><a name="l12274"></a><span class="lineno">12274</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12275"></a><span class="lineno">12275</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l12276"></a><span class="lineno">12276</span>&#160;</div><div class="line"><a name="l12277"></a><span class="lineno">12277</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l12278"></a><span class="lineno">12278</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l12279"></a><span class="lineno">12279</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l12280"></a><span class="lineno">12280</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l12281"></a><span class="lineno">12281</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l12282"></a><span class="lineno">12282</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l12283"></a><span class="lineno">12283</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l12284"></a><span class="lineno">12284</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l12285"></a><span class="lineno">12285</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l12286"></a><span class="lineno">12286</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l12287"></a><span class="lineno">12287</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l12288"></a><span class="lineno">12288</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l12289"></a><span class="lineno">12289</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l12290"></a><span class="lineno">12290</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l12291"></a><span class="lineno">12291</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l12292"></a><span class="lineno">12292</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l12293"></a><span class="lineno">12293</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l12294"></a><span class="lineno">12294</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l12295"></a><span class="lineno">12295</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> begin6_;</div><div class="line"><a name="l12296"></a><span class="lineno">12296</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> end6_;</div><div class="line"><a name="l12297"></a><span class="lineno">12297</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> current6_;</div><div class="line"><a name="l12298"></a><span class="lineno">12298</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> begin7_;</div><div class="line"><a name="l12299"></a><span class="lineno">12299</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> end7_;</div><div class="line"><a name="l12300"></a><span class="lineno">12300</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> current7_;</div><div class="line"><a name="l12301"></a><span class="lineno">12301</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l12302"></a><span class="lineno">12302</span>&#160; }; <span class="comment">// class CartesianProductGenerator7::Iterator</span></div><div class="line"><a name="l12303"></a><span class="lineno">12303</span>&#160;</div><div class="line"><a name="l12304"></a><span class="lineno">12304</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12305"></a><span class="lineno">12305</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#aafc9c559223d3a685028ec98aa727818">CartesianProductGenerator7</a>&amp; other);</div><div class="line"><a name="l12306"></a><span class="lineno">12306</span>&#160;</div><div class="line"><a name="l12307"></a><span class="lineno">12307</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l12308"></a><span class="lineno">12308</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l12309"></a><span class="lineno">12309</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l12310"></a><span class="lineno">12310</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l12311"></a><span class="lineno">12311</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l12312"></a><span class="lineno">12312</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T6&gt; g6_;</div><div class="line"><a name="l12313"></a><span class="lineno">12313</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T7&gt; g7_;</div><div class="line"><a name="l12314"></a><span class="lineno">12314</span>&#160;}; <span class="comment">// class CartesianProductGenerator7</span></div><div class="line"><a name="l12315"></a><span class="lineno">12315</span>&#160;</div><div class="line"><a name="l12316"></a><span class="lineno">12316</span>&#160;</div><div class="line"><a name="l12317"></a><span class="lineno">12317</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l12318"></a><span class="lineno">12318</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8&gt;</div><div class="line"><a name="l12319"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html">12319</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html">CartesianProductGenerator8</a></div><div class="line"><a name="l12320"></a><span class="lineno">12320</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7,</div><div class="line"><a name="l12321"></a><span class="lineno">12321</span>&#160; T8&gt; &gt; {</div><div class="line"><a name="l12322"></a><span class="lineno">12322</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12323"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a75fc8856e032710e9efe753ad788dcf1">12323</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a75fc8856e032710e9efe753ad788dcf1">ParamType</a>;</div><div class="line"><a name="l12324"></a><span class="lineno">12324</span>&#160;</div><div class="line"><a name="l12325"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a07f33a7263f933d4fbabdb9e930d7f86">12325</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a07f33a7263f933d4fbabdb9e930d7f86">CartesianProductGenerator8</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12326"></a><span class="lineno">12326</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12327"></a><span class="lineno">12327</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12328"></a><span class="lineno">12328</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12329"></a><span class="lineno">12329</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8)</div><div class="line"><a name="l12330"></a><span class="lineno">12330</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),</div><div class="line"><a name="l12331"></a><span class="lineno">12331</span>&#160; g8_(g8) {}</div><div class="line"><a name="l12332"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#ab5e728b287d0d520e7281799a67189c7">12332</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#ab5e728b287d0d520e7281799a67189c7">~CartesianProductGenerator8</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12333"></a><span class="lineno">12333</span>&#160;</div><div class="line"><a name="l12334"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a707b5a6f598da1f6b997e3b1ad771aca">12334</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a707b5a6f598da1f6b997e3b1ad771aca">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12335"></a><span class="lineno">12335</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l12336"></a><span class="lineno">12336</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g7_,</div><div class="line"><a name="l12337"></a><span class="lineno">12337</span>&#160; g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g8_, g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l12338"></a><span class="lineno">12338</span>&#160; }</div><div class="line"><a name="l12339"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a1893e189b87ba1a7cc664dcd4d87a1fd">12339</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a1893e189b87ba1a7cc664dcd4d87a1fd">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12340"></a><span class="lineno">12340</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l12341"></a><span class="lineno">12341</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g7_, g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g8_,</div><div class="line"><a name="l12342"></a><span class="lineno">12342</span>&#160; g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l12343"></a><span class="lineno">12343</span>&#160; }</div><div class="line"><a name="l12344"></a><span class="lineno">12344</span>&#160;</div><div class="line"><a name="l12345"></a><span class="lineno">12345</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12346"></a><span class="lineno">12346</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l12347"></a><span class="lineno">12347</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12348"></a><span class="lineno">12348</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l12349"></a><span class="lineno">12349</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12350"></a><span class="lineno">12350</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l12351"></a><span class="lineno">12351</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l12352"></a><span class="lineno">12352</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l12353"></a><span class="lineno">12353</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12354"></a><span class="lineno">12354</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l12355"></a><span class="lineno">12355</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l12356"></a><span class="lineno">12356</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l12357"></a><span class="lineno">12357</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12358"></a><span class="lineno">12358</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5,</div><div class="line"><a name="l12359"></a><span class="lineno">12359</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6,</div><div class="line"><a name="l12360"></a><span class="lineno">12360</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;::iterator</a>&amp; current6,</div><div class="line"><a name="l12361"></a><span class="lineno">12361</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12362"></a><span class="lineno">12362</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;::iterator</a>&amp; current7,</div><div class="line"><a name="l12363"></a><span class="lineno">12363</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8,</div><div class="line"><a name="l12364"></a><span class="lineno">12364</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;::iterator</a>&amp; current8)</div><div class="line"><a name="l12365"></a><span class="lineno">12365</span>&#160; : base_(base),</div><div class="line"><a name="l12366"></a><span class="lineno">12366</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l12367"></a><span class="lineno">12367</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l12368"></a><span class="lineno">12368</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l12369"></a><span class="lineno">12369</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l12370"></a><span class="lineno">12370</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5),</div><div class="line"><a name="l12371"></a><span class="lineno">12371</span>&#160; begin6_(g6.begin()), end6_(g6.end()), current6_(current6),</div><div class="line"><a name="l12372"></a><span class="lineno">12372</span>&#160; begin7_(g7.begin()), end7_(g7.end()), current7_(current7),</div><div class="line"><a name="l12373"></a><span class="lineno">12373</span>&#160; begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {</div><div class="line"><a name="l12374"></a><span class="lineno">12374</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12375"></a><span class="lineno">12375</span>&#160; }</div><div class="line"><a name="l12376"></a><span class="lineno">12376</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12377"></a><span class="lineno">12377</span>&#160;</div><div class="line"><a name="l12378"></a><span class="lineno">12378</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12379"></a><span class="lineno">12379</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l12380"></a><span class="lineno">12380</span>&#160; }</div><div class="line"><a name="l12381"></a><span class="lineno">12381</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l12382"></a><span class="lineno">12382</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l12383"></a><span class="lineno">12383</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l12384"></a><span class="lineno">12384</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l12385"></a><span class="lineno">12385</span>&#160; ++current8_;</div><div class="line"><a name="l12386"></a><span class="lineno">12386</span>&#160; <span class="keywordflow">if</span> (current8_ == end8_) {</div><div class="line"><a name="l12387"></a><span class="lineno">12387</span>&#160; current8_ = begin8_;</div><div class="line"><a name="l12388"></a><span class="lineno">12388</span>&#160; ++current7_;</div><div class="line"><a name="l12389"></a><span class="lineno">12389</span>&#160; }</div><div class="line"><a name="l12390"></a><span class="lineno">12390</span>&#160; <span class="keywordflow">if</span> (current7_ == end7_) {</div><div class="line"><a name="l12391"></a><span class="lineno">12391</span>&#160; current7_ = begin7_;</div><div class="line"><a name="l12392"></a><span class="lineno">12392</span>&#160; ++current6_;</div><div class="line"><a name="l12393"></a><span class="lineno">12393</span>&#160; }</div><div class="line"><a name="l12394"></a><span class="lineno">12394</span>&#160; <span class="keywordflow">if</span> (current6_ == end6_) {</div><div class="line"><a name="l12395"></a><span class="lineno">12395</span>&#160; current6_ = begin6_;</div><div class="line"><a name="l12396"></a><span class="lineno">12396</span>&#160; ++current5_;</div><div class="line"><a name="l12397"></a><span class="lineno">12397</span>&#160; }</div><div class="line"><a name="l12398"></a><span class="lineno">12398</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l12399"></a><span class="lineno">12399</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l12400"></a><span class="lineno">12400</span>&#160; ++current4_;</div><div class="line"><a name="l12401"></a><span class="lineno">12401</span>&#160; }</div><div class="line"><a name="l12402"></a><span class="lineno">12402</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l12403"></a><span class="lineno">12403</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l12404"></a><span class="lineno">12404</span>&#160; ++current3_;</div><div class="line"><a name="l12405"></a><span class="lineno">12405</span>&#160; }</div><div class="line"><a name="l12406"></a><span class="lineno">12406</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l12407"></a><span class="lineno">12407</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l12408"></a><span class="lineno">12408</span>&#160; ++current2_;</div><div class="line"><a name="l12409"></a><span class="lineno">12409</span>&#160; }</div><div class="line"><a name="l12410"></a><span class="lineno">12410</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l12411"></a><span class="lineno">12411</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l12412"></a><span class="lineno">12412</span>&#160; ++current1_;</div><div class="line"><a name="l12413"></a><span class="lineno">12413</span>&#160; }</div><div class="line"><a name="l12414"></a><span class="lineno">12414</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12415"></a><span class="lineno">12415</span>&#160; }</div><div class="line"><a name="l12416"></a><span class="lineno">12416</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12417"></a><span class="lineno">12417</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l12418"></a><span class="lineno">12418</span>&#160; }</div><div class="line"><a name="l12419"></a><span class="lineno">12419</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a75fc8856e032710e9efe753ad788dcf1">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l12420"></a><span class="lineno">12420</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l12421"></a><span class="lineno">12421</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l12422"></a><span class="lineno">12422</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l12423"></a><span class="lineno">12423</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l12424"></a><span class="lineno">12424</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l12425"></a><span class="lineno">12425</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l12426"></a><span class="lineno">12426</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l12427"></a><span class="lineno">12427</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l12428"></a><span class="lineno">12428</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l12429"></a><span class="lineno">12429</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l12430"></a><span class="lineno">12430</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l12431"></a><span class="lineno">12431</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l12432"></a><span class="lineno">12432</span>&#160; (</div><div class="line"><a name="l12433"></a><span class="lineno">12433</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l12434"></a><span class="lineno">12434</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l12435"></a><span class="lineno">12435</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l12436"></a><span class="lineno">12436</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l12437"></a><span class="lineno">12437</span>&#160; current5_ == typed_other-&gt;current5_ &amp;&amp;</div><div class="line"><a name="l12438"></a><span class="lineno">12438</span>&#160; current6_ == typed_other-&gt;current6_ &amp;&amp;</div><div class="line"><a name="l12439"></a><span class="lineno">12439</span>&#160; current7_ == typed_other-&gt;current7_ &amp;&amp;</div><div class="line"><a name="l12440"></a><span class="lineno">12440</span>&#160; current8_ == typed_other-&gt;current8_);</div><div class="line"><a name="l12441"></a><span class="lineno">12441</span>&#160; }</div><div class="line"><a name="l12442"></a><span class="lineno">12442</span>&#160;</div><div class="line"><a name="l12443"></a><span class="lineno">12443</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12444"></a><span class="lineno">12444</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l12445"></a><span class="lineno">12445</span>&#160; : base_(other.base_),</div><div class="line"><a name="l12446"></a><span class="lineno">12446</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l12447"></a><span class="lineno">12447</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l12448"></a><span class="lineno">12448</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l12449"></a><span class="lineno">12449</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l12450"></a><span class="lineno">12450</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l12451"></a><span class="lineno">12451</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l12452"></a><span class="lineno">12452</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l12453"></a><span class="lineno">12453</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l12454"></a><span class="lineno">12454</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l12455"></a><span class="lineno">12455</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l12456"></a><span class="lineno">12456</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l12457"></a><span class="lineno">12457</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l12458"></a><span class="lineno">12458</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l12459"></a><span class="lineno">12459</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l12460"></a><span class="lineno">12460</span>&#160; current5_(other.current5_),</div><div class="line"><a name="l12461"></a><span class="lineno">12461</span>&#160; begin6_(other.begin6_),</div><div class="line"><a name="l12462"></a><span class="lineno">12462</span>&#160; end6_(other.end6_),</div><div class="line"><a name="l12463"></a><span class="lineno">12463</span>&#160; current6_(other.current6_),</div><div class="line"><a name="l12464"></a><span class="lineno">12464</span>&#160; begin7_(other.begin7_),</div><div class="line"><a name="l12465"></a><span class="lineno">12465</span>&#160; end7_(other.end7_),</div><div class="line"><a name="l12466"></a><span class="lineno">12466</span>&#160; current7_(other.current7_),</div><div class="line"><a name="l12467"></a><span class="lineno">12467</span>&#160; begin8_(other.begin8_),</div><div class="line"><a name="l12468"></a><span class="lineno">12468</span>&#160; end8_(other.end8_),</div><div class="line"><a name="l12469"></a><span class="lineno">12469</span>&#160; current8_(other.current8_) {</div><div class="line"><a name="l12470"></a><span class="lineno">12470</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12471"></a><span class="lineno">12471</span>&#160; }</div><div class="line"><a name="l12472"></a><span class="lineno">12472</span>&#160;</div><div class="line"><a name="l12473"></a><span class="lineno">12473</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l12474"></a><span class="lineno">12474</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l12475"></a><span class="lineno">12475</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a75fc8856e032710e9efe753ad788dcf1">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l12476"></a><span class="lineno">12476</span>&#160; *current4_, *current5_, *current6_, *current7_, *current8_));</div><div class="line"><a name="l12477"></a><span class="lineno">12477</span>&#160; }</div><div class="line"><a name="l12478"></a><span class="lineno">12478</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l12479"></a><span class="lineno">12479</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l12480"></a><span class="lineno">12480</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l12481"></a><span class="lineno">12481</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l12482"></a><span class="lineno">12482</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l12483"></a><span class="lineno">12483</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l12484"></a><span class="lineno">12484</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l12485"></a><span class="lineno">12485</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l12486"></a><span class="lineno">12486</span>&#160; current5_ == end5_ ||</div><div class="line"><a name="l12487"></a><span class="lineno">12487</span>&#160; current6_ == end6_ ||</div><div class="line"><a name="l12488"></a><span class="lineno">12488</span>&#160; current7_ == end7_ ||</div><div class="line"><a name="l12489"></a><span class="lineno">12489</span>&#160; current8_ == end8_;</div><div class="line"><a name="l12490"></a><span class="lineno">12490</span>&#160; }</div><div class="line"><a name="l12491"></a><span class="lineno">12491</span>&#160;</div><div class="line"><a name="l12492"></a><span class="lineno">12492</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12493"></a><span class="lineno">12493</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l12494"></a><span class="lineno">12494</span>&#160;</div><div class="line"><a name="l12495"></a><span class="lineno">12495</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l12496"></a><span class="lineno">12496</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l12497"></a><span class="lineno">12497</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l12498"></a><span class="lineno">12498</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l12499"></a><span class="lineno">12499</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l12500"></a><span class="lineno">12500</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l12501"></a><span class="lineno">12501</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l12502"></a><span class="lineno">12502</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l12503"></a><span class="lineno">12503</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l12504"></a><span class="lineno">12504</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l12505"></a><span class="lineno">12505</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l12506"></a><span class="lineno">12506</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l12507"></a><span class="lineno">12507</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l12508"></a><span class="lineno">12508</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l12509"></a><span class="lineno">12509</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l12510"></a><span class="lineno">12510</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l12511"></a><span class="lineno">12511</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l12512"></a><span class="lineno">12512</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l12513"></a><span class="lineno">12513</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> begin6_;</div><div class="line"><a name="l12514"></a><span class="lineno">12514</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> end6_;</div><div class="line"><a name="l12515"></a><span class="lineno">12515</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> current6_;</div><div class="line"><a name="l12516"></a><span class="lineno">12516</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> begin7_;</div><div class="line"><a name="l12517"></a><span class="lineno">12517</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> end7_;</div><div class="line"><a name="l12518"></a><span class="lineno">12518</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> current7_;</div><div class="line"><a name="l12519"></a><span class="lineno">12519</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> begin8_;</div><div class="line"><a name="l12520"></a><span class="lineno">12520</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> end8_;</div><div class="line"><a name="l12521"></a><span class="lineno">12521</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> current8_;</div><div class="line"><a name="l12522"></a><span class="lineno">12522</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l12523"></a><span class="lineno">12523</span>&#160; }; <span class="comment">// class CartesianProductGenerator8::Iterator</span></div><div class="line"><a name="l12524"></a><span class="lineno">12524</span>&#160;</div><div class="line"><a name="l12525"></a><span class="lineno">12525</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12526"></a><span class="lineno">12526</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a07f33a7263f933d4fbabdb9e930d7f86">CartesianProductGenerator8</a>&amp; other);</div><div class="line"><a name="l12527"></a><span class="lineno">12527</span>&#160;</div><div class="line"><a name="l12528"></a><span class="lineno">12528</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l12529"></a><span class="lineno">12529</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l12530"></a><span class="lineno">12530</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l12531"></a><span class="lineno">12531</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l12532"></a><span class="lineno">12532</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l12533"></a><span class="lineno">12533</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T6&gt; g6_;</div><div class="line"><a name="l12534"></a><span class="lineno">12534</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T7&gt; g7_;</div><div class="line"><a name="l12535"></a><span class="lineno">12535</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T8&gt; g8_;</div><div class="line"><a name="l12536"></a><span class="lineno">12536</span>&#160;}; <span class="comment">// class CartesianProductGenerator8</span></div><div class="line"><a name="l12537"></a><span class="lineno">12537</span>&#160;</div><div class="line"><a name="l12538"></a><span class="lineno">12538</span>&#160;</div><div class="line"><a name="l12539"></a><span class="lineno">12539</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l12540"></a><span class="lineno">12540</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9&gt;</div><div class="line"><a name="l12541"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html">12541</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html">CartesianProductGenerator9</a></div><div class="line"><a name="l12542"></a><span class="lineno">12542</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7,</div><div class="line"><a name="l12543"></a><span class="lineno">12543</span>&#160; T8, T9&gt; &gt; {</div><div class="line"><a name="l12544"></a><span class="lineno">12544</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12545"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a86742cdf8f015ff11f7a40f0b66179c7">12545</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a86742cdf8f015ff11f7a40f0b66179c7">ParamType</a>;</div><div class="line"><a name="l12546"></a><span class="lineno">12546</span>&#160;</div><div class="line"><a name="l12547"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#aff06c7992c06297c6bf5ad5eb56534e9">12547</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#aff06c7992c06297c6bf5ad5eb56534e9">CartesianProductGenerator9</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12548"></a><span class="lineno">12548</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12549"></a><span class="lineno">12549</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12550"></a><span class="lineno">12550</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12551"></a><span class="lineno">12551</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a>&amp; g9)</div><div class="line"><a name="l12552"></a><span class="lineno">12552</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),</div><div class="line"><a name="l12553"></a><span class="lineno">12553</span>&#160; g9_(g9) {}</div><div class="line"><a name="l12554"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#ab1b886bfb8c9c2c575ee4f9da61e3180">12554</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#ab1b886bfb8c9c2c575ee4f9da61e3180">~CartesianProductGenerator9</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12555"></a><span class="lineno">12555</span>&#160;</div><div class="line"><a name="l12556"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a8fc8d5664560c3a788fe51903f896429">12556</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a8fc8d5664560c3a788fe51903f896429">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12557"></a><span class="lineno">12557</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l12558"></a><span class="lineno">12558</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g7_,</div><div class="line"><a name="l12559"></a><span class="lineno">12559</span>&#160; g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g8_, g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g9_, g9_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l12560"></a><span class="lineno">12560</span>&#160; }</div><div class="line"><a name="l12561"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a60476505c616957d1a04a31d1635df6d">12561</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a60476505c616957d1a04a31d1635df6d">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12562"></a><span class="lineno">12562</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l12563"></a><span class="lineno">12563</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g7_, g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g8_,</div><div class="line"><a name="l12564"></a><span class="lineno">12564</span>&#160; g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g9_, g9_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l12565"></a><span class="lineno">12565</span>&#160; }</div><div class="line"><a name="l12566"></a><span class="lineno">12566</span>&#160;</div><div class="line"><a name="l12567"></a><span class="lineno">12567</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12568"></a><span class="lineno">12568</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l12569"></a><span class="lineno">12569</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12570"></a><span class="lineno">12570</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l12571"></a><span class="lineno">12571</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12572"></a><span class="lineno">12572</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l12573"></a><span class="lineno">12573</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l12574"></a><span class="lineno">12574</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l12575"></a><span class="lineno">12575</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12576"></a><span class="lineno">12576</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l12577"></a><span class="lineno">12577</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l12578"></a><span class="lineno">12578</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l12579"></a><span class="lineno">12579</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12580"></a><span class="lineno">12580</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5,</div><div class="line"><a name="l12581"></a><span class="lineno">12581</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6,</div><div class="line"><a name="l12582"></a><span class="lineno">12582</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;::iterator</a>&amp; current6,</div><div class="line"><a name="l12583"></a><span class="lineno">12583</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12584"></a><span class="lineno">12584</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;::iterator</a>&amp; current7,</div><div class="line"><a name="l12585"></a><span class="lineno">12585</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8,</div><div class="line"><a name="l12586"></a><span class="lineno">12586</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;::iterator</a>&amp; current8,</div><div class="line"><a name="l12587"></a><span class="lineno">12587</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a>&amp; g9,</div><div class="line"><a name="l12588"></a><span class="lineno">12588</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;::iterator</a>&amp; current9)</div><div class="line"><a name="l12589"></a><span class="lineno">12589</span>&#160; : base_(base),</div><div class="line"><a name="l12590"></a><span class="lineno">12590</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l12591"></a><span class="lineno">12591</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l12592"></a><span class="lineno">12592</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l12593"></a><span class="lineno">12593</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l12594"></a><span class="lineno">12594</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5),</div><div class="line"><a name="l12595"></a><span class="lineno">12595</span>&#160; begin6_(g6.begin()), end6_(g6.end()), current6_(current6),</div><div class="line"><a name="l12596"></a><span class="lineno">12596</span>&#160; begin7_(g7.begin()), end7_(g7.end()), current7_(current7),</div><div class="line"><a name="l12597"></a><span class="lineno">12597</span>&#160; begin8_(g8.begin()), end8_(g8.end()), current8_(current8),</div><div class="line"><a name="l12598"></a><span class="lineno">12598</span>&#160; begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {</div><div class="line"><a name="l12599"></a><span class="lineno">12599</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12600"></a><span class="lineno">12600</span>&#160; }</div><div class="line"><a name="l12601"></a><span class="lineno">12601</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12602"></a><span class="lineno">12602</span>&#160;</div><div class="line"><a name="l12603"></a><span class="lineno">12603</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12604"></a><span class="lineno">12604</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l12605"></a><span class="lineno">12605</span>&#160; }</div><div class="line"><a name="l12606"></a><span class="lineno">12606</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l12607"></a><span class="lineno">12607</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l12608"></a><span class="lineno">12608</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l12609"></a><span class="lineno">12609</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l12610"></a><span class="lineno">12610</span>&#160; ++current9_;</div><div class="line"><a name="l12611"></a><span class="lineno">12611</span>&#160; <span class="keywordflow">if</span> (current9_ == end9_) {</div><div class="line"><a name="l12612"></a><span class="lineno">12612</span>&#160; current9_ = begin9_;</div><div class="line"><a name="l12613"></a><span class="lineno">12613</span>&#160; ++current8_;</div><div class="line"><a name="l12614"></a><span class="lineno">12614</span>&#160; }</div><div class="line"><a name="l12615"></a><span class="lineno">12615</span>&#160; <span class="keywordflow">if</span> (current8_ == end8_) {</div><div class="line"><a name="l12616"></a><span class="lineno">12616</span>&#160; current8_ = begin8_;</div><div class="line"><a name="l12617"></a><span class="lineno">12617</span>&#160; ++current7_;</div><div class="line"><a name="l12618"></a><span class="lineno">12618</span>&#160; }</div><div class="line"><a name="l12619"></a><span class="lineno">12619</span>&#160; <span class="keywordflow">if</span> (current7_ == end7_) {</div><div class="line"><a name="l12620"></a><span class="lineno">12620</span>&#160; current7_ = begin7_;</div><div class="line"><a name="l12621"></a><span class="lineno">12621</span>&#160; ++current6_;</div><div class="line"><a name="l12622"></a><span class="lineno">12622</span>&#160; }</div><div class="line"><a name="l12623"></a><span class="lineno">12623</span>&#160; <span class="keywordflow">if</span> (current6_ == end6_) {</div><div class="line"><a name="l12624"></a><span class="lineno">12624</span>&#160; current6_ = begin6_;</div><div class="line"><a name="l12625"></a><span class="lineno">12625</span>&#160; ++current5_;</div><div class="line"><a name="l12626"></a><span class="lineno">12626</span>&#160; }</div><div class="line"><a name="l12627"></a><span class="lineno">12627</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l12628"></a><span class="lineno">12628</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l12629"></a><span class="lineno">12629</span>&#160; ++current4_;</div><div class="line"><a name="l12630"></a><span class="lineno">12630</span>&#160; }</div><div class="line"><a name="l12631"></a><span class="lineno">12631</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l12632"></a><span class="lineno">12632</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l12633"></a><span class="lineno">12633</span>&#160; ++current3_;</div><div class="line"><a name="l12634"></a><span class="lineno">12634</span>&#160; }</div><div class="line"><a name="l12635"></a><span class="lineno">12635</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l12636"></a><span class="lineno">12636</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l12637"></a><span class="lineno">12637</span>&#160; ++current2_;</div><div class="line"><a name="l12638"></a><span class="lineno">12638</span>&#160; }</div><div class="line"><a name="l12639"></a><span class="lineno">12639</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l12640"></a><span class="lineno">12640</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l12641"></a><span class="lineno">12641</span>&#160; ++current1_;</div><div class="line"><a name="l12642"></a><span class="lineno">12642</span>&#160; }</div><div class="line"><a name="l12643"></a><span class="lineno">12643</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12644"></a><span class="lineno">12644</span>&#160; }</div><div class="line"><a name="l12645"></a><span class="lineno">12645</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12646"></a><span class="lineno">12646</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l12647"></a><span class="lineno">12647</span>&#160; }</div><div class="line"><a name="l12648"></a><span class="lineno">12648</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a86742cdf8f015ff11f7a40f0b66179c7">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l12649"></a><span class="lineno">12649</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l12650"></a><span class="lineno">12650</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l12651"></a><span class="lineno">12651</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l12652"></a><span class="lineno">12652</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l12653"></a><span class="lineno">12653</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l12654"></a><span class="lineno">12654</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l12655"></a><span class="lineno">12655</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l12656"></a><span class="lineno">12656</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l12657"></a><span class="lineno">12657</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l12658"></a><span class="lineno">12658</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l12659"></a><span class="lineno">12659</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l12660"></a><span class="lineno">12660</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l12661"></a><span class="lineno">12661</span>&#160; (</div><div class="line"><a name="l12662"></a><span class="lineno">12662</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l12663"></a><span class="lineno">12663</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l12664"></a><span class="lineno">12664</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l12665"></a><span class="lineno">12665</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l12666"></a><span class="lineno">12666</span>&#160; current5_ == typed_other-&gt;current5_ &amp;&amp;</div><div class="line"><a name="l12667"></a><span class="lineno">12667</span>&#160; current6_ == typed_other-&gt;current6_ &amp;&amp;</div><div class="line"><a name="l12668"></a><span class="lineno">12668</span>&#160; current7_ == typed_other-&gt;current7_ &amp;&amp;</div><div class="line"><a name="l12669"></a><span class="lineno">12669</span>&#160; current8_ == typed_other-&gt;current8_ &amp;&amp;</div><div class="line"><a name="l12670"></a><span class="lineno">12670</span>&#160; current9_ == typed_other-&gt;current9_);</div><div class="line"><a name="l12671"></a><span class="lineno">12671</span>&#160; }</div><div class="line"><a name="l12672"></a><span class="lineno">12672</span>&#160;</div><div class="line"><a name="l12673"></a><span class="lineno">12673</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12674"></a><span class="lineno">12674</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l12675"></a><span class="lineno">12675</span>&#160; : base_(other.base_),</div><div class="line"><a name="l12676"></a><span class="lineno">12676</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l12677"></a><span class="lineno">12677</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l12678"></a><span class="lineno">12678</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l12679"></a><span class="lineno">12679</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l12680"></a><span class="lineno">12680</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l12681"></a><span class="lineno">12681</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l12682"></a><span class="lineno">12682</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l12683"></a><span class="lineno">12683</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l12684"></a><span class="lineno">12684</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l12685"></a><span class="lineno">12685</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l12686"></a><span class="lineno">12686</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l12687"></a><span class="lineno">12687</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l12688"></a><span class="lineno">12688</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l12689"></a><span class="lineno">12689</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l12690"></a><span class="lineno">12690</span>&#160; current5_(other.current5_),</div><div class="line"><a name="l12691"></a><span class="lineno">12691</span>&#160; begin6_(other.begin6_),</div><div class="line"><a name="l12692"></a><span class="lineno">12692</span>&#160; end6_(other.end6_),</div><div class="line"><a name="l12693"></a><span class="lineno">12693</span>&#160; current6_(other.current6_),</div><div class="line"><a name="l12694"></a><span class="lineno">12694</span>&#160; begin7_(other.begin7_),</div><div class="line"><a name="l12695"></a><span class="lineno">12695</span>&#160; end7_(other.end7_),</div><div class="line"><a name="l12696"></a><span class="lineno">12696</span>&#160; current7_(other.current7_),</div><div class="line"><a name="l12697"></a><span class="lineno">12697</span>&#160; begin8_(other.begin8_),</div><div class="line"><a name="l12698"></a><span class="lineno">12698</span>&#160; end8_(other.end8_),</div><div class="line"><a name="l12699"></a><span class="lineno">12699</span>&#160; current8_(other.current8_),</div><div class="line"><a name="l12700"></a><span class="lineno">12700</span>&#160; begin9_(other.begin9_),</div><div class="line"><a name="l12701"></a><span class="lineno">12701</span>&#160; end9_(other.end9_),</div><div class="line"><a name="l12702"></a><span class="lineno">12702</span>&#160; current9_(other.current9_) {</div><div class="line"><a name="l12703"></a><span class="lineno">12703</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12704"></a><span class="lineno">12704</span>&#160; }</div><div class="line"><a name="l12705"></a><span class="lineno">12705</span>&#160;</div><div class="line"><a name="l12706"></a><span class="lineno">12706</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l12707"></a><span class="lineno">12707</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l12708"></a><span class="lineno">12708</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a86742cdf8f015ff11f7a40f0b66179c7">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l12709"></a><span class="lineno">12709</span>&#160; *current4_, *current5_, *current6_, *current7_, *current8_,</div><div class="line"><a name="l12710"></a><span class="lineno">12710</span>&#160; *current9_));</div><div class="line"><a name="l12711"></a><span class="lineno">12711</span>&#160; }</div><div class="line"><a name="l12712"></a><span class="lineno">12712</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l12713"></a><span class="lineno">12713</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l12714"></a><span class="lineno">12714</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l12715"></a><span class="lineno">12715</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l12716"></a><span class="lineno">12716</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l12717"></a><span class="lineno">12717</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l12718"></a><span class="lineno">12718</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l12719"></a><span class="lineno">12719</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l12720"></a><span class="lineno">12720</span>&#160; current5_ == end5_ ||</div><div class="line"><a name="l12721"></a><span class="lineno">12721</span>&#160; current6_ == end6_ ||</div><div class="line"><a name="l12722"></a><span class="lineno">12722</span>&#160; current7_ == end7_ ||</div><div class="line"><a name="l12723"></a><span class="lineno">12723</span>&#160; current8_ == end8_ ||</div><div class="line"><a name="l12724"></a><span class="lineno">12724</span>&#160; current9_ == end9_;</div><div class="line"><a name="l12725"></a><span class="lineno">12725</span>&#160; }</div><div class="line"><a name="l12726"></a><span class="lineno">12726</span>&#160;</div><div class="line"><a name="l12727"></a><span class="lineno">12727</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12728"></a><span class="lineno">12728</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l12729"></a><span class="lineno">12729</span>&#160;</div><div class="line"><a name="l12730"></a><span class="lineno">12730</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l12731"></a><span class="lineno">12731</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l12732"></a><span class="lineno">12732</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l12733"></a><span class="lineno">12733</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l12734"></a><span class="lineno">12734</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l12735"></a><span class="lineno">12735</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l12736"></a><span class="lineno">12736</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l12737"></a><span class="lineno">12737</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l12738"></a><span class="lineno">12738</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l12739"></a><span class="lineno">12739</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l12740"></a><span class="lineno">12740</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l12741"></a><span class="lineno">12741</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l12742"></a><span class="lineno">12742</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l12743"></a><span class="lineno">12743</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l12744"></a><span class="lineno">12744</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l12745"></a><span class="lineno">12745</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l12746"></a><span class="lineno">12746</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l12747"></a><span class="lineno">12747</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l12748"></a><span class="lineno">12748</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> begin6_;</div><div class="line"><a name="l12749"></a><span class="lineno">12749</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> end6_;</div><div class="line"><a name="l12750"></a><span class="lineno">12750</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> current6_;</div><div class="line"><a name="l12751"></a><span class="lineno">12751</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> begin7_;</div><div class="line"><a name="l12752"></a><span class="lineno">12752</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> end7_;</div><div class="line"><a name="l12753"></a><span class="lineno">12753</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> current7_;</div><div class="line"><a name="l12754"></a><span class="lineno">12754</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> begin8_;</div><div class="line"><a name="l12755"></a><span class="lineno">12755</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> end8_;</div><div class="line"><a name="l12756"></a><span class="lineno">12756</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> current8_;</div><div class="line"><a name="l12757"></a><span class="lineno">12757</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> begin9_;</div><div class="line"><a name="l12758"></a><span class="lineno">12758</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> end9_;</div><div class="line"><a name="l12759"></a><span class="lineno">12759</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> current9_;</div><div class="line"><a name="l12760"></a><span class="lineno">12760</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l12761"></a><span class="lineno">12761</span>&#160; }; <span class="comment">// class CartesianProductGenerator9::Iterator</span></div><div class="line"><a name="l12762"></a><span class="lineno">12762</span>&#160;</div><div class="line"><a name="l12763"></a><span class="lineno">12763</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12764"></a><span class="lineno">12764</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#aff06c7992c06297c6bf5ad5eb56534e9">CartesianProductGenerator9</a>&amp; other);</div><div class="line"><a name="l12765"></a><span class="lineno">12765</span>&#160;</div><div class="line"><a name="l12766"></a><span class="lineno">12766</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l12767"></a><span class="lineno">12767</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l12768"></a><span class="lineno">12768</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l12769"></a><span class="lineno">12769</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l12770"></a><span class="lineno">12770</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l12771"></a><span class="lineno">12771</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T6&gt; g6_;</div><div class="line"><a name="l12772"></a><span class="lineno">12772</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T7&gt; g7_;</div><div class="line"><a name="l12773"></a><span class="lineno">12773</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T8&gt; g8_;</div><div class="line"><a name="l12774"></a><span class="lineno">12774</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T9&gt; g9_;</div><div class="line"><a name="l12775"></a><span class="lineno">12775</span>&#160;}; <span class="comment">// class CartesianProductGenerator9</span></div><div class="line"><a name="l12776"></a><span class="lineno">12776</span>&#160;</div><div class="line"><a name="l12777"></a><span class="lineno">12777</span>&#160;</div><div class="line"><a name="l12778"></a><span class="lineno">12778</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l12779"></a><span class="lineno">12779</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10&gt;</div><div class="line"><a name="l12780"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html">12780</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html">CartesianProductGenerator10</a></div><div class="line"><a name="l12781"></a><span class="lineno">12781</span>&#160; : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7,</div><div class="line"><a name="l12782"></a><span class="lineno">12782</span>&#160; T8, T9, T10&gt; &gt; {</div><div class="line"><a name="l12783"></a><span class="lineno">12783</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12784"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#ac9f50e9b6fff8dad968c5b98989752f9">12784</a></span>&#160; typedef ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9, T10&gt; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#ac9f50e9b6fff8dad968c5b98989752f9">ParamType</a>;</div><div class="line"><a name="l12785"></a><span class="lineno">12785</span>&#160;</div><div class="line"><a name="l12786"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a53d945670e910c0baaf14f3d25f1bbb6">12786</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a53d945670e910c0baaf14f3d25f1bbb6">CartesianProductGenerator10</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12787"></a><span class="lineno">12787</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12788"></a><span class="lineno">12788</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12789"></a><span class="lineno">12789</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12790"></a><span class="lineno">12790</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8, <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a>&amp; g9,</div><div class="line"><a name="l12791"></a><span class="lineno">12791</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T10&gt;</a>&amp; g10)</div><div class="line"><a name="l12792"></a><span class="lineno">12792</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),</div><div class="line"><a name="l12793"></a><span class="lineno">12793</span>&#160; g9_(g9), g10_(g10) {}</div><div class="line"><a name="l12794"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a2bee6d271df046f7660c85e2b2d305a5">12794</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a2bee6d271df046f7660c85e2b2d305a5">~CartesianProductGenerator10</a>()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12795"></a><span class="lineno">12795</span>&#160;</div><div class="line"><a name="l12796"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a23b2a79fc2fd0224fd31c519520cb945">12796</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a23b2a79fc2fd0224fd31c519520cb945">Begin</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12797"></a><span class="lineno">12797</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g3_,</div><div class="line"><a name="l12798"></a><span class="lineno">12798</span>&#160; g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g7_,</div><div class="line"><a name="l12799"></a><span class="lineno">12799</span>&#160; g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g8_, g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g9_, g9_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>(), g10_, g10_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">begin</a>());</div><div class="line"><a name="l12800"></a><span class="lineno">12800</span>&#160; }</div><div class="line"><a name="l12801"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a373c054dc7b60a9ab6236c327cac4e23">12801</a></span>&#160; <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface&lt;ParamType&gt;</a>* <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a373c054dc7b60a9ab6236c327cac4e23">End</a>()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12802"></a><span class="lineno">12802</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(<span class="keyword">this</span>, g1_, g1_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g2_, g2_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g3_, g3_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(),</div><div class="line"><a name="l12803"></a><span class="lineno">12803</span>&#160; g4_, g4_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g5_, g5_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g6_, g6_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g7_, g7_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g8_,</div><div class="line"><a name="l12804"></a><span class="lineno">12804</span>&#160; g8_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g9_, g9_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>(), g10_, g10_.<a class="code" href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">end</a>());</div><div class="line"><a name="l12805"></a><span class="lineno">12805</span>&#160; }</div><div class="line"><a name="l12806"></a><span class="lineno">12806</span>&#160;</div><div class="line"><a name="l12807"></a><span class="lineno">12807</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12808"></a><span class="lineno">12808</span>&#160; <span class="keyword">class </span>Iterator : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html">ParamIteratorInterface</a>&lt;ParamType&gt; {</div><div class="line"><a name="l12809"></a><span class="lineno">12809</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l12810"></a><span class="lineno">12810</span>&#160; Iterator(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator_interface.html">ParamGeneratorInterface&lt;ParamType&gt;</a>* base,</div><div class="line"><a name="l12811"></a><span class="lineno">12811</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a>&amp; g1,</div><div class="line"><a name="l12812"></a><span class="lineno">12812</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;::iterator</a>&amp; current1,</div><div class="line"><a name="l12813"></a><span class="lineno">12813</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a>&amp; g2,</div><div class="line"><a name="l12814"></a><span class="lineno">12814</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;::iterator</a>&amp; current2,</div><div class="line"><a name="l12815"></a><span class="lineno">12815</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a>&amp; g3,</div><div class="line"><a name="l12816"></a><span class="lineno">12816</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;::iterator</a>&amp; current3,</div><div class="line"><a name="l12817"></a><span class="lineno">12817</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a>&amp; g4,</div><div class="line"><a name="l12818"></a><span class="lineno">12818</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;::iterator</a>&amp; current4,</div><div class="line"><a name="l12819"></a><span class="lineno">12819</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a>&amp; g5,</div><div class="line"><a name="l12820"></a><span class="lineno">12820</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;::iterator</a>&amp; current5,</div><div class="line"><a name="l12821"></a><span class="lineno">12821</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a>&amp; g6,</div><div class="line"><a name="l12822"></a><span class="lineno">12822</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;::iterator</a>&amp; current6,</div><div class="line"><a name="l12823"></a><span class="lineno">12823</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a>&amp; g7,</div><div class="line"><a name="l12824"></a><span class="lineno">12824</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;::iterator</a>&amp; current7,</div><div class="line"><a name="l12825"></a><span class="lineno">12825</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a>&amp; g8,</div><div class="line"><a name="l12826"></a><span class="lineno">12826</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;::iterator</a>&amp; current8,</div><div class="line"><a name="l12827"></a><span class="lineno">12827</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a>&amp; g9,</div><div class="line"><a name="l12828"></a><span class="lineno">12828</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;::iterator</a>&amp; current9,</div><div class="line"><a name="l12829"></a><span class="lineno">12829</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T10&gt;</a>&amp; g10,</div><div class="line"><a name="l12830"></a><span class="lineno">12830</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T10&gt;::iterator</a>&amp; current10)</div><div class="line"><a name="l12831"></a><span class="lineno">12831</span>&#160; : base_(base),</div><div class="line"><a name="l12832"></a><span class="lineno">12832</span>&#160; begin1_(g1.begin()), end1_(g1.end()), current1_(current1),</div><div class="line"><a name="l12833"></a><span class="lineno">12833</span>&#160; begin2_(g2.begin()), end2_(g2.end()), current2_(current2),</div><div class="line"><a name="l12834"></a><span class="lineno">12834</span>&#160; begin3_(g3.begin()), end3_(g3.end()), current3_(current3),</div><div class="line"><a name="l12835"></a><span class="lineno">12835</span>&#160; begin4_(g4.begin()), end4_(g4.end()), current4_(current4),</div><div class="line"><a name="l12836"></a><span class="lineno">12836</span>&#160; begin5_(g5.begin()), end5_(g5.end()), current5_(current5),</div><div class="line"><a name="l12837"></a><span class="lineno">12837</span>&#160; begin6_(g6.begin()), end6_(g6.end()), current6_(current6),</div><div class="line"><a name="l12838"></a><span class="lineno">12838</span>&#160; begin7_(g7.begin()), end7_(g7.end()), current7_(current7),</div><div class="line"><a name="l12839"></a><span class="lineno">12839</span>&#160; begin8_(g8.begin()), end8_(g8.end()), current8_(current8),</div><div class="line"><a name="l12840"></a><span class="lineno">12840</span>&#160; begin9_(g9.begin()), end9_(g9.end()), current9_(current9),</div><div class="line"><a name="l12841"></a><span class="lineno">12841</span>&#160; begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {</div><div class="line"><a name="l12842"></a><span class="lineno">12842</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12843"></a><span class="lineno">12843</span>&#160; }</div><div class="line"><a name="l12844"></a><span class="lineno">12844</span>&#160; ~Iterator()<span class="keyword"> override </span>{}</div><div class="line"><a name="l12845"></a><span class="lineno">12845</span>&#160;</div><div class="line"><a name="l12846"></a><span class="lineno">12846</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* BaseGenerator()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12847"></a><span class="lineno">12847</span>&#160; <span class="keywordflow">return</span> base_;</div><div class="line"><a name="l12848"></a><span class="lineno">12848</span>&#160; }</div><div class="line"><a name="l12849"></a><span class="lineno">12849</span>&#160; <span class="comment">// Advance should not be called on beyond-of-range iterators</span></div><div class="line"><a name="l12850"></a><span class="lineno">12850</span>&#160; <span class="comment">// so no component iterators must be beyond end of range, either.</span></div><div class="line"><a name="l12851"></a><span class="lineno">12851</span>&#160; <span class="keywordtype">void</span> Advance()<span class="keyword"> override </span>{</div><div class="line"><a name="l12852"></a><span class="lineno">12852</span>&#160; assert(!AtEnd());</div><div class="line"><a name="l12853"></a><span class="lineno">12853</span>&#160; ++current10_;</div><div class="line"><a name="l12854"></a><span class="lineno">12854</span>&#160; <span class="keywordflow">if</span> (current10_ == end10_) {</div><div class="line"><a name="l12855"></a><span class="lineno">12855</span>&#160; current10_ = begin10_;</div><div class="line"><a name="l12856"></a><span class="lineno">12856</span>&#160; ++current9_;</div><div class="line"><a name="l12857"></a><span class="lineno">12857</span>&#160; }</div><div class="line"><a name="l12858"></a><span class="lineno">12858</span>&#160; <span class="keywordflow">if</span> (current9_ == end9_) {</div><div class="line"><a name="l12859"></a><span class="lineno">12859</span>&#160; current9_ = begin9_;</div><div class="line"><a name="l12860"></a><span class="lineno">12860</span>&#160; ++current8_;</div><div class="line"><a name="l12861"></a><span class="lineno">12861</span>&#160; }</div><div class="line"><a name="l12862"></a><span class="lineno">12862</span>&#160; <span class="keywordflow">if</span> (current8_ == end8_) {</div><div class="line"><a name="l12863"></a><span class="lineno">12863</span>&#160; current8_ = begin8_;</div><div class="line"><a name="l12864"></a><span class="lineno">12864</span>&#160; ++current7_;</div><div class="line"><a name="l12865"></a><span class="lineno">12865</span>&#160; }</div><div class="line"><a name="l12866"></a><span class="lineno">12866</span>&#160; <span class="keywordflow">if</span> (current7_ == end7_) {</div><div class="line"><a name="l12867"></a><span class="lineno">12867</span>&#160; current7_ = begin7_;</div><div class="line"><a name="l12868"></a><span class="lineno">12868</span>&#160; ++current6_;</div><div class="line"><a name="l12869"></a><span class="lineno">12869</span>&#160; }</div><div class="line"><a name="l12870"></a><span class="lineno">12870</span>&#160; <span class="keywordflow">if</span> (current6_ == end6_) {</div><div class="line"><a name="l12871"></a><span class="lineno">12871</span>&#160; current6_ = begin6_;</div><div class="line"><a name="l12872"></a><span class="lineno">12872</span>&#160; ++current5_;</div><div class="line"><a name="l12873"></a><span class="lineno">12873</span>&#160; }</div><div class="line"><a name="l12874"></a><span class="lineno">12874</span>&#160; <span class="keywordflow">if</span> (current5_ == end5_) {</div><div class="line"><a name="l12875"></a><span class="lineno">12875</span>&#160; current5_ = begin5_;</div><div class="line"><a name="l12876"></a><span class="lineno">12876</span>&#160; ++current4_;</div><div class="line"><a name="l12877"></a><span class="lineno">12877</span>&#160; }</div><div class="line"><a name="l12878"></a><span class="lineno">12878</span>&#160; <span class="keywordflow">if</span> (current4_ == end4_) {</div><div class="line"><a name="l12879"></a><span class="lineno">12879</span>&#160; current4_ = begin4_;</div><div class="line"><a name="l12880"></a><span class="lineno">12880</span>&#160; ++current3_;</div><div class="line"><a name="l12881"></a><span class="lineno">12881</span>&#160; }</div><div class="line"><a name="l12882"></a><span class="lineno">12882</span>&#160; <span class="keywordflow">if</span> (current3_ == end3_) {</div><div class="line"><a name="l12883"></a><span class="lineno">12883</span>&#160; current3_ = begin3_;</div><div class="line"><a name="l12884"></a><span class="lineno">12884</span>&#160; ++current2_;</div><div class="line"><a name="l12885"></a><span class="lineno">12885</span>&#160; }</div><div class="line"><a name="l12886"></a><span class="lineno">12886</span>&#160; <span class="keywordflow">if</span> (current2_ == end2_) {</div><div class="line"><a name="l12887"></a><span class="lineno">12887</span>&#160; current2_ = begin2_;</div><div class="line"><a name="l12888"></a><span class="lineno">12888</span>&#160; ++current1_;</div><div class="line"><a name="l12889"></a><span class="lineno">12889</span>&#160; }</div><div class="line"><a name="l12890"></a><span class="lineno">12890</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12891"></a><span class="lineno">12891</span>&#160; }</div><div class="line"><a name="l12892"></a><span class="lineno">12892</span>&#160; ParamIteratorInterface&lt;ParamType&gt;* Clone()<span class="keyword"> const override </span>{</div><div class="line"><a name="l12893"></a><span class="lineno">12893</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> Iterator(*<span class="keyword">this</span>);</div><div class="line"><a name="l12894"></a><span class="lineno">12894</span>&#160; }</div><div class="line"><a name="l12895"></a><span class="lineno">12895</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#ac9f50e9b6fff8dad968c5b98989752f9">ParamType</a>* Current()<span class="keyword"> const override </span>{ <span class="keywordflow">return</span> current_value_.get(); }</div><div class="line"><a name="l12896"></a><span class="lineno">12896</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">Equals</a>(<span class="keyword">const</span> ParamIteratorInterface&lt;ParamType&gt;&amp; other)<span class="keyword"> const override </span>{</div><div class="line"><a name="l12897"></a><span class="lineno">12897</span>&#160; <span class="comment">// Having the same base generator guarantees that the other</span></div><div class="line"><a name="l12898"></a><span class="lineno">12898</span>&#160; <span class="comment">// iterator is of the same type and we can downcast.</span></div><div class="line"><a name="l12899"></a><span class="lineno">12899</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(BaseGenerator() == other.BaseGenerator())</div><div class="line"><a name="l12900"></a><span class="lineno">12900</span>&#160; &lt;&lt; <span class="stringliteral">&quot;The program attempted to compare iterators &quot;</span></div><div class="line"><a name="l12901"></a><span class="lineno">12901</span>&#160; &lt;&lt; <span class="stringliteral">&quot;from different generators.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l12902"></a><span class="lineno">12902</span>&#160; <span class="keyword">const</span> Iterator* typed_other =</div><div class="line"><a name="l12903"></a><span class="lineno">12903</span>&#160; CheckedDowncastToActualType&lt;const Iterator&gt;(&amp;other);</div><div class="line"><a name="l12904"></a><span class="lineno">12904</span>&#160; <span class="comment">// We must report iterators equal if they both point beyond their</span></div><div class="line"><a name="l12905"></a><span class="lineno">12905</span>&#160; <span class="comment">// respective ranges. That can happen in a variety of fashions,</span></div><div class="line"><a name="l12906"></a><span class="lineno">12906</span>&#160; <span class="comment">// so we have to consult AtEnd().</span></div><div class="line"><a name="l12907"></a><span class="lineno">12907</span>&#160; <span class="keywordflow">return</span> (AtEnd() &amp;&amp; typed_other-&gt;AtEnd()) ||</div><div class="line"><a name="l12908"></a><span class="lineno">12908</span>&#160; (</div><div class="line"><a name="l12909"></a><span class="lineno">12909</span>&#160; current1_ == typed_other-&gt;current1_ &amp;&amp;</div><div class="line"><a name="l12910"></a><span class="lineno">12910</span>&#160; current2_ == typed_other-&gt;current2_ &amp;&amp;</div><div class="line"><a name="l12911"></a><span class="lineno">12911</span>&#160; current3_ == typed_other-&gt;current3_ &amp;&amp;</div><div class="line"><a name="l12912"></a><span class="lineno">12912</span>&#160; current4_ == typed_other-&gt;current4_ &amp;&amp;</div><div class="line"><a name="l12913"></a><span class="lineno">12913</span>&#160; current5_ == typed_other-&gt;current5_ &amp;&amp;</div><div class="line"><a name="l12914"></a><span class="lineno">12914</span>&#160; current6_ == typed_other-&gt;current6_ &amp;&amp;</div><div class="line"><a name="l12915"></a><span class="lineno">12915</span>&#160; current7_ == typed_other-&gt;current7_ &amp;&amp;</div><div class="line"><a name="l12916"></a><span class="lineno">12916</span>&#160; current8_ == typed_other-&gt;current8_ &amp;&amp;</div><div class="line"><a name="l12917"></a><span class="lineno">12917</span>&#160; current9_ == typed_other-&gt;current9_ &amp;&amp;</div><div class="line"><a name="l12918"></a><span class="lineno">12918</span>&#160; current10_ == typed_other-&gt;current10_);</div><div class="line"><a name="l12919"></a><span class="lineno">12919</span>&#160; }</div><div class="line"><a name="l12920"></a><span class="lineno">12920</span>&#160;</div><div class="line"><a name="l12921"></a><span class="lineno">12921</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l12922"></a><span class="lineno">12922</span>&#160; Iterator(<span class="keyword">const</span> Iterator&amp; other)</div><div class="line"><a name="l12923"></a><span class="lineno">12923</span>&#160; : base_(other.base_),</div><div class="line"><a name="l12924"></a><span class="lineno">12924</span>&#160; begin1_(other.begin1_),</div><div class="line"><a name="l12925"></a><span class="lineno">12925</span>&#160; end1_(other.end1_),</div><div class="line"><a name="l12926"></a><span class="lineno">12926</span>&#160; current1_(other.current1_),</div><div class="line"><a name="l12927"></a><span class="lineno">12927</span>&#160; begin2_(other.begin2_),</div><div class="line"><a name="l12928"></a><span class="lineno">12928</span>&#160; end2_(other.end2_),</div><div class="line"><a name="l12929"></a><span class="lineno">12929</span>&#160; current2_(other.current2_),</div><div class="line"><a name="l12930"></a><span class="lineno">12930</span>&#160; begin3_(other.begin3_),</div><div class="line"><a name="l12931"></a><span class="lineno">12931</span>&#160; end3_(other.end3_),</div><div class="line"><a name="l12932"></a><span class="lineno">12932</span>&#160; current3_(other.current3_),</div><div class="line"><a name="l12933"></a><span class="lineno">12933</span>&#160; begin4_(other.begin4_),</div><div class="line"><a name="l12934"></a><span class="lineno">12934</span>&#160; end4_(other.end4_),</div><div class="line"><a name="l12935"></a><span class="lineno">12935</span>&#160; current4_(other.current4_),</div><div class="line"><a name="l12936"></a><span class="lineno">12936</span>&#160; begin5_(other.begin5_),</div><div class="line"><a name="l12937"></a><span class="lineno">12937</span>&#160; end5_(other.end5_),</div><div class="line"><a name="l12938"></a><span class="lineno">12938</span>&#160; current5_(other.current5_),</div><div class="line"><a name="l12939"></a><span class="lineno">12939</span>&#160; begin6_(other.begin6_),</div><div class="line"><a name="l12940"></a><span class="lineno">12940</span>&#160; end6_(other.end6_),</div><div class="line"><a name="l12941"></a><span class="lineno">12941</span>&#160; current6_(other.current6_),</div><div class="line"><a name="l12942"></a><span class="lineno">12942</span>&#160; begin7_(other.begin7_),</div><div class="line"><a name="l12943"></a><span class="lineno">12943</span>&#160; end7_(other.end7_),</div><div class="line"><a name="l12944"></a><span class="lineno">12944</span>&#160; current7_(other.current7_),</div><div class="line"><a name="l12945"></a><span class="lineno">12945</span>&#160; begin8_(other.begin8_),</div><div class="line"><a name="l12946"></a><span class="lineno">12946</span>&#160; end8_(other.end8_),</div><div class="line"><a name="l12947"></a><span class="lineno">12947</span>&#160; current8_(other.current8_),</div><div class="line"><a name="l12948"></a><span class="lineno">12948</span>&#160; begin9_(other.begin9_),</div><div class="line"><a name="l12949"></a><span class="lineno">12949</span>&#160; end9_(other.end9_),</div><div class="line"><a name="l12950"></a><span class="lineno">12950</span>&#160; current9_(other.current9_),</div><div class="line"><a name="l12951"></a><span class="lineno">12951</span>&#160; begin10_(other.begin10_),</div><div class="line"><a name="l12952"></a><span class="lineno">12952</span>&#160; end10_(other.end10_),</div><div class="line"><a name="l12953"></a><span class="lineno">12953</span>&#160; current10_(other.current10_) {</div><div class="line"><a name="l12954"></a><span class="lineno">12954</span>&#160; ComputeCurrentValue();</div><div class="line"><a name="l12955"></a><span class="lineno">12955</span>&#160; }</div><div class="line"><a name="l12956"></a><span class="lineno">12956</span>&#160;</div><div class="line"><a name="l12957"></a><span class="lineno">12957</span>&#160; <span class="keywordtype">void</span> ComputeCurrentValue() {</div><div class="line"><a name="l12958"></a><span class="lineno">12958</span>&#160; <span class="keywordflow">if</span> (!AtEnd())</div><div class="line"><a name="l12959"></a><span class="lineno">12959</span>&#160; current_value_.reset(<span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#ac9f50e9b6fff8dad968c5b98989752f9">ParamType</a>(*current1_, *current2_, *current3_,</div><div class="line"><a name="l12960"></a><span class="lineno">12960</span>&#160; *current4_, *current5_, *current6_, *current7_, *current8_,</div><div class="line"><a name="l12961"></a><span class="lineno">12961</span>&#160; *current9_, *current10_));</div><div class="line"><a name="l12962"></a><span class="lineno">12962</span>&#160; }</div><div class="line"><a name="l12963"></a><span class="lineno">12963</span>&#160; <span class="keywordtype">bool</span> AtEnd()<span class="keyword"> const </span>{</div><div class="line"><a name="l12964"></a><span class="lineno">12964</span>&#160; <span class="comment">// We must report iterator past the end of the range when either of the</span></div><div class="line"><a name="l12965"></a><span class="lineno">12965</span>&#160; <span class="comment">// component iterators has reached the end of its range.</span></div><div class="line"><a name="l12966"></a><span class="lineno">12966</span>&#160; <span class="keywordflow">return</span></div><div class="line"><a name="l12967"></a><span class="lineno">12967</span>&#160; current1_ == end1_ ||</div><div class="line"><a name="l12968"></a><span class="lineno">12968</span>&#160; current2_ == end2_ ||</div><div class="line"><a name="l12969"></a><span class="lineno">12969</span>&#160; current3_ == end3_ ||</div><div class="line"><a name="l12970"></a><span class="lineno">12970</span>&#160; current4_ == end4_ ||</div><div class="line"><a name="l12971"></a><span class="lineno">12971</span>&#160; current5_ == end5_ ||</div><div class="line"><a name="l12972"></a><span class="lineno">12972</span>&#160; current6_ == end6_ ||</div><div class="line"><a name="l12973"></a><span class="lineno">12973</span>&#160; current7_ == end7_ ||</div><div class="line"><a name="l12974"></a><span class="lineno">12974</span>&#160; current8_ == end8_ ||</div><div class="line"><a name="l12975"></a><span class="lineno">12975</span>&#160; current9_ == end9_ ||</div><div class="line"><a name="l12976"></a><span class="lineno">12976</span>&#160; current10_ == end10_;</div><div class="line"><a name="l12977"></a><span class="lineno">12977</span>&#160; }</div><div class="line"><a name="l12978"></a><span class="lineno">12978</span>&#160;</div><div class="line"><a name="l12979"></a><span class="lineno">12979</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l12980"></a><span class="lineno">12980</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> Iterator&amp; other);</div><div class="line"><a name="l12981"></a><span class="lineno">12981</span>&#160;</div><div class="line"><a name="l12982"></a><span class="lineno">12982</span>&#160; <span class="keyword">const</span> ParamGeneratorInterface&lt;ParamType&gt;* <span class="keyword">const</span> base_;</div><div class="line"><a name="l12983"></a><span class="lineno">12983</span>&#160; <span class="comment">// begin[i]_ and end[i]_ define the i-th range that Iterator traverses.</span></div><div class="line"><a name="l12984"></a><span class="lineno">12984</span>&#160; <span class="comment">// current[i]_ is the actual traversing iterator.</span></div><div class="line"><a name="l12985"></a><span class="lineno">12985</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> begin1_;</div><div class="line"><a name="l12986"></a><span class="lineno">12986</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> end1_;</div><div class="line"><a name="l12987"></a><span class="lineno">12987</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T1&gt;::iterator</a> current1_;</div><div class="line"><a name="l12988"></a><span class="lineno">12988</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> begin2_;</div><div class="line"><a name="l12989"></a><span class="lineno">12989</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> end2_;</div><div class="line"><a name="l12990"></a><span class="lineno">12990</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T2&gt;::iterator</a> current2_;</div><div class="line"><a name="l12991"></a><span class="lineno">12991</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> begin3_;</div><div class="line"><a name="l12992"></a><span class="lineno">12992</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> end3_;</div><div class="line"><a name="l12993"></a><span class="lineno">12993</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T3&gt;::iterator</a> current3_;</div><div class="line"><a name="l12994"></a><span class="lineno">12994</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> begin4_;</div><div class="line"><a name="l12995"></a><span class="lineno">12995</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> end4_;</div><div class="line"><a name="l12996"></a><span class="lineno">12996</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T4&gt;::iterator</a> current4_;</div><div class="line"><a name="l12997"></a><span class="lineno">12997</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> begin5_;</div><div class="line"><a name="l12998"></a><span class="lineno">12998</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> end5_;</div><div class="line"><a name="l12999"></a><span class="lineno">12999</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T5&gt;::iterator</a> current5_;</div><div class="line"><a name="l13000"></a><span class="lineno">13000</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> begin6_;</div><div class="line"><a name="l13001"></a><span class="lineno">13001</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> end6_;</div><div class="line"><a name="l13002"></a><span class="lineno">13002</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T6&gt;::iterator</a> current6_;</div><div class="line"><a name="l13003"></a><span class="lineno">13003</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> begin7_;</div><div class="line"><a name="l13004"></a><span class="lineno">13004</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> end7_;</div><div class="line"><a name="l13005"></a><span class="lineno">13005</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T7&gt;::iterator</a> current7_;</div><div class="line"><a name="l13006"></a><span class="lineno">13006</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> begin8_;</div><div class="line"><a name="l13007"></a><span class="lineno">13007</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> end8_;</div><div class="line"><a name="l13008"></a><span class="lineno">13008</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T8&gt;::iterator</a> current8_;</div><div class="line"><a name="l13009"></a><span class="lineno">13009</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> begin9_;</div><div class="line"><a name="l13010"></a><span class="lineno">13010</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> end9_;</div><div class="line"><a name="l13011"></a><span class="lineno">13011</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T9&gt;::iterator</a> current9_;</div><div class="line"><a name="l13012"></a><span class="lineno">13012</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T10&gt;::iterator</a> begin10_;</div><div class="line"><a name="l13013"></a><span class="lineno">13013</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T10&gt;::iterator</a> end10_;</div><div class="line"><a name="l13014"></a><span class="lineno">13014</span>&#160; <span class="keyword">typename</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">ParamGenerator&lt;T10&gt;::iterator</a> current10_;</div><div class="line"><a name="l13015"></a><span class="lineno">13015</span>&#160; std::shared_ptr&lt;ParamType&gt; current_value_;</div><div class="line"><a name="l13016"></a><span class="lineno">13016</span>&#160; }; <span class="comment">// class CartesianProductGenerator10::Iterator</span></div><div class="line"><a name="l13017"></a><span class="lineno">13017</span>&#160;</div><div class="line"><a name="l13018"></a><span class="lineno">13018</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13019"></a><span class="lineno">13019</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a53d945670e910c0baaf14f3d25f1bbb6">CartesianProductGenerator10</a>&amp; other);</div><div class="line"><a name="l13020"></a><span class="lineno">13020</span>&#160;</div><div class="line"><a name="l13021"></a><span class="lineno">13021</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T1&gt; g1_;</div><div class="line"><a name="l13022"></a><span class="lineno">13022</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T2&gt; g2_;</div><div class="line"><a name="l13023"></a><span class="lineno">13023</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T3&gt; g3_;</div><div class="line"><a name="l13024"></a><span class="lineno">13024</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T4&gt; g4_;</div><div class="line"><a name="l13025"></a><span class="lineno">13025</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T5&gt; g5_;</div><div class="line"><a name="l13026"></a><span class="lineno">13026</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T6&gt; g6_;</div><div class="line"><a name="l13027"></a><span class="lineno">13027</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T7&gt; g7_;</div><div class="line"><a name="l13028"></a><span class="lineno">13028</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T8&gt; g8_;</div><div class="line"><a name="l13029"></a><span class="lineno">13029</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T9&gt; g9_;</div><div class="line"><a name="l13030"></a><span class="lineno">13030</span>&#160; <span class="keyword">const</span> ParamGenerator&lt;T10&gt; g10_;</div><div class="line"><a name="l13031"></a><span class="lineno">13031</span>&#160;}; <span class="comment">// class CartesianProductGenerator10</span></div><div class="line"><a name="l13032"></a><span class="lineno">13032</span>&#160;</div><div class="line"><a name="l13033"></a><span class="lineno">13033</span>&#160;</div><div class="line"><a name="l13034"></a><span class="lineno">13034</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l13035"></a><span class="lineno">13035</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13036"></a><span class="lineno">13036</span>&#160;<span class="comment">// Helper classes providing Combine() with polymorphic features. They allow</span></div><div class="line"><a name="l13037"></a><span class="lineno">13037</span>&#160;<span class="comment">// casting CartesianProductGeneratorN&lt;T&gt; to ParamGenerator&lt;U&gt; if T is</span></div><div class="line"><a name="l13038"></a><span class="lineno">13038</span>&#160;<span class="comment">// convertible to U.</span></div><div class="line"><a name="l13039"></a><span class="lineno">13039</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13040"></a><span class="lineno">13040</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Generator1, <span class="keyword">class</span> Generator2&gt;</div><div class="line"><a name="l13041"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">13041</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">CartesianProductHolder2</a> {</div><div class="line"><a name="l13042"></a><span class="lineno">13042</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13043"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html#a504471500c3171f7efee84b830004ff9">13043</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html#a504471500c3171f7efee84b830004ff9">CartesianProductHolder2</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2)</div><div class="line"><a name="l13044"></a><span class="lineno">13044</span>&#160; : g1_(g1), g2_(g2) {}</div><div class="line"><a name="l13045"></a><span class="lineno">13045</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l13046"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html#afa0052d44ded139ca23a270375d28e6a">13046</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13047"></a><span class="lineno">13047</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2&gt;</a> &gt;(</div><div class="line"><a name="l13048"></a><span class="lineno">13048</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator2.html">CartesianProductGenerator2&lt;T1, T2&gt;</a>(</div><div class="line"><a name="l13049"></a><span class="lineno">13049</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13050"></a><span class="lineno">13050</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_)));</div><div class="line"><a name="l13051"></a><span class="lineno">13051</span>&#160; }</div><div class="line"><a name="l13052"></a><span class="lineno">13052</span>&#160;</div><div class="line"><a name="l13053"></a><span class="lineno">13053</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13054"></a><span class="lineno">13054</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13055"></a><span class="lineno">13055</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">CartesianProductHolder2</a>&amp; other);</div><div class="line"><a name="l13056"></a><span class="lineno">13056</span>&#160;</div><div class="line"><a name="l13057"></a><span class="lineno">13057</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13058"></a><span class="lineno">13058</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13059"></a><span class="lineno">13059</span>&#160;}; <span class="comment">// class CartesianProductHolder2</span></div><div class="line"><a name="l13060"></a><span class="lineno">13060</span>&#160;</div><div class="line"><a name="l13061"></a><span class="lineno">13061</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Generator1, <span class="keyword">class</span> Generator2, <span class="keyword">class</span> Generator3&gt;</div><div class="line"><a name="l13062"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">13062</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">CartesianProductHolder3</a> {</div><div class="line"><a name="l13063"></a><span class="lineno">13063</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13064"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html#ad74b6d31441c7f3f7f8514a563c8277e">13064</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html#ad74b6d31441c7f3f7f8514a563c8277e">CartesianProductHolder3</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13065"></a><span class="lineno">13065</span>&#160; <span class="keyword">const</span> Generator3&amp; g3)</div><div class="line"><a name="l13066"></a><span class="lineno">13066</span>&#160; : g1_(g1), g2_(g2), g3_(g3) {}</div><div class="line"><a name="l13067"></a><span class="lineno">13067</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3&gt;</div><div class="line"><a name="l13068"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html#a10074f00be0b5069dbc67ef5c66fbf0c">13068</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13069"></a><span class="lineno">13069</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3&gt;</a> &gt;(</div><div class="line"><a name="l13070"></a><span class="lineno">13070</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator3.html">CartesianProductGenerator3&lt;T1, T2, T3&gt;</a>(</div><div class="line"><a name="l13071"></a><span class="lineno">13071</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13072"></a><span class="lineno">13072</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13073"></a><span class="lineno">13073</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_)));</div><div class="line"><a name="l13074"></a><span class="lineno">13074</span>&#160; }</div><div class="line"><a name="l13075"></a><span class="lineno">13075</span>&#160;</div><div class="line"><a name="l13076"></a><span class="lineno">13076</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13077"></a><span class="lineno">13077</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13078"></a><span class="lineno">13078</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">CartesianProductHolder3</a>&amp; other);</div><div class="line"><a name="l13079"></a><span class="lineno">13079</span>&#160;</div><div class="line"><a name="l13080"></a><span class="lineno">13080</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13081"></a><span class="lineno">13081</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13082"></a><span class="lineno">13082</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13083"></a><span class="lineno">13083</span>&#160;}; <span class="comment">// class CartesianProductHolder3</span></div><div class="line"><a name="l13084"></a><span class="lineno">13084</span>&#160;</div><div class="line"><a name="l13085"></a><span class="lineno">13085</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13086"></a><span class="lineno">13086</span>&#160; <span class="keyword">class </span>Generator4&gt;</div><div class="line"><a name="l13087"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html">13087</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html">CartesianProductHolder4</a> {</div><div class="line"><a name="l13088"></a><span class="lineno">13088</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13089"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html#a07fe92a091d7717a159d7ba5f2fe3c75">13089</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html#a07fe92a091d7717a159d7ba5f2fe3c75">CartesianProductHolder4</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13090"></a><span class="lineno">13090</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4)</div><div class="line"><a name="l13091"></a><span class="lineno">13091</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}</div><div class="line"><a name="l13092"></a><span class="lineno">13092</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4&gt;</div><div class="line"><a name="l13093"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html#a6138a6d2767e2381266fe8676adbdd0b">13093</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13094"></a><span class="lineno">13094</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4&gt;</a> &gt;(</div><div class="line"><a name="l13095"></a><span class="lineno">13095</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator4.html">CartesianProductGenerator4&lt;T1, T2, T3, T4&gt;</a>(</div><div class="line"><a name="l13096"></a><span class="lineno">13096</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13097"></a><span class="lineno">13097</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13098"></a><span class="lineno">13098</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13099"></a><span class="lineno">13099</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_)));</div><div class="line"><a name="l13100"></a><span class="lineno">13100</span>&#160; }</div><div class="line"><a name="l13101"></a><span class="lineno">13101</span>&#160;</div><div class="line"><a name="l13102"></a><span class="lineno">13102</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13103"></a><span class="lineno">13103</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13104"></a><span class="lineno">13104</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html">CartesianProductHolder4</a>&amp; other);</div><div class="line"><a name="l13105"></a><span class="lineno">13105</span>&#160;</div><div class="line"><a name="l13106"></a><span class="lineno">13106</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13107"></a><span class="lineno">13107</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13108"></a><span class="lineno">13108</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13109"></a><span class="lineno">13109</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13110"></a><span class="lineno">13110</span>&#160;}; <span class="comment">// class CartesianProductHolder4</span></div><div class="line"><a name="l13111"></a><span class="lineno">13111</span>&#160;</div><div class="line"><a name="l13112"></a><span class="lineno">13112</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13113"></a><span class="lineno">13113</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5&gt;</div><div class="line"><a name="l13114"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html">13114</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html">CartesianProductHolder5</a> {</div><div class="line"><a name="l13115"></a><span class="lineno">13115</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13116"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html#afb3a413ff0e59f31e621937f968d0923">13116</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html#afb3a413ff0e59f31e621937f968d0923">CartesianProductHolder5</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13117"></a><span class="lineno">13117</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5)</div><div class="line"><a name="l13118"></a><span class="lineno">13118</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}</div><div class="line"><a name="l13119"></a><span class="lineno">13119</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5&gt;</div><div class="line"><a name="l13120"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html#aff2bd642fe8c52a2b9235e7c9c08cf26">13120</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13121"></a><span class="lineno">13121</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5&gt;</a> &gt;(</div><div class="line"><a name="l13122"></a><span class="lineno">13122</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator5.html">CartesianProductGenerator5&lt;T1, T2, T3, T4, T5&gt;</a>(</div><div class="line"><a name="l13123"></a><span class="lineno">13123</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13124"></a><span class="lineno">13124</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13125"></a><span class="lineno">13125</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13126"></a><span class="lineno">13126</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13127"></a><span class="lineno">13127</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_)));</div><div class="line"><a name="l13128"></a><span class="lineno">13128</span>&#160; }</div><div class="line"><a name="l13129"></a><span class="lineno">13129</span>&#160;</div><div class="line"><a name="l13130"></a><span class="lineno">13130</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13131"></a><span class="lineno">13131</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13132"></a><span class="lineno">13132</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html">CartesianProductHolder5</a>&amp; other);</div><div class="line"><a name="l13133"></a><span class="lineno">13133</span>&#160;</div><div class="line"><a name="l13134"></a><span class="lineno">13134</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13135"></a><span class="lineno">13135</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13136"></a><span class="lineno">13136</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13137"></a><span class="lineno">13137</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13138"></a><span class="lineno">13138</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13139"></a><span class="lineno">13139</span>&#160;}; <span class="comment">// class CartesianProductHolder5</span></div><div class="line"><a name="l13140"></a><span class="lineno">13140</span>&#160;</div><div class="line"><a name="l13141"></a><span class="lineno">13141</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13142"></a><span class="lineno">13142</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5, <span class="keyword">class </span>Generator6&gt;</div><div class="line"><a name="l13143"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html">13143</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html">CartesianProductHolder6</a> {</div><div class="line"><a name="l13144"></a><span class="lineno">13144</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13145"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html#a7bb6f9224a1a6766e3634eb392e1b5f6">13145</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html#a7bb6f9224a1a6766e3634eb392e1b5f6">CartesianProductHolder6</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13146"></a><span class="lineno">13146</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5,</div><div class="line"><a name="l13147"></a><span class="lineno">13147</span>&#160; <span class="keyword">const</span> Generator6&amp; g6)</div><div class="line"><a name="l13148"></a><span class="lineno">13148</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}</div><div class="line"><a name="l13149"></a><span class="lineno">13149</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l13150"></a><span class="lineno">13150</span>&#160; <span class="keyword">typename</span> T6&gt;</div><div class="line"><a name="l13151"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html#aa913929b072ce064ba7d00f030e6e3ed">13151</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13152"></a><span class="lineno">13152</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6&gt;</a> &gt;(</div><div class="line"><a name="l13153"></a><span class="lineno">13153</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator6.html">CartesianProductGenerator6&lt;T1, T2, T3, T4, T5, T6&gt;</a>(</div><div class="line"><a name="l13154"></a><span class="lineno">13154</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13155"></a><span class="lineno">13155</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13156"></a><span class="lineno">13156</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13157"></a><span class="lineno">13157</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13158"></a><span class="lineno">13158</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_),</div><div class="line"><a name="l13159"></a><span class="lineno">13159</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a> <span class="keyword">&gt;</span>(g6_)));</div><div class="line"><a name="l13160"></a><span class="lineno">13160</span>&#160; }</div><div class="line"><a name="l13161"></a><span class="lineno">13161</span>&#160;</div><div class="line"><a name="l13162"></a><span class="lineno">13162</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13163"></a><span class="lineno">13163</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13164"></a><span class="lineno">13164</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html">CartesianProductHolder6</a>&amp; other);</div><div class="line"><a name="l13165"></a><span class="lineno">13165</span>&#160;</div><div class="line"><a name="l13166"></a><span class="lineno">13166</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13167"></a><span class="lineno">13167</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13168"></a><span class="lineno">13168</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13169"></a><span class="lineno">13169</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13170"></a><span class="lineno">13170</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13171"></a><span class="lineno">13171</span>&#160; <span class="keyword">const</span> Generator6 g6_;</div><div class="line"><a name="l13172"></a><span class="lineno">13172</span>&#160;}; <span class="comment">// class CartesianProductHolder6</span></div><div class="line"><a name="l13173"></a><span class="lineno">13173</span>&#160;</div><div class="line"><a name="l13174"></a><span class="lineno">13174</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13175"></a><span class="lineno">13175</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5, <span class="keyword">class </span>Generator6, <span class="keyword">class </span>Generator7&gt;</div><div class="line"><a name="l13176"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html">13176</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html">CartesianProductHolder7</a> {</div><div class="line"><a name="l13177"></a><span class="lineno">13177</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13178"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html#a289e661f9252bac3570700410eb041b3">13178</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html#a289e661f9252bac3570700410eb041b3">CartesianProductHolder7</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13179"></a><span class="lineno">13179</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5,</div><div class="line"><a name="l13180"></a><span class="lineno">13180</span>&#160; <span class="keyword">const</span> Generator6&amp; g6, <span class="keyword">const</span> Generator7&amp; g7)</div><div class="line"><a name="l13181"></a><span class="lineno">13181</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}</div><div class="line"><a name="l13182"></a><span class="lineno">13182</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l13183"></a><span class="lineno">13183</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7&gt;</div><div class="line"><a name="l13184"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html#aef46f61ddac11f5daaf7ba59b0616c36">13184</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7&gt;</a> &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13185"></a><span class="lineno">13185</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7&gt;</a> &gt;(</div><div class="line"><a name="l13186"></a><span class="lineno">13186</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator7.html">CartesianProductGenerator7&lt;T1, T2, T3, T4, T5, T6, T7&gt;</a>(</div><div class="line"><a name="l13187"></a><span class="lineno">13187</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13188"></a><span class="lineno">13188</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13189"></a><span class="lineno">13189</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13190"></a><span class="lineno">13190</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13191"></a><span class="lineno">13191</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_),</div><div class="line"><a name="l13192"></a><span class="lineno">13192</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a> <span class="keyword">&gt;</span>(g6_),</div><div class="line"><a name="l13193"></a><span class="lineno">13193</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a> <span class="keyword">&gt;</span>(g7_)));</div><div class="line"><a name="l13194"></a><span class="lineno">13194</span>&#160; }</div><div class="line"><a name="l13195"></a><span class="lineno">13195</span>&#160;</div><div class="line"><a name="l13196"></a><span class="lineno">13196</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13197"></a><span class="lineno">13197</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13198"></a><span class="lineno">13198</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html">CartesianProductHolder7</a>&amp; other);</div><div class="line"><a name="l13199"></a><span class="lineno">13199</span>&#160;</div><div class="line"><a name="l13200"></a><span class="lineno">13200</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13201"></a><span class="lineno">13201</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13202"></a><span class="lineno">13202</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13203"></a><span class="lineno">13203</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13204"></a><span class="lineno">13204</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13205"></a><span class="lineno">13205</span>&#160; <span class="keyword">const</span> Generator6 g6_;</div><div class="line"><a name="l13206"></a><span class="lineno">13206</span>&#160; <span class="keyword">const</span> Generator7 g7_;</div><div class="line"><a name="l13207"></a><span class="lineno">13207</span>&#160;}; <span class="comment">// class CartesianProductHolder7</span></div><div class="line"><a name="l13208"></a><span class="lineno">13208</span>&#160;</div><div class="line"><a name="l13209"></a><span class="lineno">13209</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13210"></a><span class="lineno">13210</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5, <span class="keyword">class </span>Generator6, <span class="keyword">class </span>Generator7,</div><div class="line"><a name="l13211"></a><span class="lineno">13211</span>&#160; <span class="keyword">class </span>Generator8&gt;</div><div class="line"><a name="l13212"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html">13212</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html">CartesianProductHolder8</a> {</div><div class="line"><a name="l13213"></a><span class="lineno">13213</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13214"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html#adacdd7a2e15963d1b2f559d65f6b2aac">13214</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html#adacdd7a2e15963d1b2f559d65f6b2aac">CartesianProductHolder8</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13215"></a><span class="lineno">13215</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5,</div><div class="line"><a name="l13216"></a><span class="lineno">13216</span>&#160; <span class="keyword">const</span> Generator6&amp; g6, <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8)</div><div class="line"><a name="l13217"></a><span class="lineno">13217</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),</div><div class="line"><a name="l13218"></a><span class="lineno">13218</span>&#160; g8_(g8) {}</div><div class="line"><a name="l13219"></a><span class="lineno">13219</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l13220"></a><span class="lineno">13220</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8&gt;</div><div class="line"><a name="l13221"></a><span class="lineno">13221</span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7,</div><div class="line"><a name="l13222"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html#a19baa0d0ec826f2e10ffaafffcfdee3f">13222</a></span>&#160; T8&gt; &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13223"></a><span class="lineno">13223</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8&gt;</a> &gt;(</div><div class="line"><a name="l13224"></a><span class="lineno">13224</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator8.html">CartesianProductGenerator8&lt;T1, T2, T3, T4, T5, T6, T7, T8&gt;</a>(</div><div class="line"><a name="l13225"></a><span class="lineno">13225</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13226"></a><span class="lineno">13226</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13227"></a><span class="lineno">13227</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13228"></a><span class="lineno">13228</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13229"></a><span class="lineno">13229</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_),</div><div class="line"><a name="l13230"></a><span class="lineno">13230</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a> <span class="keyword">&gt;</span>(g6_),</div><div class="line"><a name="l13231"></a><span class="lineno">13231</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a> <span class="keyword">&gt;</span>(g7_),</div><div class="line"><a name="l13232"></a><span class="lineno">13232</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a> <span class="keyword">&gt;</span>(g8_)));</div><div class="line"><a name="l13233"></a><span class="lineno">13233</span>&#160; }</div><div class="line"><a name="l13234"></a><span class="lineno">13234</span>&#160;</div><div class="line"><a name="l13235"></a><span class="lineno">13235</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13236"></a><span class="lineno">13236</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13237"></a><span class="lineno">13237</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html">CartesianProductHolder8</a>&amp; other);</div><div class="line"><a name="l13238"></a><span class="lineno">13238</span>&#160;</div><div class="line"><a name="l13239"></a><span class="lineno">13239</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13240"></a><span class="lineno">13240</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13241"></a><span class="lineno">13241</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13242"></a><span class="lineno">13242</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13243"></a><span class="lineno">13243</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13244"></a><span class="lineno">13244</span>&#160; <span class="keyword">const</span> Generator6 g6_;</div><div class="line"><a name="l13245"></a><span class="lineno">13245</span>&#160; <span class="keyword">const</span> Generator7 g7_;</div><div class="line"><a name="l13246"></a><span class="lineno">13246</span>&#160; <span class="keyword">const</span> Generator8 g8_;</div><div class="line"><a name="l13247"></a><span class="lineno">13247</span>&#160;}; <span class="comment">// class CartesianProductHolder8</span></div><div class="line"><a name="l13248"></a><span class="lineno">13248</span>&#160;</div><div class="line"><a name="l13249"></a><span class="lineno">13249</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13250"></a><span class="lineno">13250</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5, <span class="keyword">class </span>Generator6, <span class="keyword">class </span>Generator7,</div><div class="line"><a name="l13251"></a><span class="lineno">13251</span>&#160; <span class="keyword">class </span>Generator8, <span class="keyword">class </span>Generator9&gt;</div><div class="line"><a name="l13252"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html">13252</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html">CartesianProductHolder9</a> {</div><div class="line"><a name="l13253"></a><span class="lineno">13253</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13254"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html#a692a537863ab6adfc4001564887a3bc7">13254</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html#a692a537863ab6adfc4001564887a3bc7">CartesianProductHolder9</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13255"></a><span class="lineno">13255</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5,</div><div class="line"><a name="l13256"></a><span class="lineno">13256</span>&#160; <span class="keyword">const</span> Generator6&amp; g6, <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8,</div><div class="line"><a name="l13257"></a><span class="lineno">13257</span>&#160; <span class="keyword">const</span> Generator9&amp; g9)</div><div class="line"><a name="l13258"></a><span class="lineno">13258</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),</div><div class="line"><a name="l13259"></a><span class="lineno">13259</span>&#160; g9_(g9) {}</div><div class="line"><a name="l13260"></a><span class="lineno">13260</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l13261"></a><span class="lineno">13261</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9&gt;</div><div class="line"><a name="l13262"></a><span class="lineno">13262</span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8,</div><div class="line"><a name="l13263"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html#aafc7ce193dd88fc179d5a0c58eede7da">13263</a></span>&#160; T9&gt; &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13264"></a><span class="lineno">13264</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9&gt;</a> &gt;(</div><div class="line"><a name="l13265"></a><span class="lineno">13265</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator9.html">CartesianProductGenerator9&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9&gt;</a>(</div><div class="line"><a name="l13266"></a><span class="lineno">13266</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13267"></a><span class="lineno">13267</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13268"></a><span class="lineno">13268</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13269"></a><span class="lineno">13269</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13270"></a><span class="lineno">13270</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_),</div><div class="line"><a name="l13271"></a><span class="lineno">13271</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a> <span class="keyword">&gt;</span>(g6_),</div><div class="line"><a name="l13272"></a><span class="lineno">13272</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a> <span class="keyword">&gt;</span>(g7_),</div><div class="line"><a name="l13273"></a><span class="lineno">13273</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a> <span class="keyword">&gt;</span>(g8_),</div><div class="line"><a name="l13274"></a><span class="lineno">13274</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a> <span class="keyword">&gt;</span>(g9_)));</div><div class="line"><a name="l13275"></a><span class="lineno">13275</span>&#160; }</div><div class="line"><a name="l13276"></a><span class="lineno">13276</span>&#160;</div><div class="line"><a name="l13277"></a><span class="lineno">13277</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13278"></a><span class="lineno">13278</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13279"></a><span class="lineno">13279</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html">CartesianProductHolder9</a>&amp; other);</div><div class="line"><a name="l13280"></a><span class="lineno">13280</span>&#160;</div><div class="line"><a name="l13281"></a><span class="lineno">13281</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13282"></a><span class="lineno">13282</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13283"></a><span class="lineno">13283</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13284"></a><span class="lineno">13284</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13285"></a><span class="lineno">13285</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13286"></a><span class="lineno">13286</span>&#160; <span class="keyword">const</span> Generator6 g6_;</div><div class="line"><a name="l13287"></a><span class="lineno">13287</span>&#160; <span class="keyword">const</span> Generator7 g7_;</div><div class="line"><a name="l13288"></a><span class="lineno">13288</span>&#160; <span class="keyword">const</span> Generator8 g8_;</div><div class="line"><a name="l13289"></a><span class="lineno">13289</span>&#160; <span class="keyword">const</span> Generator9 g9_;</div><div class="line"><a name="l13290"></a><span class="lineno">13290</span>&#160;}; <span class="comment">// class CartesianProductHolder9</span></div><div class="line"><a name="l13291"></a><span class="lineno">13291</span>&#160;</div><div class="line"><a name="l13292"></a><span class="lineno">13292</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>Generator1, <span class="keyword">class </span>Generator2, <span class="keyword">class </span>Generator3,</div><div class="line"><a name="l13293"></a><span class="lineno">13293</span>&#160; <span class="keyword">class </span>Generator4, <span class="keyword">class </span>Generator5, <span class="keyword">class </span>Generator6, <span class="keyword">class </span>Generator7,</div><div class="line"><a name="l13294"></a><span class="lineno">13294</span>&#160; <span class="keyword">class </span>Generator8, <span class="keyword">class </span>Generator9, <span class="keyword">class </span>Generator10&gt;</div><div class="line"><a name="l13295"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html">13295</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html">CartesianProductHolder10</a> {</div><div class="line"><a name="l13296"></a><span class="lineno">13296</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13297"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html#a3255f824dd20e02b8bb718bb7d3d3634">13297</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html#a3255f824dd20e02b8bb718bb7d3d3634">CartesianProductHolder10</a>(<span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2,</div><div class="line"><a name="l13298"></a><span class="lineno">13298</span>&#160; <span class="keyword">const</span> Generator3&amp; g3, <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5,</div><div class="line"><a name="l13299"></a><span class="lineno">13299</span>&#160; <span class="keyword">const</span> Generator6&amp; g6, <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8,</div><div class="line"><a name="l13300"></a><span class="lineno">13300</span>&#160; <span class="keyword">const</span> Generator9&amp; g9, <span class="keyword">const</span> Generator10&amp; g10)</div><div class="line"><a name="l13301"></a><span class="lineno">13301</span>&#160; : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),</div><div class="line"><a name="l13302"></a><span class="lineno">13302</span>&#160; g9_(g9), g10_(g10) {}</div><div class="line"><a name="l13303"></a><span class="lineno">13303</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2, <span class="keyword">typename</span> T3, <span class="keyword">typename</span> T4, <span class="keyword">typename</span> T5,</div><div class="line"><a name="l13304"></a><span class="lineno">13304</span>&#160; <span class="keyword">typename</span> T6, <span class="keyword">typename</span> T7, <span class="keyword">typename</span> T8, <span class="keyword">typename</span> T9, <span class="keyword">typename</span> T10&gt;</div><div class="line"><a name="l13305"></a><span class="lineno">13305</span>&#160; <span class="keyword">operator</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9,</div><div class="line"><a name="l13306"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html#a1c9f9e026696dd2618bb7e9e19daf239">13306</a></span>&#160; T10&gt; &gt;() <span class="keyword">const</span> {</div><div class="line"><a name="l13307"></a><span class="lineno">13307</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator</a>&lt; ::std::tuple&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9,</div><div class="line"><a name="l13308"></a><span class="lineno">13308</span>&#160; T10&gt; &gt;(</div><div class="line"><a name="l13309"></a><span class="lineno">13309</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_generator10.html">CartesianProductGenerator10</a>&lt;T1, T2, T3, T4, T5, T6, T7, T8, T9,</div><div class="line"><a name="l13310"></a><span class="lineno">13310</span>&#160; T10&gt;(</div><div class="line"><a name="l13311"></a><span class="lineno">13311</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T1&gt;</a> <span class="keyword">&gt;</span>(g1_),</div><div class="line"><a name="l13312"></a><span class="lineno">13312</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T2&gt;</a> <span class="keyword">&gt;</span>(g2_),</div><div class="line"><a name="l13313"></a><span class="lineno">13313</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T3&gt;</a> <span class="keyword">&gt;</span>(g3_),</div><div class="line"><a name="l13314"></a><span class="lineno">13314</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T4&gt;</a> <span class="keyword">&gt;</span>(g4_),</div><div class="line"><a name="l13315"></a><span class="lineno">13315</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T5&gt;</a> <span class="keyword">&gt;</span>(g5_),</div><div class="line"><a name="l13316"></a><span class="lineno">13316</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T6&gt;</a> <span class="keyword">&gt;</span>(g6_),</div><div class="line"><a name="l13317"></a><span class="lineno">13317</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T7&gt;</a> <span class="keyword">&gt;</span>(g7_),</div><div class="line"><a name="l13318"></a><span class="lineno">13318</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T8&gt;</a> <span class="keyword">&gt;</span>(g8_),</div><div class="line"><a name="l13319"></a><span class="lineno">13319</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T9&gt;</a> <span class="keyword">&gt;</span>(g9_),</div><div class="line"><a name="l13320"></a><span class="lineno">13320</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classtesting_1_1internal_1_1_param_generator.html">ParamGenerator&lt;T10&gt;</a> <span class="keyword">&gt;</span>(g10_)));</div><div class="line"><a name="l13321"></a><span class="lineno">13321</span>&#160; }</div><div class="line"><a name="l13322"></a><span class="lineno">13322</span>&#160;</div><div class="line"><a name="l13323"></a><span class="lineno">13323</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13324"></a><span class="lineno">13324</span>&#160; <span class="comment">// No implementation - assignment is unsupported.</span></div><div class="line"><a name="l13325"></a><span class="lineno">13325</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html">CartesianProductHolder10</a>&amp; other);</div><div class="line"><a name="l13326"></a><span class="lineno">13326</span>&#160;</div><div class="line"><a name="l13327"></a><span class="lineno">13327</span>&#160; <span class="keyword">const</span> Generator1 g1_;</div><div class="line"><a name="l13328"></a><span class="lineno">13328</span>&#160; <span class="keyword">const</span> Generator2 g2_;</div><div class="line"><a name="l13329"></a><span class="lineno">13329</span>&#160; <span class="keyword">const</span> Generator3 g3_;</div><div class="line"><a name="l13330"></a><span class="lineno">13330</span>&#160; <span class="keyword">const</span> Generator4 g4_;</div><div class="line"><a name="l13331"></a><span class="lineno">13331</span>&#160; <span class="keyword">const</span> Generator5 g5_;</div><div class="line"><a name="l13332"></a><span class="lineno">13332</span>&#160; <span class="keyword">const</span> Generator6 g6_;</div><div class="line"><a name="l13333"></a><span class="lineno">13333</span>&#160; <span class="keyword">const</span> Generator7 g7_;</div><div class="line"><a name="l13334"></a><span class="lineno">13334</span>&#160; <span class="keyword">const</span> Generator8 g8_;</div><div class="line"><a name="l13335"></a><span class="lineno">13335</span>&#160; <span class="keyword">const</span> Generator9 g9_;</div><div class="line"><a name="l13336"></a><span class="lineno">13336</span>&#160; <span class="keyword">const</span> Generator10 g10_;</div><div class="line"><a name="l13337"></a><span class="lineno">13337</span>&#160;}; <span class="comment">// class CartesianProductHolder10</span></div><div class="line"><a name="l13338"></a><span class="lineno">13338</span>&#160;</div><div class="line"><a name="l13339"></a><span class="lineno">13339</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l13340"></a><span class="lineno">13340</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l13341"></a><span class="lineno">13341</span>&#160;</div><div class="line"><a name="l13342"></a><span class="lineno">13342</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_</span></div><div class="line"><a name="l13343"></a><span class="lineno">13343</span>&#160;</div><div class="line"><a name="l13344"></a><span class="lineno">13344</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l13345"></a><span class="lineno">13345</span>&#160;</div><div class="line"><a name="l13346"></a><span class="lineno">13346</span>&#160;<span class="comment">// Functions producing parameter generators.</span></div><div class="line"><a name="l13347"></a><span class="lineno">13347</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13348"></a><span class="lineno">13348</span>&#160;<span class="comment">// Google Test uses these generators to produce parameters for value-</span></div><div class="line"><a name="l13349"></a><span class="lineno">13349</span>&#160;<span class="comment">// parameterized tests. When a parameterized test suite is instantiated</span></div><div class="line"><a name="l13350"></a><span class="lineno">13350</span>&#160;<span class="comment">// with a particular generator, Google Test creates and runs tests</span></div><div class="line"><a name="l13351"></a><span class="lineno">13351</span>&#160;<span class="comment">// for each element in the sequence produced by the generator.</span></div><div class="line"><a name="l13352"></a><span class="lineno">13352</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13353"></a><span class="lineno">13353</span>&#160;<span class="comment">// In the following sample, tests from test suite FooTest are instantiated</span></div><div class="line"><a name="l13354"></a><span class="lineno">13354</span>&#160;<span class="comment">// each three times with parameter values 3, 5, and 8:</span></div><div class="line"><a name="l13355"></a><span class="lineno">13355</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13356"></a><span class="lineno">13356</span>&#160;<span class="comment">// class FooTest : public TestWithParam&lt;int&gt; { ... };</span></div><div class="line"><a name="l13357"></a><span class="lineno">13357</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13358"></a><span class="lineno">13358</span>&#160;<span class="comment">// TEST_P(FooTest, TestThis) {</span></div><div class="line"><a name="l13359"></a><span class="lineno">13359</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13360"></a><span class="lineno">13360</span>&#160;<span class="comment">// TEST_P(FooTest, TestThat) {</span></div><div class="line"><a name="l13361"></a><span class="lineno">13361</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13362"></a><span class="lineno">13362</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(TestSequence, FooTest, Values(3, 5, 8));</span></div><div class="line"><a name="l13363"></a><span class="lineno">13363</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13364"></a><span class="lineno">13364</span>&#160;</div><div class="line"><a name="l13365"></a><span class="lineno">13365</span>&#160;<span class="comment">// Range() returns generators providing sequences of values in a range.</span></div><div class="line"><a name="l13366"></a><span class="lineno">13366</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13367"></a><span class="lineno">13367</span>&#160;<span class="comment">// Synopsis:</span></div><div class="line"><a name="l13368"></a><span class="lineno">13368</span>&#160;<span class="comment">// Range(start, end)</span></div><div class="line"><a name="l13369"></a><span class="lineno">13369</span>&#160;<span class="comment">// - returns a generator producing a sequence of values {start, start+1,</span></div><div class="line"><a name="l13370"></a><span class="lineno">13370</span>&#160;<span class="comment">// start+2, ..., }.</span></div><div class="line"><a name="l13371"></a><span class="lineno">13371</span>&#160;<span class="comment">// Range(start, end, step)</span></div><div class="line"><a name="l13372"></a><span class="lineno">13372</span>&#160;<span class="comment">// - returns a generator producing a sequence of values {start, start+step,</span></div><div class="line"><a name="l13373"></a><span class="lineno">13373</span>&#160;<span class="comment">// start+step+step, ..., }.</span></div><div class="line"><a name="l13374"></a><span class="lineno">13374</span>&#160;<span class="comment">// Notes:</span></div><div class="line"><a name="l13375"></a><span class="lineno">13375</span>&#160;<span class="comment">// * The generated sequences never include end. For example, Range(1, 5)</span></div><div class="line"><a name="l13376"></a><span class="lineno">13376</span>&#160;<span class="comment">// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)</span></div><div class="line"><a name="l13377"></a><span class="lineno">13377</span>&#160;<span class="comment">// returns a generator producing {1, 3, 5, 7}.</span></div><div class="line"><a name="l13378"></a><span class="lineno">13378</span>&#160;<span class="comment">// * start and end must have the same type. That type may be any integral or</span></div><div class="line"><a name="l13379"></a><span class="lineno">13379</span>&#160;<span class="comment">// floating-point type or a user defined type satisfying these conditions:</span></div><div class="line"><a name="l13380"></a><span class="lineno">13380</span>&#160;<span class="comment">// * It must be assignable (have operator=() defined).</span></div><div class="line"><a name="l13381"></a><span class="lineno">13381</span>&#160;<span class="comment">// * It must have operator+() (operator+(int-compatible type) for</span></div><div class="line"><a name="l13382"></a><span class="lineno">13382</span>&#160;<span class="comment">// two-operand version).</span></div><div class="line"><a name="l13383"></a><span class="lineno">13383</span>&#160;<span class="comment">// * It must have operator&lt;() defined.</span></div><div class="line"><a name="l13384"></a><span class="lineno">13384</span>&#160;<span class="comment">// Elements in the resulting sequences will also have that type.</span></div><div class="line"><a name="l13385"></a><span class="lineno">13385</span>&#160;<span class="comment">// * Condition start &lt; end must be satisfied in order for resulting sequences</span></div><div class="line"><a name="l13386"></a><span class="lineno">13386</span>&#160;<span class="comment">// to contain any elements.</span></div><div class="line"><a name="l13387"></a><span class="lineno">13387</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13388"></a><span class="lineno">13388</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> IncrementT&gt;</div><div class="line"><a name="l13389"></a><span class="lineno"><a class="line" href="namespacetesting.html#a265ed70a86cf2d6641582c45ad9529e2">13389</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;T&gt;</a> <a class="code" href="namespacetesting.html#a265ed70a86cf2d6641582c45ad9529e2">Range</a>(T start, T end, IncrementT step) {</div><div class="line"><a name="l13390"></a><span class="lineno">13390</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;T&gt;</a>(</div><div class="line"><a name="l13391"></a><span class="lineno">13391</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_range_generator.html">internal::RangeGenerator&lt;T, IncrementT&gt;</a>(start, end, step));</div><div class="line"><a name="l13392"></a><span class="lineno">13392</span>&#160;}</div><div class="line"><a name="l13393"></a><span class="lineno">13393</span>&#160;</div><div class="line"><a name="l13394"></a><span class="lineno">13394</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l13395"></a><span class="lineno"><a class="line" href="namespacetesting.html#a56a45f85a1238dfc92e6fca03eb3a2e4">13395</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;T&gt;</a> <a class="code" href="namespacetesting.html#a265ed70a86cf2d6641582c45ad9529e2">Range</a>(T start, T end) {</div><div class="line"><a name="l13396"></a><span class="lineno">13396</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#a265ed70a86cf2d6641582c45ad9529e2">Range</a>(start, end, 1);</div><div class="line"><a name="l13397"></a><span class="lineno">13397</span>&#160;}</div><div class="line"><a name="l13398"></a><span class="lineno">13398</span>&#160;</div><div class="line"><a name="l13399"></a><span class="lineno">13399</span>&#160;<span class="comment">// ValuesIn() function allows generation of tests with parameters coming from</span></div><div class="line"><a name="l13400"></a><span class="lineno">13400</span>&#160;<span class="comment">// a container.</span></div><div class="line"><a name="l13401"></a><span class="lineno">13401</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13402"></a><span class="lineno">13402</span>&#160;<span class="comment">// Synopsis:</span></div><div class="line"><a name="l13403"></a><span class="lineno">13403</span>&#160;<span class="comment">// ValuesIn(const T (&amp;array)[N])</span></div><div class="line"><a name="l13404"></a><span class="lineno">13404</span>&#160;<span class="comment">// - returns a generator producing sequences with elements from</span></div><div class="line"><a name="l13405"></a><span class="lineno">13405</span>&#160;<span class="comment">// a C-style array.</span></div><div class="line"><a name="l13406"></a><span class="lineno">13406</span>&#160;<span class="comment">// ValuesIn(const Container&amp; container)</span></div><div class="line"><a name="l13407"></a><span class="lineno">13407</span>&#160;<span class="comment">// - returns a generator producing sequences with elements from</span></div><div class="line"><a name="l13408"></a><span class="lineno">13408</span>&#160;<span class="comment">// an STL-style container.</span></div><div class="line"><a name="l13409"></a><span class="lineno">13409</span>&#160;<span class="comment">// ValuesIn(Iterator begin, Iterator end)</span></div><div class="line"><a name="l13410"></a><span class="lineno">13410</span>&#160;<span class="comment">// - returns a generator producing sequences with elements from</span></div><div class="line"><a name="l13411"></a><span class="lineno">13411</span>&#160;<span class="comment">// a range [begin, end) defined by a pair of STL-style iterators. These</span></div><div class="line"><a name="l13412"></a><span class="lineno">13412</span>&#160;<span class="comment">// iterators can also be plain C pointers.</span></div><div class="line"><a name="l13413"></a><span class="lineno">13413</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13414"></a><span class="lineno">13414</span>&#160;<span class="comment">// Please note that ValuesIn copies the values from the containers</span></div><div class="line"><a name="l13415"></a><span class="lineno">13415</span>&#160;<span class="comment">// passed in and keeps them to generate tests in RUN_ALL_TESTS().</span></div><div class="line"><a name="l13416"></a><span class="lineno">13416</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13417"></a><span class="lineno">13417</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l13418"></a><span class="lineno">13418</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13419"></a><span class="lineno">13419</span>&#160;<span class="comment">// This instantiates tests from test suite StringTest</span></div><div class="line"><a name="l13420"></a><span class="lineno">13420</span>&#160;<span class="comment">// each with C-string values of &quot;foo&quot;, &quot;bar&quot;, and &quot;baz&quot;:</span></div><div class="line"><a name="l13421"></a><span class="lineno">13421</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13422"></a><span class="lineno">13422</span>&#160;<span class="comment">// const char* strings[] = {&quot;foo&quot;, &quot;bar&quot;, &quot;baz&quot;};</span></div><div class="line"><a name="l13423"></a><span class="lineno">13423</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(StringSequence, StringTest, ValuesIn(strings));</span></div><div class="line"><a name="l13424"></a><span class="lineno">13424</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13425"></a><span class="lineno">13425</span>&#160;<span class="comment">// This instantiates tests from test suite StlStringTest</span></div><div class="line"><a name="l13426"></a><span class="lineno">13426</span>&#160;<span class="comment">// each with STL strings with values &quot;a&quot; and &quot;b&quot;:</span></div><div class="line"><a name="l13427"></a><span class="lineno">13427</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13428"></a><span class="lineno">13428</span>&#160;<span class="comment">// ::std::vector&lt; ::std::string&gt; GetParameterStrings() {</span></div><div class="line"><a name="l13429"></a><span class="lineno">13429</span>&#160;<span class="comment">// ::std::vector&lt; ::std::string&gt; v;</span></div><div class="line"><a name="l13430"></a><span class="lineno">13430</span>&#160;<span class="comment">// v.push_back(&quot;a&quot;);</span></div><div class="line"><a name="l13431"></a><span class="lineno">13431</span>&#160;<span class="comment">// v.push_back(&quot;b&quot;);</span></div><div class="line"><a name="l13432"></a><span class="lineno">13432</span>&#160;<span class="comment">// return v;</span></div><div class="line"><a name="l13433"></a><span class="lineno">13433</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13434"></a><span class="lineno">13434</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13435"></a><span class="lineno">13435</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(CharSequence,</span></div><div class="line"><a name="l13436"></a><span class="lineno">13436</span>&#160;<span class="comment">// StlStringTest,</span></div><div class="line"><a name="l13437"></a><span class="lineno">13437</span>&#160;<span class="comment">// ValuesIn(GetParameterStrings()));</span></div><div class="line"><a name="l13438"></a><span class="lineno">13438</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13439"></a><span class="lineno">13439</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13440"></a><span class="lineno">13440</span>&#160;<span class="comment">// This will also instantiate tests from CharTest</span></div><div class="line"><a name="l13441"></a><span class="lineno">13441</span>&#160;<span class="comment">// each with parameter values &#39;a&#39; and &#39;b&#39;:</span></div><div class="line"><a name="l13442"></a><span class="lineno">13442</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13443"></a><span class="lineno">13443</span>&#160;<span class="comment">// ::std::list&lt;char&gt; GetParameterChars() {</span></div><div class="line"><a name="l13444"></a><span class="lineno">13444</span>&#160;<span class="comment">// ::std::list&lt;char&gt; list;</span></div><div class="line"><a name="l13445"></a><span class="lineno">13445</span>&#160;<span class="comment">// list.push_back(&#39;a&#39;);</span></div><div class="line"><a name="l13446"></a><span class="lineno">13446</span>&#160;<span class="comment">// list.push_back(&#39;b&#39;);</span></div><div class="line"><a name="l13447"></a><span class="lineno">13447</span>&#160;<span class="comment">// return list;</span></div><div class="line"><a name="l13448"></a><span class="lineno">13448</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13449"></a><span class="lineno">13449</span>&#160;<span class="comment">// ::std::list&lt;char&gt; l = GetParameterChars();</span></div><div class="line"><a name="l13450"></a><span class="lineno">13450</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(CharSequence2,</span></div><div class="line"><a name="l13451"></a><span class="lineno">13451</span>&#160;<span class="comment">// CharTest,</span></div><div class="line"><a name="l13452"></a><span class="lineno">13452</span>&#160;<span class="comment">// ValuesIn(l.begin(), l.end()));</span></div><div class="line"><a name="l13453"></a><span class="lineno">13453</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13454"></a><span class="lineno">13454</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ForwardIterator&gt;</div><div class="line"><a name="l13455"></a><span class="lineno">13455</span>&#160;internal::ParamGenerator&lt;</div><div class="line"><a name="l13456"></a><span class="lineno">13456</span>&#160; typename ::testing::internal::IteratorTraits&lt;ForwardIterator&gt;::value_type&gt;</div><div class="line"><a name="l13457"></a><span class="lineno"><a class="line" href="namespacetesting.html#a96240380ae4d3b4855d07de3b84fb336">13457</a></span>&#160;<a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(ForwardIterator begin, ForwardIterator end) {</div><div class="line"><a name="l13458"></a><span class="lineno">13458</span>&#160; <span class="keyword">typedef</span> typename ::testing::internal::IteratorTraits&lt;ForwardIterator&gt;</div><div class="line"><a name="l13459"></a><span class="lineno">13459</span>&#160; ::value_type ParamType;</div><div class="line"><a name="l13460"></a><span class="lineno">13460</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;ParamType&gt;</a>(</div><div class="line"><a name="l13461"></a><span class="lineno">13461</span>&#160; <span class="keyword">new</span> <a class="code" href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html">internal::ValuesInIteratorRangeGenerator&lt;ParamType&gt;</a>(begin, end));</div><div class="line"><a name="l13462"></a><span class="lineno">13462</span>&#160;}</div><div class="line"><a name="l13463"></a><span class="lineno">13463</span>&#160;</div><div class="line"><a name="l13464"></a><span class="lineno">13464</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l13465"></a><span class="lineno"><a class="line" href="namespacetesting.html#a0b9ea6594ac06ad5d9eba2511ffa0fb7">13465</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;T&gt;</a> <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(<span class="keyword">const</span> T (&amp;array)[N]) {</div><div class="line"><a name="l13466"></a><span class="lineno">13466</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(array, array + N);</div><div class="line"><a name="l13467"></a><span class="lineno">13467</span>&#160;}</div><div class="line"><a name="l13468"></a><span class="lineno">13468</span>&#160;</div><div class="line"><a name="l13469"></a><span class="lineno">13469</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Container&gt;</div><div class="line"><a name="l13470"></a><span class="lineno"><a class="line" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">13470</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;typename Container::value_type&gt;</a> <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(</div><div class="line"><a name="l13471"></a><span class="lineno">13471</span>&#160; <span class="keyword">const</span> Container&amp; container) {</div><div class="line"><a name="l13472"></a><span class="lineno">13472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">ValuesIn</a>(container.begin(), container.end());</div><div class="line"><a name="l13473"></a><span class="lineno">13473</span>&#160;}</div><div class="line"><a name="l13474"></a><span class="lineno">13474</span>&#160;</div><div class="line"><a name="l13475"></a><span class="lineno">13475</span>&#160;<span class="comment">// Values() allows generating tests from explicitly specified list of</span></div><div class="line"><a name="l13476"></a><span class="lineno">13476</span>&#160;<span class="comment">// parameters.</span></div><div class="line"><a name="l13477"></a><span class="lineno">13477</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13478"></a><span class="lineno">13478</span>&#160;<span class="comment">// Synopsis:</span></div><div class="line"><a name="l13479"></a><span class="lineno">13479</span>&#160;<span class="comment">// Values(T v1, T v2, ..., T vN)</span></div><div class="line"><a name="l13480"></a><span class="lineno">13480</span>&#160;<span class="comment">// - returns a generator producing sequences with elements v1, v2, ..., vN.</span></div><div class="line"><a name="l13481"></a><span class="lineno">13481</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13482"></a><span class="lineno">13482</span>&#160;<span class="comment">// For example, this instantiates tests from test suite BarTest each</span></div><div class="line"><a name="l13483"></a><span class="lineno">13483</span>&#160;<span class="comment">// with values &quot;one&quot;, &quot;two&quot;, and &quot;three&quot;:</span></div><div class="line"><a name="l13484"></a><span class="lineno">13484</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13485"></a><span class="lineno">13485</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(NumSequence,</span></div><div class="line"><a name="l13486"></a><span class="lineno">13486</span>&#160;<span class="comment">// BarTest,</span></div><div class="line"><a name="l13487"></a><span class="lineno">13487</span>&#160;<span class="comment">// Values(&quot;one&quot;, &quot;two&quot;, &quot;three&quot;));</span></div><div class="line"><a name="l13488"></a><span class="lineno">13488</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13489"></a><span class="lineno">13489</span>&#160;<span class="comment">// This instantiates tests from test suite BazTest each with values 1, 2, 3.5.</span></div><div class="line"><a name="l13490"></a><span class="lineno">13490</span>&#160;<span class="comment">// The exact type of values will depend on the type of parameter in BazTest.</span></div><div class="line"><a name="l13491"></a><span class="lineno">13491</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13492"></a><span class="lineno">13492</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));</span></div><div class="line"><a name="l13493"></a><span class="lineno">13493</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13494"></a><span class="lineno">13494</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13495"></a><span class="lineno">13495</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span>... T&gt;</div><div class="line"><a name="l13496"></a><span class="lineno"><a class="line" href="namespacetesting.html#a374d4e5fbb4c938058fbe81d4c7ff6a6">13496</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_value_array.html">internal::ValueArray</a>&lt;T...&gt; <a class="code" href="namespacetesting.html#a374d4e5fbb4c938058fbe81d4c7ff6a6">Values</a>(T... v) {</div><div class="line"><a name="l13497"></a><span class="lineno">13497</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_value_array.html">internal::ValueArray</a>&lt;T...&gt;(std::move(v)...);</div><div class="line"><a name="l13498"></a><span class="lineno">13498</span>&#160;}</div><div class="line"><a name="l13499"></a><span class="lineno">13499</span>&#160;</div><div class="line"><a name="l13500"></a><span class="lineno">13500</span>&#160;<span class="comment">// Bool() allows generating tests with parameters in a set of (false, true).</span></div><div class="line"><a name="l13501"></a><span class="lineno">13501</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13502"></a><span class="lineno">13502</span>&#160;<span class="comment">// Synopsis:</span></div><div class="line"><a name="l13503"></a><span class="lineno">13503</span>&#160;<span class="comment">// Bool()</span></div><div class="line"><a name="l13504"></a><span class="lineno">13504</span>&#160;<span class="comment">// - returns a generator producing sequences with elements {false, true}.</span></div><div class="line"><a name="l13505"></a><span class="lineno">13505</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13506"></a><span class="lineno">13506</span>&#160;<span class="comment">// It is useful when testing code that depends on Boolean flags. Combinations</span></div><div class="line"><a name="l13507"></a><span class="lineno">13507</span>&#160;<span class="comment">// of multiple flags can be tested when several Bool()&#39;s are combined using</span></div><div class="line"><a name="l13508"></a><span class="lineno">13508</span>&#160;<span class="comment">// Combine() function.</span></div><div class="line"><a name="l13509"></a><span class="lineno">13509</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13510"></a><span class="lineno">13510</span>&#160;<span class="comment">// In the following example all tests in the test suite FlagDependentTest</span></div><div class="line"><a name="l13511"></a><span class="lineno">13511</span>&#160;<span class="comment">// will be instantiated twice with parameters false and true.</span></div><div class="line"><a name="l13512"></a><span class="lineno">13512</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13513"></a><span class="lineno">13513</span>&#160;<span class="comment">// class FlagDependentTest : public testing::TestWithParam&lt;bool&gt; {</span></div><div class="line"><a name="l13514"></a><span class="lineno">13514</span>&#160;<span class="comment">// virtual void SetUp() {</span></div><div class="line"><a name="l13515"></a><span class="lineno">13515</span>&#160;<span class="comment">// external_flag = GetParam();</span></div><div class="line"><a name="l13516"></a><span class="lineno">13516</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13517"></a><span class="lineno">13517</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13518"></a><span class="lineno">13518</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(BoolSequence, FlagDependentTest, Bool());</span></div><div class="line"><a name="l13519"></a><span class="lineno">13519</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13520"></a><span class="lineno"><a class="line" href="namespacetesting.html#aa9f9150ed43f949c8a6bacf3f04c03ce">13520</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="classtesting_1_1internal_1_1_param_generator.html">internal::ParamGenerator&lt;bool&gt;</a> <a class="code" href="namespacetesting.html#aa9f9150ed43f949c8a6bacf3f04c03ce">Bool</a>() {</div><div class="line"><a name="l13521"></a><span class="lineno">13521</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting.html#a374d4e5fbb4c938058fbe81d4c7ff6a6">Values</a>(<span class="keyword">false</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l13522"></a><span class="lineno">13522</span>&#160;}</div><div class="line"><a name="l13523"></a><span class="lineno">13523</span>&#160;</div><div class="line"><a name="l13524"></a><span class="lineno">13524</span>&#160;<span class="comment">// Combine() allows the user to combine two or more sequences to produce</span></div><div class="line"><a name="l13525"></a><span class="lineno">13525</span>&#160;<span class="comment">// values of a Cartesian product of those sequences&#39; elements.</span></div><div class="line"><a name="l13526"></a><span class="lineno">13526</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13527"></a><span class="lineno">13527</span>&#160;<span class="comment">// Synopsis:</span></div><div class="line"><a name="l13528"></a><span class="lineno">13528</span>&#160;<span class="comment">// Combine(gen1, gen2, ..., genN)</span></div><div class="line"><a name="l13529"></a><span class="lineno">13529</span>&#160;<span class="comment">// - returns a generator producing sequences with elements coming from</span></div><div class="line"><a name="l13530"></a><span class="lineno">13530</span>&#160;<span class="comment">// the Cartesian product of elements from the sequences generated by</span></div><div class="line"><a name="l13531"></a><span class="lineno">13531</span>&#160;<span class="comment">// gen1, gen2, ..., genN. The sequence elements will have a type of</span></div><div class="line"><a name="l13532"></a><span class="lineno">13532</span>&#160;<span class="comment">// std::tuple&lt;T1, T2, ..., TN&gt; where T1, T2, ..., TN are the types</span></div><div class="line"><a name="l13533"></a><span class="lineno">13533</span>&#160;<span class="comment">// of elements from sequences produces by gen1, gen2, ..., genN.</span></div><div class="line"><a name="l13534"></a><span class="lineno">13534</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13535"></a><span class="lineno">13535</span>&#160;<span class="comment">// Combine can have up to 10 arguments.</span></div><div class="line"><a name="l13536"></a><span class="lineno">13536</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13537"></a><span class="lineno">13537</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l13538"></a><span class="lineno">13538</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13539"></a><span class="lineno">13539</span>&#160;<span class="comment">// This will instantiate tests in test suite AnimalTest each one with</span></div><div class="line"><a name="l13540"></a><span class="lineno">13540</span>&#160;<span class="comment">// the parameter values tuple(&quot;cat&quot;, BLACK), tuple(&quot;cat&quot;, WHITE),</span></div><div class="line"><a name="l13541"></a><span class="lineno">13541</span>&#160;<span class="comment">// tuple(&quot;dog&quot;, BLACK), and tuple(&quot;dog&quot;, WHITE):</span></div><div class="line"><a name="l13542"></a><span class="lineno">13542</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13543"></a><span class="lineno">13543</span>&#160;<span class="comment">// enum Color { BLACK, GRAY, WHITE };</span></div><div class="line"><a name="l13544"></a><span class="lineno">13544</span>&#160;<span class="comment">// class AnimalTest</span></div><div class="line"><a name="l13545"></a><span class="lineno">13545</span>&#160;<span class="comment">// : public testing::TestWithParam&lt;std::tuple&lt;const char*, Color&gt; &gt; {...};</span></div><div class="line"><a name="l13546"></a><span class="lineno">13546</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13547"></a><span class="lineno">13547</span>&#160;<span class="comment">// TEST_P(AnimalTest, AnimalLooksNice) {...}</span></div><div class="line"><a name="l13548"></a><span class="lineno">13548</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13549"></a><span class="lineno">13549</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(AnimalVariations, AnimalTest,</span></div><div class="line"><a name="l13550"></a><span class="lineno">13550</span>&#160;<span class="comment">// Combine(Values(&quot;cat&quot;, &quot;dog&quot;),</span></div><div class="line"><a name="l13551"></a><span class="lineno">13551</span>&#160;<span class="comment">// Values(BLACK, WHITE)));</span></div><div class="line"><a name="l13552"></a><span class="lineno">13552</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13553"></a><span class="lineno">13553</span>&#160;<span class="comment">// This will instantiate tests in FlagDependentTest with all variations of two</span></div><div class="line"><a name="l13554"></a><span class="lineno">13554</span>&#160;<span class="comment">// Boolean flags:</span></div><div class="line"><a name="l13555"></a><span class="lineno">13555</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13556"></a><span class="lineno">13556</span>&#160;<span class="comment">// class FlagDependentTest</span></div><div class="line"><a name="l13557"></a><span class="lineno">13557</span>&#160;<span class="comment">// : public testing::TestWithParam&lt;std::tuple&lt;bool, bool&gt; &gt; {</span></div><div class="line"><a name="l13558"></a><span class="lineno">13558</span>&#160;<span class="comment">// virtual void SetUp() {</span></div><div class="line"><a name="l13559"></a><span class="lineno">13559</span>&#160;<span class="comment">// // Assigns external_flag_1 and external_flag_2 values from the tuple.</span></div><div class="line"><a name="l13560"></a><span class="lineno">13560</span>&#160;<span class="comment">// std::tie(external_flag_1, external_flag_2) = GetParam();</span></div><div class="line"><a name="l13561"></a><span class="lineno">13561</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13562"></a><span class="lineno">13562</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l13563"></a><span class="lineno">13563</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13564"></a><span class="lineno">13564</span>&#160;<span class="comment">// TEST_P(FlagDependentTest, TestFeature1) {</span></div><div class="line"><a name="l13565"></a><span class="lineno">13565</span>&#160;<span class="comment">// // Test your code using external_flag_1 and external_flag_2 here.</span></div><div class="line"><a name="l13566"></a><span class="lineno">13566</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13567"></a><span class="lineno">13567</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(TwoBoolSequence, FlagDependentTest,</span></div><div class="line"><a name="l13568"></a><span class="lineno">13568</span>&#160;<span class="comment">// Combine(Bool(), Bool()));</span></div><div class="line"><a name="l13569"></a><span class="lineno">13569</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13570"></a><span class="lineno">13570</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2&gt;</div><div class="line"><a name="l13571"></a><span class="lineno"><a class="line" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">13571</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">internal::CartesianProductHolder2&lt;Generator1, Generator2&gt;</a> <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13572"></a><span class="lineno">13572</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2) {</div><div class="line"><a name="l13573"></a><span class="lineno">13573</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">internal::CartesianProductHolder2&lt;Generator1, Generator2&gt;</a>(</div><div class="line"><a name="l13574"></a><span class="lineno">13574</span>&#160; g1, g2);</div><div class="line"><a name="l13575"></a><span class="lineno">13575</span>&#160;}</div><div class="line"><a name="l13576"></a><span class="lineno">13576</span>&#160;</div><div class="line"><a name="l13577"></a><span class="lineno">13577</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3&gt;</div><div class="line"><a name="l13578"></a><span class="lineno"><a class="line" href="namespacetesting.html#a77b89180fd846e275236409d9704eda2">13578</a></span>&#160;<a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">internal::CartesianProductHolder3&lt;Generator1, Generator2, Generator3&gt;</a> <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13579"></a><span class="lineno">13579</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3) {</div><div class="line"><a name="l13580"></a><span class="lineno">13580</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">internal::CartesianProductHolder3&lt;Generator1, Generator2, Generator3&gt;</a>(</div><div class="line"><a name="l13581"></a><span class="lineno">13581</span>&#160; g1, g2, g3);</div><div class="line"><a name="l13582"></a><span class="lineno">13582</span>&#160;}</div><div class="line"><a name="l13583"></a><span class="lineno">13583</span>&#160;</div><div class="line"><a name="l13584"></a><span class="lineno">13584</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13585"></a><span class="lineno">13585</span>&#160; <span class="keyword">typename</span> Generator4&gt;</div><div class="line"><a name="l13586"></a><span class="lineno">13586</span>&#160;internal::CartesianProductHolder4&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13587"></a><span class="lineno"><a class="line" href="namespacetesting.html#abf420810fcd8190a98c2927862805a3f">13587</a></span>&#160; Generator4&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13588"></a><span class="lineno">13588</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13589"></a><span class="lineno">13589</span>&#160; <span class="keyword">const</span> Generator4&amp; g4) {</div><div class="line"><a name="l13590"></a><span class="lineno">13590</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder4.html">internal::CartesianProductHolder4</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13591"></a><span class="lineno">13591</span>&#160; Generator4&gt;(</div><div class="line"><a name="l13592"></a><span class="lineno">13592</span>&#160; g1, g2, g3, g4);</div><div class="line"><a name="l13593"></a><span class="lineno">13593</span>&#160;}</div><div class="line"><a name="l13594"></a><span class="lineno">13594</span>&#160;</div><div class="line"><a name="l13595"></a><span class="lineno">13595</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13596"></a><span class="lineno">13596</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5&gt;</div><div class="line"><a name="l13597"></a><span class="lineno">13597</span>&#160;internal::CartesianProductHolder5&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13598"></a><span class="lineno"><a class="line" href="namespacetesting.html#a81505186d64f5b5763a0e268bc2e5650">13598</a></span>&#160; Generator4, Generator5&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13599"></a><span class="lineno">13599</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13600"></a><span class="lineno">13600</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5) {</div><div class="line"><a name="l13601"></a><span class="lineno">13601</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder5.html">internal::CartesianProductHolder5</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13602"></a><span class="lineno">13602</span>&#160; Generator4, Generator5&gt;(</div><div class="line"><a name="l13603"></a><span class="lineno">13603</span>&#160; g1, g2, g3, g4, g5);</div><div class="line"><a name="l13604"></a><span class="lineno">13604</span>&#160;}</div><div class="line"><a name="l13605"></a><span class="lineno">13605</span>&#160;</div><div class="line"><a name="l13606"></a><span class="lineno">13606</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13607"></a><span class="lineno">13607</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5, <span class="keyword">typename</span> Generator6&gt;</div><div class="line"><a name="l13608"></a><span class="lineno">13608</span>&#160;internal::CartesianProductHolder6&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13609"></a><span class="lineno"><a class="line" href="namespacetesting.html#adccda33f9b3ad18896cb341979fe12b4">13609</a></span>&#160; Generator4, Generator5, Generator6&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13610"></a><span class="lineno">13610</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13611"></a><span class="lineno">13611</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5, <span class="keyword">const</span> Generator6&amp; g6) {</div><div class="line"><a name="l13612"></a><span class="lineno">13612</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder6.html">internal::CartesianProductHolder6</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13613"></a><span class="lineno">13613</span>&#160; Generator4, Generator5, Generator6&gt;(</div><div class="line"><a name="l13614"></a><span class="lineno">13614</span>&#160; g1, g2, g3, g4, g5, g6);</div><div class="line"><a name="l13615"></a><span class="lineno">13615</span>&#160;}</div><div class="line"><a name="l13616"></a><span class="lineno">13616</span>&#160;</div><div class="line"><a name="l13617"></a><span class="lineno">13617</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13618"></a><span class="lineno">13618</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5, <span class="keyword">typename</span> Generator6,</div><div class="line"><a name="l13619"></a><span class="lineno">13619</span>&#160; <span class="keyword">typename</span> Generator7&gt;</div><div class="line"><a name="l13620"></a><span class="lineno">13620</span>&#160;internal::CartesianProductHolder7&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13621"></a><span class="lineno"><a class="line" href="namespacetesting.html#a314759a93c251ca78b75c7f3ae8eda80">13621</a></span>&#160; Generator4, Generator5, Generator6, Generator7&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13622"></a><span class="lineno">13622</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13623"></a><span class="lineno">13623</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5, <span class="keyword">const</span> Generator6&amp; g6,</div><div class="line"><a name="l13624"></a><span class="lineno">13624</span>&#160; <span class="keyword">const</span> Generator7&amp; g7) {</div><div class="line"><a name="l13625"></a><span class="lineno">13625</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder7.html">internal::CartesianProductHolder7</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13626"></a><span class="lineno">13626</span>&#160; Generator4, Generator5, Generator6, Generator7&gt;(</div><div class="line"><a name="l13627"></a><span class="lineno">13627</span>&#160; g1, g2, g3, g4, g5, g6, g7);</div><div class="line"><a name="l13628"></a><span class="lineno">13628</span>&#160;}</div><div class="line"><a name="l13629"></a><span class="lineno">13629</span>&#160;</div><div class="line"><a name="l13630"></a><span class="lineno">13630</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13631"></a><span class="lineno">13631</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5, <span class="keyword">typename</span> Generator6,</div><div class="line"><a name="l13632"></a><span class="lineno">13632</span>&#160; <span class="keyword">typename</span> Generator7, <span class="keyword">typename</span> Generator8&gt;</div><div class="line"><a name="l13633"></a><span class="lineno">13633</span>&#160;internal::CartesianProductHolder8&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13634"></a><span class="lineno"><a class="line" href="namespacetesting.html#ac5508abb9d05e22332c792d101c13b2b">13634</a></span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13635"></a><span class="lineno">13635</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13636"></a><span class="lineno">13636</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5, <span class="keyword">const</span> Generator6&amp; g6,</div><div class="line"><a name="l13637"></a><span class="lineno">13637</span>&#160; <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8) {</div><div class="line"><a name="l13638"></a><span class="lineno">13638</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder8.html">internal::CartesianProductHolder8</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13639"></a><span class="lineno">13639</span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8&gt;(</div><div class="line"><a name="l13640"></a><span class="lineno">13640</span>&#160; g1, g2, g3, g4, g5, g6, g7, g8);</div><div class="line"><a name="l13641"></a><span class="lineno">13641</span>&#160;}</div><div class="line"><a name="l13642"></a><span class="lineno">13642</span>&#160;</div><div class="line"><a name="l13643"></a><span class="lineno">13643</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13644"></a><span class="lineno">13644</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5, <span class="keyword">typename</span> Generator6,</div><div class="line"><a name="l13645"></a><span class="lineno">13645</span>&#160; <span class="keyword">typename</span> Generator7, <span class="keyword">typename</span> Generator8, <span class="keyword">typename</span> Generator9&gt;</div><div class="line"><a name="l13646"></a><span class="lineno">13646</span>&#160;internal::CartesianProductHolder9&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13647"></a><span class="lineno">13647</span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8,</div><div class="line"><a name="l13648"></a><span class="lineno"><a class="line" href="namespacetesting.html#a928ed7d1e8dd1dde0da5d7d3838384d2">13648</a></span>&#160; Generator9&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13649"></a><span class="lineno">13649</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13650"></a><span class="lineno">13650</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5, <span class="keyword">const</span> Generator6&amp; g6,</div><div class="line"><a name="l13651"></a><span class="lineno">13651</span>&#160; <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8, <span class="keyword">const</span> Generator9&amp; g9) {</div><div class="line"><a name="l13652"></a><span class="lineno">13652</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder9.html">internal::CartesianProductHolder9</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13653"></a><span class="lineno">13653</span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8, Generator9&gt;(</div><div class="line"><a name="l13654"></a><span class="lineno">13654</span>&#160; g1, g2, g3, g4, g5, g6, g7, g8, g9);</div><div class="line"><a name="l13655"></a><span class="lineno">13655</span>&#160;}</div><div class="line"><a name="l13656"></a><span class="lineno">13656</span>&#160;</div><div class="line"><a name="l13657"></a><span class="lineno">13657</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator1, <span class="keyword">typename</span> Generator2, <span class="keyword">typename</span> Generator3,</div><div class="line"><a name="l13658"></a><span class="lineno">13658</span>&#160; <span class="keyword">typename</span> Generator4, <span class="keyword">typename</span> Generator5, <span class="keyword">typename</span> Generator6,</div><div class="line"><a name="l13659"></a><span class="lineno">13659</span>&#160; <span class="keyword">typename</span> Generator7, <span class="keyword">typename</span> Generator8, <span class="keyword">typename</span> Generator9,</div><div class="line"><a name="l13660"></a><span class="lineno">13660</span>&#160; <span class="keyword">typename</span> Generator10&gt;</div><div class="line"><a name="l13661"></a><span class="lineno">13661</span>&#160;internal::CartesianProductHolder10&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13662"></a><span class="lineno">13662</span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,</div><div class="line"><a name="l13663"></a><span class="lineno"><a class="line" href="namespacetesting.html#a0590cd15c5bafaea9f5d2b1061e0a28b">13663</a></span>&#160; Generator10&gt; <a class="code" href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">Combine</a>(</div><div class="line"><a name="l13664"></a><span class="lineno">13664</span>&#160; <span class="keyword">const</span> Generator1&amp; g1, <span class="keyword">const</span> Generator2&amp; g2, <span class="keyword">const</span> Generator3&amp; g3,</div><div class="line"><a name="l13665"></a><span class="lineno">13665</span>&#160; <span class="keyword">const</span> Generator4&amp; g4, <span class="keyword">const</span> Generator5&amp; g5, <span class="keyword">const</span> Generator6&amp; g6,</div><div class="line"><a name="l13666"></a><span class="lineno">13666</span>&#160; <span class="keyword">const</span> Generator7&amp; g7, <span class="keyword">const</span> Generator8&amp; g8, <span class="keyword">const</span> Generator9&amp; g9,</div><div class="line"><a name="l13667"></a><span class="lineno">13667</span>&#160; <span class="keyword">const</span> Generator10&amp; g10) {</div><div class="line"><a name="l13668"></a><span class="lineno">13668</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1internal_1_1_cartesian_product_holder10.html">internal::CartesianProductHolder10</a>&lt;Generator1, Generator2, Generator3,</div><div class="line"><a name="l13669"></a><span class="lineno">13669</span>&#160; Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,</div><div class="line"><a name="l13670"></a><span class="lineno">13670</span>&#160; Generator10&gt;(</div><div class="line"><a name="l13671"></a><span class="lineno">13671</span>&#160; g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);</div><div class="line"><a name="l13672"></a><span class="lineno">13672</span>&#160;}</div><div class="line"><a name="l13673"></a><span class="lineno">13673</span>&#160;</div><div class="line"><a name="l13674"></a><span class="lineno"><a class="line" href="gtest_8h.html#a1adc861b311e3fbd97bcc72e0b0f5962">13674</a></span>&#160;<span class="preprocessor">#define TEST_P(test_suite_name, test_name) \</span></div><div class="line"><a name="l13675"></a><span class="lineno">13675</span>&#160;<span class="preprocessor"> class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \</span></div><div class="line"><a name="l13676"></a><span class="lineno">13676</span>&#160;<span class="preprocessor"> : public test_suite_name { \</span></div><div class="line"><a name="l13677"></a><span class="lineno">13677</span>&#160;<span class="preprocessor"> public: \</span></div><div class="line"><a name="l13678"></a><span class="lineno">13678</span>&#160;<span class="preprocessor"> GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \</span></div><div class="line"><a name="l13679"></a><span class="lineno">13679</span>&#160;<span class="preprocessor"> virtual void TestBody(); \</span></div><div class="line"><a name="l13680"></a><span class="lineno">13680</span>&#160;<span class="preprocessor"> \</span></div><div class="line"><a name="l13681"></a><span class="lineno">13681</span>&#160;<span class="preprocessor"> private: \</span></div><div class="line"><a name="l13682"></a><span class="lineno">13682</span>&#160;<span class="preprocessor"> static int AddToRegistry() { \</span></div><div class="line"><a name="l13683"></a><span class="lineno">13683</span>&#160;<span class="preprocessor"> ::testing::UnitTest::GetInstance() \</span></div><div class="line"><a name="l13684"></a><span class="lineno">13684</span>&#160;<span class="preprocessor"> -&gt;parameterized_test_registry() \</span></div><div class="line"><a name="l13685"></a><span class="lineno">13685</span>&#160;<span class="preprocessor"> .GetTestSuitePatternHolder&lt;test_suite_name&gt;( \</span></div><div class="line"><a name="l13686"></a><span class="lineno">13686</span>&#160;<span class="preprocessor"> #test_suite_name, \</span></div><div class="line"><a name="l13687"></a><span class="lineno">13687</span>&#160;<span class="preprocessor"> ::testing::internal::CodeLocation(__FILE__, __LINE__)) \</span></div><div class="line"><a name="l13688"></a><span class="lineno">13688</span>&#160;<span class="preprocessor"> -&gt;AddTestPattern( \</span></div><div class="line"><a name="l13689"></a><span class="lineno">13689</span>&#160;<span class="preprocessor"> GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \</span></div><div class="line"><a name="l13690"></a><span class="lineno">13690</span>&#160;<span class="preprocessor"> new ::testing::internal::TestMetaFactory&lt;GTEST_TEST_CLASS_NAME_( \</span></div><div class="line"><a name="l13691"></a><span class="lineno">13691</span>&#160;<span class="preprocessor"> test_suite_name, test_name)&gt;()); \</span></div><div class="line"><a name="l13692"></a><span class="lineno">13692</span>&#160;<span class="preprocessor"> return 0; \</span></div><div class="line"><a name="l13693"></a><span class="lineno">13693</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l13694"></a><span class="lineno">13694</span>&#160;<span class="preprocessor"> static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \</span></div><div class="line"><a name="l13695"></a><span class="lineno">13695</span>&#160;<span class="preprocessor"> GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \</span></div><div class="line"><a name="l13696"></a><span class="lineno">13696</span>&#160;<span class="preprocessor"> test_name)); \</span></div><div class="line"><a name="l13697"></a><span class="lineno">13697</span>&#160;<span class="preprocessor"> }; \</span></div><div class="line"><a name="l13698"></a><span class="lineno">13698</span>&#160;<span class="preprocessor"> int GTEST_TEST_CLASS_NAME_(test_suite_name, \</span></div><div class="line"><a name="l13699"></a><span class="lineno">13699</span>&#160;<span class="preprocessor"> test_name)::gtest_registering_dummy_ = \</span></div><div class="line"><a name="l13700"></a><span class="lineno">13700</span>&#160;<span class="preprocessor"> GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \</span></div><div class="line"><a name="l13701"></a><span class="lineno">13701</span>&#160;<span class="preprocessor"> void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()</span></div><div class="line"><a name="l13702"></a><span class="lineno">13702</span>&#160;</div><div class="line"><a name="l13703"></a><span class="lineno">13703</span>&#160;<span class="comment">// The optional last argument to INSTANTIATE_TEST_SUITE_P allows the user</span></div><div class="line"><a name="l13704"></a><span class="lineno">13704</span>&#160;<span class="comment">// to specify a function or functor that generates custom test name suffixes</span></div><div class="line"><a name="l13705"></a><span class="lineno">13705</span>&#160;<span class="comment">// based on the test parameters. The function should accept one argument of</span></div><div class="line"><a name="l13706"></a><span class="lineno">13706</span>&#160;<span class="comment">// type testing::TestParamInfo&lt;class ParamType&gt;, and return std::string.</span></div><div class="line"><a name="l13707"></a><span class="lineno">13707</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13708"></a><span class="lineno">13708</span>&#160;<span class="comment">// testing::PrintToStringParamName is a builtin test suffix generator that</span></div><div class="line"><a name="l13709"></a><span class="lineno">13709</span>&#160;<span class="comment">// returns the value of testing::PrintToString(GetParam()).</span></div><div class="line"><a name="l13710"></a><span class="lineno">13710</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13711"></a><span class="lineno">13711</span>&#160;<span class="comment">// Note: test names must be non-empty, unique, and may only contain ASCII</span></div><div class="line"><a name="l13712"></a><span class="lineno">13712</span>&#160;<span class="comment">// alphanumeric characters or underscore. Because PrintToString adds quotes</span></div><div class="line"><a name="l13713"></a><span class="lineno">13713</span>&#160;<span class="comment">// to std::string and C strings, it won&#39;t work for these types.</span></div><div class="line"><a name="l13714"></a><span class="lineno">13714</span>&#160;</div><div class="line"><a name="l13715"></a><span class="lineno"><a class="line" href="gtest_8h.html#a016124361c862c0db315e4c9dc4d911a">13715</a></span>&#160;<span class="preprocessor">#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator, ...) \</span></div><div class="line"><a name="l13716"></a><span class="lineno">13716</span>&#160;<span class="preprocessor"> static ::testing::internal::ParamGenerator&lt;test_suite_name::ParamType&gt; \</span></div><div class="line"><a name="l13717"></a><span class="lineno">13717</span>&#160;<span class="preprocessor"> gtest_##prefix##test_suite_name##_EvalGenerator_() { \</span></div><div class="line"><a name="l13718"></a><span class="lineno">13718</span>&#160;<span class="preprocessor"> return generator; \</span></div><div class="line"><a name="l13719"></a><span class="lineno">13719</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l13720"></a><span class="lineno">13720</span>&#160;<span class="preprocessor"> static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \</span></div><div class="line"><a name="l13721"></a><span class="lineno">13721</span>&#160;<span class="preprocessor"> const ::testing::TestParamInfo&lt;test_suite_name::ParamType&gt;&amp; info) { \</span></div><div class="line"><a name="l13722"></a><span class="lineno">13722</span>&#160;<span class="preprocessor"> return ::testing::internal::GetParamNameGen&lt;test_suite_name::ParamType&gt;( \</span></div><div class="line"><a name="l13723"></a><span class="lineno">13723</span>&#160;<span class="preprocessor"> __VA_ARGS__)(info); \</span></div><div class="line"><a name="l13724"></a><span class="lineno">13724</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l13725"></a><span class="lineno">13725</span>&#160;<span class="preprocessor"> static int gtest_##prefix##test_suite_name##_dummy_ \</span></div><div class="line"><a name="l13726"></a><span class="lineno">13726</span>&#160;<span class="preprocessor"> GTEST_ATTRIBUTE_UNUSED_ = \</span></div><div class="line"><a name="l13727"></a><span class="lineno">13727</span>&#160;<span class="preprocessor"> ::testing::UnitTest::GetInstance() \</span></div><div class="line"><a name="l13728"></a><span class="lineno">13728</span>&#160;<span class="preprocessor"> -&gt;parameterized_test_registry() \</span></div><div class="line"><a name="l13729"></a><span class="lineno">13729</span>&#160;<span class="preprocessor"> .GetTestSuitePatternHolder&lt;test_suite_name&gt;( \</span></div><div class="line"><a name="l13730"></a><span class="lineno">13730</span>&#160;<span class="preprocessor"> #test_suite_name, \</span></div><div class="line"><a name="l13731"></a><span class="lineno">13731</span>&#160;<span class="preprocessor"> ::testing::internal::CodeLocation(__FILE__, __LINE__)) \</span></div><div class="line"><a name="l13732"></a><span class="lineno">13732</span>&#160;<span class="preprocessor"> -&gt;AddTestSuiteInstantiation( \</span></div><div class="line"><a name="l13733"></a><span class="lineno">13733</span>&#160;<span class="preprocessor"> #prefix, &amp;gtest_##prefix##test_suite_name##_EvalGenerator_, \</span></div><div class="line"><a name="l13734"></a><span class="lineno">13734</span>&#160;<span class="preprocessor"> &amp;gtest_##prefix##test_suite_name##_EvalGenerateName_, \</span></div><div class="line"><a name="l13735"></a><span class="lineno">13735</span>&#160;<span class="preprocessor"> __FILE__, __LINE__)</span></div><div class="line"><a name="l13736"></a><span class="lineno">13736</span>&#160;</div><div class="line"><a name="l13737"></a><span class="lineno">13737</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l13738"></a><span class="lineno">13738</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l13739"></a><span class="lineno"><a class="line" href="gtest_8h.html#acc356fe00725fe8bf8b95791c0ffacbd">13739</a></span>&#160;<span class="preprocessor">#define INSTANTIATE_TEST_CASE_P INSTANTIATE_TEST_SUITE_P</span></div><div class="line"><a name="l13740"></a><span class="lineno">13740</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l13741"></a><span class="lineno">13741</span>&#160;</div><div class="line"><a name="l13742"></a><span class="lineno">13742</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l13743"></a><span class="lineno">13743</span>&#160;</div><div class="line"><a name="l13744"></a><span class="lineno">13744</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_</span></div><div class="line"><a name="l13745"></a><span class="lineno">13745</span>&#160;<span class="comment">// Copyright 2006, Google Inc.</span></div><div class="line"><a name="l13746"></a><span class="lineno">13746</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l13747"></a><span class="lineno">13747</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13748"></a><span class="lineno">13748</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l13749"></a><span class="lineno">13749</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l13750"></a><span class="lineno">13750</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l13751"></a><span class="lineno">13751</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13752"></a><span class="lineno">13752</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l13753"></a><span class="lineno">13753</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l13754"></a><span class="lineno">13754</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l13755"></a><span class="lineno">13755</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l13756"></a><span class="lineno">13756</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l13757"></a><span class="lineno">13757</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l13758"></a><span class="lineno">13758</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l13759"></a><span class="lineno">13759</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l13760"></a><span class="lineno">13760</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l13761"></a><span class="lineno">13761</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13762"></a><span class="lineno">13762</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l13763"></a><span class="lineno">13763</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l13764"></a><span class="lineno">13764</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l13765"></a><span class="lineno">13765</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l13766"></a><span class="lineno">13766</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l13767"></a><span class="lineno">13767</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l13768"></a><span class="lineno">13768</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l13769"></a><span class="lineno">13769</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l13770"></a><span class="lineno">13770</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l13771"></a><span class="lineno">13771</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l13772"></a><span class="lineno">13772</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l13773"></a><span class="lineno">13773</span>&#160;</div><div class="line"><a name="l13774"></a><span class="lineno">13774</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13775"></a><span class="lineno">13775</span>&#160;<span class="comment">// Google C++ Testing and Mocking Framework definitions useful in production code.</span></div><div class="line"><a name="l13776"></a><span class="lineno">13776</span>&#160;<span class="comment">// GOOGLETEST_CM0003 DO NOT DELETE</span></div><div class="line"><a name="l13777"></a><span class="lineno">13777</span>&#160;</div><div class="line"><a name="l13778"></a><span class="lineno">13778</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_</span></div><div class="line"><a name="l13779"></a><span class="lineno"><a class="line" href="gtest_8h.html#a61e419ca2f3cc78bbae47d074c5d4400">13779</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_</span></div><div class="line"><a name="l13780"></a><span class="lineno">13780</span>&#160;</div><div class="line"><a name="l13781"></a><span class="lineno">13781</span>&#160;<span class="comment">// When you need to test the private or protected members of a class,</span></div><div class="line"><a name="l13782"></a><span class="lineno">13782</span>&#160;<span class="comment">// use the FRIEND_TEST macro to declare your tests as friends of the</span></div><div class="line"><a name="l13783"></a><span class="lineno">13783</span>&#160;<span class="comment">// class. For example:</span></div><div class="line"><a name="l13784"></a><span class="lineno">13784</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13785"></a><span class="lineno">13785</span>&#160;<span class="comment">// class MyClass {</span></div><div class="line"><a name="l13786"></a><span class="lineno">13786</span>&#160;<span class="comment">// private:</span></div><div class="line"><a name="l13787"></a><span class="lineno">13787</span>&#160;<span class="comment">// void PrivateMethod();</span></div><div class="line"><a name="l13788"></a><span class="lineno">13788</span>&#160;<span class="comment">// FRIEND_TEST(MyClassTest, PrivateMethodWorks);</span></div><div class="line"><a name="l13789"></a><span class="lineno">13789</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l13790"></a><span class="lineno">13790</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13791"></a><span class="lineno">13791</span>&#160;<span class="comment">// class MyClassTest : public testing::Test {</span></div><div class="line"><a name="l13792"></a><span class="lineno">13792</span>&#160;<span class="comment">// // ...</span></div><div class="line"><a name="l13793"></a><span class="lineno">13793</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l13794"></a><span class="lineno">13794</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13795"></a><span class="lineno">13795</span>&#160;<span class="comment">// TEST_F(MyClassTest, PrivateMethodWorks) {</span></div><div class="line"><a name="l13796"></a><span class="lineno">13796</span>&#160;<span class="comment">// // Can call MyClass::PrivateMethod() here.</span></div><div class="line"><a name="l13797"></a><span class="lineno">13797</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l13798"></a><span class="lineno">13798</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13799"></a><span class="lineno">13799</span>&#160;<span class="comment">// Note: The test class must be in the same namespace as the class being tested.</span></div><div class="line"><a name="l13800"></a><span class="lineno">13800</span>&#160;<span class="comment">// For example, putting MyClassTest in an anonymous namespace will not work.</span></div><div class="line"><a name="l13801"></a><span class="lineno">13801</span>&#160;</div><div class="line"><a name="l13802"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8d443b4cc1d87a7a17943b8fbdbf3910">13802</a></span>&#160;<span class="preprocessor">#define FRIEND_TEST(test_case_name, test_name)\</span></div><div class="line"><a name="l13803"></a><span class="lineno">13803</span>&#160;<span class="preprocessor">friend class test_case_name##_##test_name##_Test</span></div><div class="line"><a name="l13804"></a><span class="lineno">13804</span>&#160;</div><div class="line"><a name="l13805"></a><span class="lineno">13805</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_PROD_H_</span></div><div class="line"><a name="l13806"></a><span class="lineno">13806</span>&#160;<span class="comment">// Copyright 2008, Google Inc.</span></div><div class="line"><a name="l13807"></a><span class="lineno">13807</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l13808"></a><span class="lineno">13808</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13809"></a><span class="lineno">13809</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l13810"></a><span class="lineno">13810</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l13811"></a><span class="lineno">13811</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l13812"></a><span class="lineno">13812</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13813"></a><span class="lineno">13813</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l13814"></a><span class="lineno">13814</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l13815"></a><span class="lineno">13815</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l13816"></a><span class="lineno">13816</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l13817"></a><span class="lineno">13817</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l13818"></a><span class="lineno">13818</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l13819"></a><span class="lineno">13819</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l13820"></a><span class="lineno">13820</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l13821"></a><span class="lineno">13821</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l13822"></a><span class="lineno">13822</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13823"></a><span class="lineno">13823</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l13824"></a><span class="lineno">13824</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l13825"></a><span class="lineno">13825</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l13826"></a><span class="lineno">13826</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l13827"></a><span class="lineno">13827</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l13828"></a><span class="lineno">13828</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l13829"></a><span class="lineno">13829</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l13830"></a><span class="lineno">13830</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l13831"></a><span class="lineno">13831</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l13832"></a><span class="lineno">13832</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l13833"></a><span class="lineno">13833</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l13834"></a><span class="lineno">13834</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13835"></a><span class="lineno">13835</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l13836"></a><span class="lineno">13836</span>&#160;</div><div class="line"><a name="l13837"></a><span class="lineno">13837</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_</span></div><div class="line"><a name="l13838"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6454a5e01489b59f55be53c206ca929b">13838</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_</span></div><div class="line"><a name="l13839"></a><span class="lineno">13839</span>&#160;</div><div class="line"><a name="l13840"></a><span class="lineno">13840</span>&#160;<span class="preprocessor">#include &lt;iosfwd&gt;</span></div><div class="line"><a name="l13841"></a><span class="lineno">13841</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l13842"></a><span class="lineno">13842</span>&#160;</div><div class="line"><a name="l13843"></a><span class="lineno">13843</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l13844"></a><span class="lineno">13844</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l13845"></a><span class="lineno">13845</span>&#160;</div><div class="line"><a name="l13846"></a><span class="lineno">13846</span>&#160;namespace <a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l13847"></a><span class="lineno">13847</span>&#160;</div><div class="line"><a name="l13848"></a><span class="lineno">13848</span>&#160;<span class="comment">// A copyable object representing the result of a test part (i.e. an</span></div><div class="line"><a name="l13849"></a><span class="lineno">13849</span>&#160;<span class="comment">// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).</span></div><div class="line"><a name="l13850"></a><span class="lineno">13850</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13851"></a><span class="lineno">13851</span>&#160;<span class="comment">// Don&#39;t inherit from TestPartResult as its destructor is not virtual.</span></div><div class="line"><a name="l13852"></a><span class="lineno">13852</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> TestPartResult {</div><div class="line"><a name="l13853"></a><span class="lineno">13853</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13854"></a><span class="lineno">13854</span>&#160; <span class="comment">// The possible outcomes of a test part (i.e. an assertion or an</span></div><div class="line"><a name="l13855"></a><span class="lineno">13855</span>&#160; <span class="comment">// explicit SUCCEED(), FAIL(), or ADD_FAILURE()).</span></div><div class="line"><a name="l13856"></a><span class="lineno">13856</span>&#160; <span class="keyword">enum</span> Type {</div><div class="line"><a name="l13857"></a><span class="lineno">13857</span>&#160; kSuccess, <span class="comment">// Succeeded.</span></div><div class="line"><a name="l13858"></a><span class="lineno">13858</span>&#160; kNonFatalFailure, <span class="comment">// Failed but the test can continue.</span></div><div class="line"><a name="l13859"></a><span class="lineno">13859</span>&#160; kFatalFailure, <span class="comment">// Failed and the test should be terminated.</span></div><div class="line"><a name="l13860"></a><span class="lineno">13860</span>&#160; kSkip <span class="comment">// Skipped.</span></div><div class="line"><a name="l13861"></a><span class="lineno">13861</span>&#160; };</div><div class="line"><a name="l13862"></a><span class="lineno">13862</span>&#160;</div><div class="line"><a name="l13863"></a><span class="lineno">13863</span>&#160; <span class="comment">// C&#39;tor. TestPartResult does NOT have a default constructor.</span></div><div class="line"><a name="l13864"></a><span class="lineno">13864</span>&#160; <span class="comment">// Always use this constructor (with parameters) to create a</span></div><div class="line"><a name="l13865"></a><span class="lineno">13865</span>&#160; <span class="comment">// TestPartResult object.</span></div><div class="line"><a name="l13866"></a><span class="lineno">13866</span>&#160; TestPartResult(Type a_type, <span class="keyword">const</span> <span class="keywordtype">char</span>* a_file_name, <span class="keywordtype">int</span> a_line_number,</div><div class="line"><a name="l13867"></a><span class="lineno">13867</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* a_message)</div><div class="line"><a name="l13868"></a><span class="lineno">13868</span>&#160; : type_(a_type),</div><div class="line"><a name="l13869"></a><span class="lineno">13869</span>&#160; file_name_(a_file_name == <span class="keyword">nullptr</span> ? <span class="stringliteral">&quot;&quot;</span> : a_file_name),</div><div class="line"><a name="l13870"></a><span class="lineno">13870</span>&#160; line_number_(a_line_number),</div><div class="line"><a name="l13871"></a><span class="lineno">13871</span>&#160; summary_(ExtractSummary(a_message)),</div><div class="line"><a name="l13872"></a><span class="lineno">13872</span>&#160; message_(a_message) {}</div><div class="line"><a name="l13873"></a><span class="lineno">13873</span>&#160;</div><div class="line"><a name="l13874"></a><span class="lineno">13874</span>&#160; <span class="comment">// Gets the outcome of the test part.</span></div><div class="line"><a name="l13875"></a><span class="lineno">13875</span>&#160; Type type()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type_; }</div><div class="line"><a name="l13876"></a><span class="lineno">13876</span>&#160;</div><div class="line"><a name="l13877"></a><span class="lineno">13877</span>&#160; <span class="comment">// Gets the name of the source file where the test part took place, or</span></div><div class="line"><a name="l13878"></a><span class="lineno">13878</span>&#160; <span class="comment">// NULL if it&#39;s unknown.</span></div><div class="line"><a name="l13879"></a><span class="lineno">13879</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file_name()<span class="keyword"> const </span>{</div><div class="line"><a name="l13880"></a><span class="lineno">13880</span>&#160; <span class="keywordflow">return</span> file_name_.empty() ? nullptr : file_name_.c_str();</div><div class="line"><a name="l13881"></a><span class="lineno">13881</span>&#160; }</div><div class="line"><a name="l13882"></a><span class="lineno">13882</span>&#160;</div><div class="line"><a name="l13883"></a><span class="lineno">13883</span>&#160; <span class="comment">// Gets the line in the source file where the test part took place,</span></div><div class="line"><a name="l13884"></a><span class="lineno">13884</span>&#160; <span class="comment">// or -1 if it&#39;s unknown.</span></div><div class="line"><a name="l13885"></a><span class="lineno">13885</span>&#160; <span class="keywordtype">int</span> line_number()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> line_number_; }</div><div class="line"><a name="l13886"></a><span class="lineno">13886</span>&#160;</div><div class="line"><a name="l13887"></a><span class="lineno">13887</span>&#160; <span class="comment">// Gets the summary of the failure message.</span></div><div class="line"><a name="l13888"></a><span class="lineno">13888</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* summary()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> summary_.c_str(); }</div><div class="line"><a name="l13889"></a><span class="lineno">13889</span>&#160;</div><div class="line"><a name="l13890"></a><span class="lineno">13890</span>&#160; <span class="comment">// Gets the message associated with the test part.</span></div><div class="line"><a name="l13891"></a><span class="lineno">13891</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* message()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> message_.c_str(); }</div><div class="line"><a name="l13892"></a><span class="lineno">13892</span>&#160;</div><div class="line"><a name="l13893"></a><span class="lineno">13893</span>&#160; <span class="comment">// Returns true iff the test part was skipped.</span></div><div class="line"><a name="l13894"></a><span class="lineno">13894</span>&#160; <span class="keywordtype">bool</span> skipped()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type_ == kSkip; }</div><div class="line"><a name="l13895"></a><span class="lineno">13895</span>&#160;</div><div class="line"><a name="l13896"></a><span class="lineno">13896</span>&#160; <span class="comment">// Returns true iff the test part passed.</span></div><div class="line"><a name="l13897"></a><span class="lineno">13897</span>&#160; <span class="keywordtype">bool</span> passed()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type_ == kSuccess; }</div><div class="line"><a name="l13898"></a><span class="lineno">13898</span>&#160;</div><div class="line"><a name="l13899"></a><span class="lineno">13899</span>&#160; <span class="comment">// Returns true iff the test part non-fatally failed.</span></div><div class="line"><a name="l13900"></a><span class="lineno">13900</span>&#160; <span class="keywordtype">bool</span> nonfatally_failed()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type_ == kNonFatalFailure; }</div><div class="line"><a name="l13901"></a><span class="lineno">13901</span>&#160;</div><div class="line"><a name="l13902"></a><span class="lineno">13902</span>&#160; <span class="comment">// Returns true iff the test part fatally failed.</span></div><div class="line"><a name="l13903"></a><span class="lineno">13903</span>&#160; <span class="keywordtype">bool</span> fatally_failed()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> type_ == kFatalFailure; }</div><div class="line"><a name="l13904"></a><span class="lineno">13904</span>&#160;</div><div class="line"><a name="l13905"></a><span class="lineno">13905</span>&#160; <span class="comment">// Returns true iff the test part failed.</span></div><div class="line"><a name="l13906"></a><span class="lineno">13906</span>&#160; <span class="keywordtype">bool</span> failed()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fatally_failed() || nonfatally_failed(); }</div><div class="line"><a name="l13907"></a><span class="lineno">13907</span>&#160;</div><div class="line"><a name="l13908"></a><span class="lineno">13908</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13909"></a><span class="lineno">13909</span>&#160; Type type_;</div><div class="line"><a name="l13910"></a><span class="lineno">13910</span>&#160;</div><div class="line"><a name="l13911"></a><span class="lineno">13911</span>&#160; <span class="comment">// Gets the summary of the failure message by omitting the stack</span></div><div class="line"><a name="l13912"></a><span class="lineno">13912</span>&#160; <span class="comment">// trace in it.</span></div><div class="line"><a name="l13913"></a><span class="lineno">13913</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> ExtractSummary(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div><div class="line"><a name="l13914"></a><span class="lineno">13914</span>&#160;</div><div class="line"><a name="l13915"></a><span class="lineno">13915</span>&#160; <span class="comment">// The name of the source file where the test part took place, or</span></div><div class="line"><a name="l13916"></a><span class="lineno">13916</span>&#160; <span class="comment">// &quot;&quot; if the source file is unknown.</span></div><div class="line"><a name="l13917"></a><span class="lineno">13917</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> file_name_;</div><div class="line"><a name="l13918"></a><span class="lineno">13918</span>&#160; <span class="comment">// The line in the source file where the test part took place, or -1</span></div><div class="line"><a name="l13919"></a><span class="lineno">13919</span>&#160; <span class="comment">// if the line number is unknown.</span></div><div class="line"><a name="l13920"></a><span class="lineno">13920</span>&#160; <span class="keywordtype">int</span> line_number_;</div><div class="line"><a name="l13921"></a><span class="lineno">13921</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> summary_; <span class="comment">// The test failure summary.</span></div><div class="line"><a name="l13922"></a><span class="lineno">13922</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> message_; <span class="comment">// The test failure message.</span></div><div class="line"><a name="l13923"></a><span class="lineno">13923</span>&#160;};</div><div class="line"><a name="l13924"></a><span class="lineno">13924</span>&#160;</div><div class="line"><a name="l13925"></a><span class="lineno">13925</span>&#160;<span class="comment">// Prints a TestPartResult object.</span></div><div class="line"><a name="l13926"></a><span class="lineno">13926</span>&#160;std::ostream&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> TestPartResult&amp; result);</div><div class="line"><a name="l13927"></a><span class="lineno">13927</span>&#160;</div><div class="line"><a name="l13928"></a><span class="lineno">13928</span>&#160;<span class="comment">// An array of TestPartResult objects.</span></div><div class="line"><a name="l13929"></a><span class="lineno">13929</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13930"></a><span class="lineno">13930</span>&#160;<span class="comment">// Don&#39;t inherit from TestPartResultArray as its destructor is not</span></div><div class="line"><a name="l13931"></a><span class="lineno">13931</span>&#160;<span class="comment">// virtual.</span></div><div class="line"><a name="l13932"></a><span class="lineno">13932</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> TestPartResultArray {</div><div class="line"><a name="l13933"></a><span class="lineno">13933</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13934"></a><span class="lineno">13934</span>&#160; TestPartResultArray() {}</div><div class="line"><a name="l13935"></a><span class="lineno">13935</span>&#160;</div><div class="line"><a name="l13936"></a><span class="lineno">13936</span>&#160; <span class="comment">// Appends the given TestPartResult to the array.</span></div><div class="line"><a name="l13937"></a><span class="lineno">13937</span>&#160; <span class="keywordtype">void</span> Append(<span class="keyword">const</span> TestPartResult&amp; result);</div><div class="line"><a name="l13938"></a><span class="lineno">13938</span>&#160;</div><div class="line"><a name="l13939"></a><span class="lineno">13939</span>&#160; <span class="comment">// Returns the TestPartResult at the given index (0-based).</span></div><div class="line"><a name="l13940"></a><span class="lineno">13940</span>&#160; <span class="keyword">const</span> TestPartResult&amp; GetTestPartResult(<span class="keywordtype">int</span> index) <span class="keyword">const</span>;</div><div class="line"><a name="l13941"></a><span class="lineno">13941</span>&#160;</div><div class="line"><a name="l13942"></a><span class="lineno">13942</span>&#160; <span class="comment">// Returns the number of TestPartResult objects in the array.</span></div><div class="line"><a name="l13943"></a><span class="lineno">13943</span>&#160; <span class="keywordtype">int</span> <a class="code" href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">size</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l13944"></a><span class="lineno">13944</span>&#160;</div><div class="line"><a name="l13945"></a><span class="lineno">13945</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13946"></a><span class="lineno">13946</span>&#160; std::vector&lt;TestPartResult&gt; array_;</div><div class="line"><a name="l13947"></a><span class="lineno">13947</span>&#160;</div><div class="line"><a name="l13948"></a><span class="lineno">13948</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(TestPartResultArray);</div><div class="line"><a name="l13949"></a><span class="lineno">13949</span>&#160;};</div><div class="line"><a name="l13950"></a><span class="lineno">13950</span>&#160;</div><div class="line"><a name="l13951"></a><span class="lineno">13951</span>&#160;<span class="comment">// This interface knows how to report a test part result.</span></div><div class="line"><a name="l13952"></a><span class="lineno">13952</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> TestPartResultReporterInterface {</div><div class="line"><a name="l13953"></a><span class="lineno">13953</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13954"></a><span class="lineno">13954</span>&#160; <span class="keyword">virtual</span> ~TestPartResultReporterInterface() {}</div><div class="line"><a name="l13955"></a><span class="lineno">13955</span>&#160;</div><div class="line"><a name="l13956"></a><span class="lineno">13956</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> ReportTestPartResult(<span class="keyword">const</span> TestPartResult&amp; result) = 0;</div><div class="line"><a name="l13957"></a><span class="lineno">13957</span>&#160;};</div><div class="line"><a name="l13958"></a><span class="lineno">13958</span>&#160;</div><div class="line"><a name="l13959"></a><span class="lineno">13959</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l13960"></a><span class="lineno">13960</span>&#160;</div><div class="line"><a name="l13961"></a><span class="lineno">13961</span>&#160;<span class="comment">// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a</span></div><div class="line"><a name="l13962"></a><span class="lineno">13962</span>&#160;<span class="comment">// statement generates new fatal failures. To do so it registers itself as the</span></div><div class="line"><a name="l13963"></a><span class="lineno">13963</span>&#160;<span class="comment">// current test part result reporter. Besides checking if fatal failures were</span></div><div class="line"><a name="l13964"></a><span class="lineno">13964</span>&#160;<span class="comment">// reported, it only delegates the reporting to the former result reporter.</span></div><div class="line"><a name="l13965"></a><span class="lineno">13965</span>&#160;<span class="comment">// The original result reporter is restored in the destructor.</span></div><div class="line"><a name="l13966"></a><span class="lineno">13966</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l13967"></a><span class="lineno">13967</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> HasNewFatalFailureHelper</div><div class="line"><a name="l13968"></a><span class="lineno">13968</span>&#160; : <span class="keyword">public</span> TestPartResultReporterInterface {</div><div class="line"><a name="l13969"></a><span class="lineno">13969</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l13970"></a><span class="lineno">13970</span>&#160; HasNewFatalFailureHelper();</div><div class="line"><a name="l13971"></a><span class="lineno">13971</span>&#160; ~HasNewFatalFailureHelper() <span class="keyword">override</span>;</div><div class="line"><a name="l13972"></a><span class="lineno">13972</span>&#160; <span class="keywordtype">void</span> ReportTestPartResult(<span class="keyword">const</span> TestPartResult&amp; result) <span class="keyword">override</span>;</div><div class="line"><a name="l13973"></a><span class="lineno">13973</span>&#160; <span class="keywordtype">bool</span> has_new_fatal_failure()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> has_new_fatal_failure_; }</div><div class="line"><a name="l13974"></a><span class="lineno">13974</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l13975"></a><span class="lineno">13975</span>&#160; <span class="keywordtype">bool</span> has_new_fatal_failure_;</div><div class="line"><a name="l13976"></a><span class="lineno">13976</span>&#160; TestPartResultReporterInterface* original_reporter_;</div><div class="line"><a name="l13977"></a><span class="lineno">13977</span>&#160;</div><div class="line"><a name="l13978"></a><span class="lineno">13978</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(HasNewFatalFailureHelper);</div><div class="line"><a name="l13979"></a><span class="lineno">13979</span>&#160;};</div><div class="line"><a name="l13980"></a><span class="lineno">13980</span>&#160;</div><div class="line"><a name="l13981"></a><span class="lineno">13981</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l13982"></a><span class="lineno">13982</span>&#160;</div><div class="line"><a name="l13983"></a><span class="lineno">13983</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l13984"></a><span class="lineno">13984</span>&#160;</div><div class="line"><a name="l13985"></a><span class="lineno">13985</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l13986"></a><span class="lineno">13986</span>&#160;</div><div class="line"><a name="l13987"></a><span class="lineno">13987</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_</span></div><div class="line"><a name="l13988"></a><span class="lineno">13988</span>&#160;<span class="comment">// Copyright 2008 Google Inc.</span></div><div class="line"><a name="l13989"></a><span class="lineno">13989</span>&#160;<span class="comment">// All Rights Reserved.</span></div><div class="line"><a name="l13990"></a><span class="lineno">13990</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13991"></a><span class="lineno">13991</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l13992"></a><span class="lineno">13992</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l13993"></a><span class="lineno">13993</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l13994"></a><span class="lineno">13994</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l13995"></a><span class="lineno">13995</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l13996"></a><span class="lineno">13996</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l13997"></a><span class="lineno">13997</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l13998"></a><span class="lineno">13998</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l13999"></a><span class="lineno">13999</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l14000"></a><span class="lineno">14000</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l14001"></a><span class="lineno">14001</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l14002"></a><span class="lineno">14002</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l14003"></a><span class="lineno">14003</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l14004"></a><span class="lineno">14004</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14005"></a><span class="lineno">14005</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l14006"></a><span class="lineno">14006</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l14007"></a><span class="lineno">14007</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l14008"></a><span class="lineno">14008</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l14009"></a><span class="lineno">14009</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l14010"></a><span class="lineno">14010</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l14011"></a><span class="lineno">14011</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l14012"></a><span class="lineno">14012</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l14013"></a><span class="lineno">14013</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l14014"></a><span class="lineno">14014</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l14015"></a><span class="lineno">14015</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l14016"></a><span class="lineno">14016</span>&#160;</div><div class="line"><a name="l14017"></a><span class="lineno">14017</span>&#160;</div><div class="line"><a name="l14018"></a><span class="lineno">14018</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l14019"></a><span class="lineno">14019</span>&#160;</div><div class="line"><a name="l14020"></a><span class="lineno">14020</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_</span></div><div class="line"><a name="l14021"></a><span class="lineno">14021</span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_</span></div><div class="line"><a name="l14022"></a><span class="lineno">14022</span>&#160;</div><div class="line"><a name="l14023"></a><span class="lineno">14023</span>&#160;<span class="comment">// This header implements typed tests and type-parameterized tests.</span></div><div class="line"><a name="l14024"></a><span class="lineno">14024</span>&#160;</div><div class="line"><a name="l14025"></a><span class="lineno">14025</span>&#160;<span class="comment">// Typed (aka type-driven) tests repeat the same test for types in a</span></div><div class="line"><a name="l14026"></a><span class="lineno">14026</span>&#160;<span class="comment">// list. You must know which types you want to test with when writing</span></div><div class="line"><a name="l14027"></a><span class="lineno">14027</span>&#160;<span class="comment">// typed tests. Here&#39;s how you do it:</span></div><div class="line"><a name="l14028"></a><span class="lineno">14028</span>&#160;</div><div class="line"><a name="l14029"></a><span class="lineno">14029</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l14030"></a><span class="lineno">14030</span>&#160;</div><div class="line"><a name="l14031"></a><span class="lineno">14031</span>&#160;<span class="comment">// First, define a fixture class template. It should be parameterized</span></div><div class="line"><a name="l14032"></a><span class="lineno">14032</span>&#160;<span class="comment">// by a type. Remember to derive it from testing::Test.</span></div><div class="line"><a name="l14033"></a><span class="lineno">14033</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l14034"></a><span class="lineno">14034</span>&#160;<span class="keyword">class </span>FooTest : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test.html">testing::Test</a> {</div><div class="line"><a name="l14035"></a><span class="lineno">14035</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l14036"></a><span class="lineno">14036</span>&#160; ...</div><div class="line"><a name="l14037"></a><span class="lineno">14037</span>&#160; <span class="keyword">typedef</span> std::list&lt;T&gt; List;</div><div class="line"><a name="l14038"></a><span class="lineno">14038</span>&#160; <span class="keyword">static</span> T shared_;</div><div class="line"><a name="l14039"></a><span class="lineno">14039</span>&#160; T value_;</div><div class="line"><a name="l14040"></a><span class="lineno">14040</span>&#160;};</div><div class="line"><a name="l14041"></a><span class="lineno">14041</span>&#160;</div><div class="line"><a name="l14042"></a><span class="lineno">14042</span>&#160;<span class="comment">// Next, associate a list of types with the test suite, which will be</span></div><div class="line"><a name="l14043"></a><span class="lineno">14043</span>&#160;<span class="comment">// repeated for each type in the list. The typedef is necessary for</span></div><div class="line"><a name="l14044"></a><span class="lineno">14044</span>&#160;<span class="comment">// the macro to parse correctly.</span></div><div class="line"><a name="l14045"></a><span class="lineno">14045</span>&#160;<span class="keyword">typedef</span> testing::Types&lt;char, int, unsigned int&gt; MyTypes;</div><div class="line"><a name="l14046"></a><span class="lineno">14046</span>&#160;TYPED_TEST_SUITE(FooTest, MyTypes);</div><div class="line"><a name="l14047"></a><span class="lineno">14047</span>&#160;</div><div class="line"><a name="l14048"></a><span class="lineno">14048</span>&#160;<span class="comment">// If the type list contains only one type, you can write that type</span></div><div class="line"><a name="l14049"></a><span class="lineno">14049</span>&#160;<span class="comment">// directly without Types&lt;...&gt;:</span></div><div class="line"><a name="l14050"></a><span class="lineno">14050</span>&#160;<span class="comment">// TYPED_TEST_SUITE(FooTest, int);</span></div><div class="line"><a name="l14051"></a><span class="lineno">14051</span>&#160;</div><div class="line"><a name="l14052"></a><span class="lineno">14052</span>&#160;<span class="comment">// Then, use TYPED_TEST() instead of TEST_F() to define as many typed</span></div><div class="line"><a name="l14053"></a><span class="lineno">14053</span>&#160;<span class="comment">// tests for this test suite as you want.</span></div><div class="line"><a name="l14054"></a><span class="lineno">14054</span>&#160;TYPED_TEST(FooTest, DoesBlah) {</div><div class="line"><a name="l14055"></a><span class="lineno">14055</span>&#160; <span class="comment">// Inside a test, refer to TypeParam to get the type parameter.</span></div><div class="line"><a name="l14056"></a><span class="lineno">14056</span>&#160; <span class="comment">// Since we are inside a derived class template, C++ requires use to</span></div><div class="line"><a name="l14057"></a><span class="lineno">14057</span>&#160; <span class="comment">// visit the members of FooTest via &#39;this&#39;.</span></div><div class="line"><a name="l14058"></a><span class="lineno">14058</span>&#160; TypeParam n = this-&gt;value_;</div><div class="line"><a name="l14059"></a><span class="lineno">14059</span>&#160;</div><div class="line"><a name="l14060"></a><span class="lineno">14060</span>&#160; <span class="comment">// To visit static members of the fixture, add the TestFixture::</span></div><div class="line"><a name="l14061"></a><span class="lineno">14061</span>&#160; <span class="comment">// prefix.</span></div><div class="line"><a name="l14062"></a><span class="lineno">14062</span>&#160; n += TestFixture::shared_;</div><div class="line"><a name="l14063"></a><span class="lineno">14063</span>&#160;</div><div class="line"><a name="l14064"></a><span class="lineno">14064</span>&#160; <span class="comment">// To refer to typedefs in the fixture, add the &quot;typename</span></div><div class="line"><a name="l14065"></a><span class="lineno">14065</span>&#160; <span class="comment">// TestFixture::&quot; prefix.</span></div><div class="line"><a name="l14066"></a><span class="lineno">14066</span>&#160; <span class="keyword">typename</span> TestFixture::List values;</div><div class="line"><a name="l14067"></a><span class="lineno">14067</span>&#160; values.push_back(n);</div><div class="line"><a name="l14068"></a><span class="lineno">14068</span>&#160; ...</div><div class="line"><a name="l14069"></a><span class="lineno">14069</span>&#160;}</div><div class="line"><a name="l14070"></a><span class="lineno">14070</span>&#160;</div><div class="line"><a name="l14071"></a><span class="lineno">14071</span>&#160;TYPED_TEST(FooTest, HasPropertyA) { ... }</div><div class="line"><a name="l14072"></a><span class="lineno">14072</span>&#160;</div><div class="line"><a name="l14073"></a><span class="lineno">14073</span>&#160;<span class="comment">// TYPED_TEST_SUITE takes an optional third argument which allows to specify a</span></div><div class="line"><a name="l14074"></a><span class="lineno">14074</span>&#160;<span class="comment">// class that generates custom test name suffixes based on the type. This should</span></div><div class="line"><a name="l14075"></a><span class="lineno">14075</span>&#160;<span class="comment">// be a class which has a static template function GetName(int index) returning</span></div><div class="line"><a name="l14076"></a><span class="lineno">14076</span>&#160;<span class="comment">// a string for each type. The provided integer index equals the index of the</span></div><div class="line"><a name="l14077"></a><span class="lineno">14077</span>&#160;<span class="comment">// type in the provided type list. In many cases the index can be ignored.</span></div><div class="line"><a name="l14078"></a><span class="lineno">14078</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14079"></a><span class="lineno">14079</span>&#160;<span class="comment">// For example:</span></div><div class="line"><a name="l14080"></a><span class="lineno">14080</span>&#160;<span class="comment">// class MyTypeNames {</span></div><div class="line"><a name="l14081"></a><span class="lineno">14081</span>&#160;<span class="comment">// public:</span></div><div class="line"><a name="l14082"></a><span class="lineno">14082</span>&#160;<span class="comment">// template &lt;typename T&gt;</span></div><div class="line"><a name="l14083"></a><span class="lineno">14083</span>&#160;<span class="comment">// static std::string GetName(int) {</span></div><div class="line"><a name="l14084"></a><span class="lineno">14084</span>&#160;<span class="comment">// if (std::is_same&lt;T, char&gt;()) return &quot;char&quot;;</span></div><div class="line"><a name="l14085"></a><span class="lineno">14085</span>&#160;<span class="comment">// if (std::is_same&lt;T, int&gt;()) return &quot;int&quot;;</span></div><div class="line"><a name="l14086"></a><span class="lineno">14086</span>&#160;<span class="comment">// if (std::is_same&lt;T, unsigned int&gt;()) return &quot;unsignedInt&quot;;</span></div><div class="line"><a name="l14087"></a><span class="lineno">14087</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l14088"></a><span class="lineno">14088</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l14089"></a><span class="lineno">14089</span>&#160;<span class="comment">// TYPED_TEST_SUITE(FooTest, MyTypes, MyTypeNames);</span></div><div class="line"><a name="l14090"></a><span class="lineno">14090</span>&#160;</div><div class="line"><a name="l14091"></a><span class="lineno">14091</span>&#160;<span class="preprocessor">#endif // 0</span></div><div class="line"><a name="l14092"></a><span class="lineno">14092</span>&#160;</div><div class="line"><a name="l14093"></a><span class="lineno">14093</span>&#160;<span class="comment">// Type-parameterized tests are abstract test patterns parameterized</span></div><div class="line"><a name="l14094"></a><span class="lineno">14094</span>&#160;<span class="comment">// by a type. Compared with typed tests, type-parameterized tests</span></div><div class="line"><a name="l14095"></a><span class="lineno">14095</span>&#160;<span class="comment">// allow you to define the test pattern without knowing what the type</span></div><div class="line"><a name="l14096"></a><span class="lineno">14096</span>&#160;<span class="comment">// parameters are. The defined pattern can be instantiated with</span></div><div class="line"><a name="l14097"></a><span class="lineno">14097</span>&#160;<span class="comment">// different types any number of times, in any number of translation</span></div><div class="line"><a name="l14098"></a><span class="lineno">14098</span>&#160;<span class="comment">// units.</span></div><div class="line"><a name="l14099"></a><span class="lineno">14099</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14100"></a><span class="lineno">14100</span>&#160;<span class="comment">// If you are designing an interface or concept, you can define a</span></div><div class="line"><a name="l14101"></a><span class="lineno">14101</span>&#160;<span class="comment">// suite of type-parameterized tests to verify properties that any</span></div><div class="line"><a name="l14102"></a><span class="lineno">14102</span>&#160;<span class="comment">// valid implementation of the interface/concept should have. Then,</span></div><div class="line"><a name="l14103"></a><span class="lineno">14103</span>&#160;<span class="comment">// each implementation can easily instantiate the test suite to verify</span></div><div class="line"><a name="l14104"></a><span class="lineno">14104</span>&#160;<span class="comment">// that it conforms to the requirements, without having to write</span></div><div class="line"><a name="l14105"></a><span class="lineno">14105</span>&#160;<span class="comment">// similar tests repeatedly. Here&#39;s an example:</span></div><div class="line"><a name="l14106"></a><span class="lineno">14106</span>&#160;</div><div class="line"><a name="l14107"></a><span class="lineno">14107</span>&#160;<span class="preprocessor">#if 0</span></div><div class="line"><a name="l14108"></a><span class="lineno">14108</span>&#160;</div><div class="line"><a name="l14109"></a><span class="lineno">14109</span>&#160;<span class="comment">// First, define a fixture class template. It should be parameterized</span></div><div class="line"><a name="l14110"></a><span class="lineno">14110</span>&#160;<span class="comment">// by a type. Remember to derive it from testing::Test.</span></div><div class="line"><a name="l14111"></a><span class="lineno">14111</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l14112"></a><span class="lineno">14112</span>&#160;<span class="keyword">class </span>FooTest : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test.html">testing::Test</a> {</div><div class="line"><a name="l14113"></a><span class="lineno">14113</span>&#160; ...</div><div class="line"><a name="l14114"></a><span class="lineno">14114</span>&#160;};</div><div class="line"><a name="l14115"></a><span class="lineno">14115</span>&#160;</div><div class="line"><a name="l14116"></a><span class="lineno">14116</span>&#160;<span class="comment">// Next, declare that you will define a type-parameterized test suite</span></div><div class="line"><a name="l14117"></a><span class="lineno">14117</span>&#160;<span class="comment">// (the _P suffix is for &quot;parameterized&quot; or &quot;pattern&quot;, whichever you</span></div><div class="line"><a name="l14118"></a><span class="lineno">14118</span>&#160;<span class="comment">// prefer):</span></div><div class="line"><a name="l14119"></a><span class="lineno">14119</span>&#160;TYPED_TEST_SUITE_P(FooTest);</div><div class="line"><a name="l14120"></a><span class="lineno">14120</span>&#160;</div><div class="line"><a name="l14121"></a><span class="lineno">14121</span>&#160;<span class="comment">// Then, use TYPED_TEST_P() to define as many type-parameterized tests</span></div><div class="line"><a name="l14122"></a><span class="lineno">14122</span>&#160;<span class="comment">// for this type-parameterized test suite as you want.</span></div><div class="line"><a name="l14123"></a><span class="lineno">14123</span>&#160;TYPED_TEST_P(FooTest, DoesBlah) {</div><div class="line"><a name="l14124"></a><span class="lineno">14124</span>&#160; <span class="comment">// Inside a test, refer to TypeParam to get the type parameter.</span></div><div class="line"><a name="l14125"></a><span class="lineno">14125</span>&#160; TypeParam n = 0;</div><div class="line"><a name="l14126"></a><span class="lineno">14126</span>&#160; ...</div><div class="line"><a name="l14127"></a><span class="lineno">14127</span>&#160;}</div><div class="line"><a name="l14128"></a><span class="lineno">14128</span>&#160;</div><div class="line"><a name="l14129"></a><span class="lineno">14129</span>&#160;TYPED_TEST_P(FooTest, HasPropertyA) { ... }</div><div class="line"><a name="l14130"></a><span class="lineno">14130</span>&#160;</div><div class="line"><a name="l14131"></a><span class="lineno">14131</span>&#160;<span class="comment">// Now the tricky part: you need to register all test patterns before</span></div><div class="line"><a name="l14132"></a><span class="lineno">14132</span>&#160;<span class="comment">// you can instantiate them. The first argument of the macro is the</span></div><div class="line"><a name="l14133"></a><span class="lineno">14133</span>&#160;<span class="comment">// test suite name; the rest are the names of the tests in this test</span></div><div class="line"><a name="l14134"></a><span class="lineno">14134</span>&#160;<span class="comment">// case.</span></div><div class="line"><a name="l14135"></a><span class="lineno">14135</span>&#160;REGISTER_TYPED_TEST_SUITE_P(FooTest,</div><div class="line"><a name="l14136"></a><span class="lineno">14136</span>&#160; DoesBlah, HasPropertyA);</div><div class="line"><a name="l14137"></a><span class="lineno">14137</span>&#160;</div><div class="line"><a name="l14138"></a><span class="lineno">14138</span>&#160;<span class="comment">// Finally, you are free to instantiate the pattern with the types you</span></div><div class="line"><a name="l14139"></a><span class="lineno">14139</span>&#160;<span class="comment">// want. If you put the above code in a header file, you can #include</span></div><div class="line"><a name="l14140"></a><span class="lineno">14140</span>&#160;<span class="comment">// it in multiple C++ source files and instantiate it multiple times.</span></div><div class="line"><a name="l14141"></a><span class="lineno">14141</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14142"></a><span class="lineno">14142</span>&#160;<span class="comment">// To distinguish different instances of the pattern, the first</span></div><div class="line"><a name="l14143"></a><span class="lineno">14143</span>&#160;<span class="comment">// argument to the INSTANTIATE_* macro is a prefix that will be added</span></div><div class="line"><a name="l14144"></a><span class="lineno">14144</span>&#160;<span class="comment">// to the actual test suite name. Remember to pick unique prefixes for</span></div><div class="line"><a name="l14145"></a><span class="lineno">14145</span>&#160;<span class="comment">// different instances.</span></div><div class="line"><a name="l14146"></a><span class="lineno">14146</span>&#160;<span class="keyword">typedef</span> testing::Types&lt;char, int, unsigned int&gt; MyTypes;</div><div class="line"><a name="l14147"></a><span class="lineno">14147</span>&#160;INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);</div><div class="line"><a name="l14148"></a><span class="lineno">14148</span>&#160;</div><div class="line"><a name="l14149"></a><span class="lineno">14149</span>&#160;<span class="comment">// If the type list contains only one type, you can write that type</span></div><div class="line"><a name="l14150"></a><span class="lineno">14150</span>&#160;<span class="comment">// directly without Types&lt;...&gt;:</span></div><div class="line"><a name="l14151"></a><span class="lineno">14151</span>&#160;<span class="comment">// INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int);</span></div><div class="line"><a name="l14152"></a><span class="lineno">14152</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14153"></a><span class="lineno">14153</span>&#160;<span class="comment">// Similar to the optional argument of TYPED_TEST_SUITE above,</span></div><div class="line"><a name="l14154"></a><span class="lineno">14154</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P takes an optional fourth argument which allows to</span></div><div class="line"><a name="l14155"></a><span class="lineno">14155</span>&#160;<span class="comment">// generate custom names.</span></div><div class="line"><a name="l14156"></a><span class="lineno">14156</span>&#160;<span class="comment">// INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes, MyTypeNames);</span></div><div class="line"><a name="l14157"></a><span class="lineno">14157</span>&#160;</div><div class="line"><a name="l14158"></a><span class="lineno">14158</span>&#160;<span class="preprocessor">#endif // 0</span></div><div class="line"><a name="l14159"></a><span class="lineno">14159</span>&#160;</div><div class="line"><a name="l14160"></a><span class="lineno">14160</span>&#160;</div><div class="line"><a name="l14161"></a><span class="lineno">14161</span>&#160;<span class="comment">// Implements typed tests.</span></div><div class="line"><a name="l14162"></a><span class="lineno">14162</span>&#160;</div><div class="line"><a name="l14163"></a><span class="lineno">14163</span>&#160;<span class="preprocessor">#if GTEST_HAS_TYPED_TEST</span></div><div class="line"><a name="l14164"></a><span class="lineno">14164</span>&#160;</div><div class="line"><a name="l14165"></a><span class="lineno">14165</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l14166"></a><span class="lineno">14166</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14167"></a><span class="lineno">14167</span>&#160;<span class="comment">// Expands to the name of the typedef for the type parameters of the</span></div><div class="line"><a name="l14168"></a><span class="lineno">14168</span>&#160;<span class="comment">// given test suite.</span></div><div class="line"><a name="l14169"></a><span class="lineno">14169</span>&#160;<span class="preprocessor">#define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_</span></div><div class="line"><a name="l14170"></a><span class="lineno">14170</span>&#160;</div><div class="line"><a name="l14171"></a><span class="lineno">14171</span>&#160;<span class="comment">// Expands to the name of the typedef for the NameGenerator, responsible for</span></div><div class="line"><a name="l14172"></a><span class="lineno">14172</span>&#160;<span class="comment">// creating the suffixes of the name.</span></div><div class="line"><a name="l14173"></a><span class="lineno">14173</span>&#160;<span class="preprocessor">#define GTEST_NAME_GENERATOR_(TestSuiteName) \</span></div><div class="line"><a name="l14174"></a><span class="lineno">14174</span>&#160;<span class="preprocessor"> gtest_type_params_##TestSuiteName##_NameGenerator</span></div><div class="line"><a name="l14175"></a><span class="lineno">14175</span>&#160;</div><div class="line"><a name="l14176"></a><span class="lineno">14176</span>&#160;<span class="comment">// The &#39;Types&#39; template argument below must have spaces around it</span></div><div class="line"><a name="l14177"></a><span class="lineno">14177</span>&#160;<span class="comment">// since some compilers may choke on &#39;&gt;&gt;&#39; when passing a template</span></div><div class="line"><a name="l14178"></a><span class="lineno">14178</span>&#160;<span class="comment">// instance (e.g. Types&lt;int&gt;)</span></div><div class="line"><a name="l14179"></a><span class="lineno">14179</span>&#160;<span class="preprocessor">#define TYPED_TEST_SUITE(CaseName, Types, ...) \</span></div><div class="line"><a name="l14180"></a><span class="lineno">14180</span>&#160;<span class="preprocessor"> typedef ::testing::internal::TypeList&lt;Types&gt;::type GTEST_TYPE_PARAMS_( \</span></div><div class="line"><a name="l14181"></a><span class="lineno">14181</span>&#160;<span class="preprocessor"> CaseName); \</span></div><div class="line"><a name="l14182"></a><span class="lineno">14182</span>&#160;<span class="preprocessor"> typedef ::testing::internal::NameGeneratorSelector&lt;__VA_ARGS__&gt;::type \</span></div><div class="line"><a name="l14183"></a><span class="lineno">14183</span>&#160;<span class="preprocessor"> GTEST_NAME_GENERATOR_(CaseName)</span></div><div class="line"><a name="l14184"></a><span class="lineno">14184</span>&#160;</div><div class="line"><a name="l14185"></a><span class="lineno">14185</span>&#160;<span class="preprocessor"># define TYPED_TEST(CaseName, TestName) \</span></div><div class="line"><a name="l14186"></a><span class="lineno">14186</span>&#160;<span class="preprocessor"> template &lt;typename gtest_TypeParam_&gt; \</span></div><div class="line"><a name="l14187"></a><span class="lineno">14187</span>&#160;<span class="preprocessor"> class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \</span></div><div class="line"><a name="l14188"></a><span class="lineno">14188</span>&#160;<span class="preprocessor"> : public CaseName&lt;gtest_TypeParam_&gt; { \</span></div><div class="line"><a name="l14189"></a><span class="lineno">14189</span>&#160;<span class="preprocessor"> private: \</span></div><div class="line"><a name="l14190"></a><span class="lineno">14190</span>&#160;<span class="preprocessor"> typedef CaseName&lt;gtest_TypeParam_&gt; TestFixture; \</span></div><div class="line"><a name="l14191"></a><span class="lineno">14191</span>&#160;<span class="preprocessor"> typedef gtest_TypeParam_ TypeParam; \</span></div><div class="line"><a name="l14192"></a><span class="lineno">14192</span>&#160;<span class="preprocessor"> virtual void TestBody(); \</span></div><div class="line"><a name="l14193"></a><span class="lineno">14193</span>&#160;<span class="preprocessor"> }; \</span></div><div class="line"><a name="l14194"></a><span class="lineno">14194</span>&#160;<span class="preprocessor"> static bool gtest_##CaseName##_##TestName##_registered_ \</span></div><div class="line"><a name="l14195"></a><span class="lineno">14195</span>&#160;<span class="preprocessor"> GTEST_ATTRIBUTE_UNUSED_ = \</span></div><div class="line"><a name="l14196"></a><span class="lineno">14196</span>&#160;<span class="preprocessor"> ::testing::internal::TypeParameterizedTest&lt; \</span></div><div class="line"><a name="l14197"></a><span class="lineno">14197</span>&#160;<span class="preprocessor"> CaseName, \</span></div><div class="line"><a name="l14198"></a><span class="lineno">14198</span>&#160;<span class="preprocessor"> ::testing::internal::TemplateSel&lt;GTEST_TEST_CLASS_NAME_(CaseName, \</span></div><div class="line"><a name="l14199"></a><span class="lineno">14199</span>&#160;<span class="preprocessor"> TestName)&gt;, \</span></div><div class="line"><a name="l14200"></a><span class="lineno">14200</span>&#160;<span class="preprocessor"> GTEST_TYPE_PARAMS_( \</span></div><div class="line"><a name="l14201"></a><span class="lineno">14201</span>&#160;<span class="preprocessor"> CaseName)&gt;::Register(&quot;&quot;, \</span></div><div class="line"><a name="l14202"></a><span class="lineno">14202</span>&#160;<span class="preprocessor"> ::testing::internal::CodeLocation( \</span></div><div class="line"><a name="l14203"></a><span class="lineno">14203</span>&#160;<span class="preprocessor"> __FILE__, __LINE__), \</span></div><div class="line"><a name="l14204"></a><span class="lineno">14204</span>&#160;<span class="preprocessor"> #CaseName, #TestName, 0, \</span></div><div class="line"><a name="l14205"></a><span class="lineno">14205</span>&#160;<span class="preprocessor"> ::testing::internal::GenerateNames&lt; \</span></div><div class="line"><a name="l14206"></a><span class="lineno">14206</span>&#160;<span class="preprocessor"> GTEST_NAME_GENERATOR_(CaseName), \</span></div><div class="line"><a name="l14207"></a><span class="lineno">14207</span>&#160;<span class="preprocessor"> GTEST_TYPE_PARAMS_(CaseName)&gt;()); \</span></div><div class="line"><a name="l14208"></a><span class="lineno">14208</span>&#160;<span class="preprocessor"> template &lt;typename gtest_TypeParam_&gt; \</span></div><div class="line"><a name="l14209"></a><span class="lineno">14209</span>&#160;<span class="preprocessor"> void GTEST_TEST_CLASS_NAME_(CaseName, \</span></div><div class="line"><a name="l14210"></a><span class="lineno">14210</span>&#160;<span class="preprocessor"> TestName)&lt;gtest_TypeParam_&gt;::TestBody()</span></div><div class="line"><a name="l14211"></a><span class="lineno">14211</span>&#160;</div><div class="line"><a name="l14212"></a><span class="lineno">14212</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l14213"></a><span class="lineno">14213</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14214"></a><span class="lineno">14214</span>&#160;<span class="preprocessor">#define TYPED_TEST_CASE TYPED_TEST_SUITE</span></div><div class="line"><a name="l14215"></a><span class="lineno">14215</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14216"></a><span class="lineno">14216</span>&#160;</div><div class="line"><a name="l14217"></a><span class="lineno">14217</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_TYPED_TEST</span></div><div class="line"><a name="l14218"></a><span class="lineno">14218</span>&#160;</div><div class="line"><a name="l14219"></a><span class="lineno">14219</span>&#160;<span class="comment">// Implements type-parameterized tests.</span></div><div class="line"><a name="l14220"></a><span class="lineno">14220</span>&#160;</div><div class="line"><a name="l14221"></a><span class="lineno">14221</span>&#160;<span class="preprocessor">#if GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l14222"></a><span class="lineno">14222</span>&#160;</div><div class="line"><a name="l14223"></a><span class="lineno">14223</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l14224"></a><span class="lineno">14224</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14225"></a><span class="lineno">14225</span>&#160;<span class="comment">// Expands to the namespace name that the type-parameterized tests for</span></div><div class="line"><a name="l14226"></a><span class="lineno">14226</span>&#160;<span class="comment">// the given type-parameterized test suite are defined in. The exact</span></div><div class="line"><a name="l14227"></a><span class="lineno">14227</span>&#160;<span class="comment">// name of the namespace is subject to change without notice.</span></div><div class="line"><a name="l14228"></a><span class="lineno">14228</span>&#160;<span class="preprocessor">#define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_</span></div><div class="line"><a name="l14229"></a><span class="lineno">14229</span>&#160;</div><div class="line"><a name="l14230"></a><span class="lineno">14230</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l14231"></a><span class="lineno">14231</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14232"></a><span class="lineno">14232</span>&#160;<span class="comment">// Expands to the name of the variable used to remember the names of</span></div><div class="line"><a name="l14233"></a><span class="lineno">14233</span>&#160;<span class="comment">// the defined tests in the given test suite.</span></div><div class="line"><a name="l14234"></a><span class="lineno">14234</span>&#160;<span class="preprocessor">#define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \</span></div><div class="line"><a name="l14235"></a><span class="lineno">14235</span>&#160;<span class="preprocessor"> gtest_typed_test_suite_p_state_##TestSuiteName##_</span></div><div class="line"><a name="l14236"></a><span class="lineno">14236</span>&#160;</div><div class="line"><a name="l14237"></a><span class="lineno">14237</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY.</span></div><div class="line"><a name="l14238"></a><span class="lineno">14238</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14239"></a><span class="lineno">14239</span>&#160;<span class="comment">// Expands to the name of the variable used to remember the names of</span></div><div class="line"><a name="l14240"></a><span class="lineno">14240</span>&#160;<span class="comment">// the registered tests in the given test suite.</span></div><div class="line"><a name="l14241"></a><span class="lineno">14241</span>&#160;<span class="preprocessor">#define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \</span></div><div class="line"><a name="l14242"></a><span class="lineno">14242</span>&#160;<span class="preprocessor"> gtest_registered_test_names_##TestSuiteName##_</span></div><div class="line"><a name="l14243"></a><span class="lineno">14243</span>&#160;</div><div class="line"><a name="l14244"></a><span class="lineno">14244</span>&#160;<span class="comment">// The variables defined in the type-parameterized test macros are</span></div><div class="line"><a name="l14245"></a><span class="lineno">14245</span>&#160;<span class="comment">// static as typically these macros are used in a .h file that can be</span></div><div class="line"><a name="l14246"></a><span class="lineno">14246</span>&#160;<span class="comment">// #included in multiple translation units linked together.</span></div><div class="line"><a name="l14247"></a><span class="lineno">14247</span>&#160;<span class="preprocessor">#define TYPED_TEST_SUITE_P(SuiteName) \</span></div><div class="line"><a name="l14248"></a><span class="lineno">14248</span>&#160;<span class="preprocessor"> static ::testing::internal::TypedTestSuitePState \</span></div><div class="line"><a name="l14249"></a><span class="lineno">14249</span>&#160;<span class="preprocessor"> GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName)</span></div><div class="line"><a name="l14250"></a><span class="lineno">14250</span>&#160;</div><div class="line"><a name="l14251"></a><span class="lineno">14251</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l14252"></a><span class="lineno">14252</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14253"></a><span class="lineno">14253</span>&#160;<span class="preprocessor">#define TYPED_TEST_CASE_P TYPED_TEST_SUITE_P</span></div><div class="line"><a name="l14254"></a><span class="lineno">14254</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14255"></a><span class="lineno">14255</span>&#160;</div><div class="line"><a name="l14256"></a><span class="lineno">14256</span>&#160;<span class="preprocessor">#define TYPED_TEST_P(SuiteName, TestName) \</span></div><div class="line"><a name="l14257"></a><span class="lineno">14257</span>&#160;<span class="preprocessor"> namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \</span></div><div class="line"><a name="l14258"></a><span class="lineno">14258</span>&#160;<span class="preprocessor"> template &lt;typename gtest_TypeParam_&gt; \</span></div><div class="line"><a name="l14259"></a><span class="lineno">14259</span>&#160;<span class="preprocessor"> class TestName : public SuiteName&lt;gtest_TypeParam_&gt; { \</span></div><div class="line"><a name="l14260"></a><span class="lineno">14260</span>&#160;<span class="preprocessor"> private: \</span></div><div class="line"><a name="l14261"></a><span class="lineno">14261</span>&#160;<span class="preprocessor"> typedef SuiteName&lt;gtest_TypeParam_&gt; TestFixture; \</span></div><div class="line"><a name="l14262"></a><span class="lineno">14262</span>&#160;<span class="preprocessor"> typedef gtest_TypeParam_ TypeParam; \</span></div><div class="line"><a name="l14263"></a><span class="lineno">14263</span>&#160;<span class="preprocessor"> virtual void TestBody(); \</span></div><div class="line"><a name="l14264"></a><span class="lineno">14264</span>&#160;<span class="preprocessor"> }; \</span></div><div class="line"><a name="l14265"></a><span class="lineno">14265</span>&#160;<span class="preprocessor"> static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \</span></div><div class="line"><a name="l14266"></a><span class="lineno">14266</span>&#160;<span class="preprocessor"> GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \</span></div><div class="line"><a name="l14267"></a><span class="lineno">14267</span>&#160;<span class="preprocessor"> __FILE__, __LINE__, #SuiteName, #TestName); \</span></div><div class="line"><a name="l14268"></a><span class="lineno">14268</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l14269"></a><span class="lineno">14269</span>&#160;<span class="preprocessor"> template &lt;typename gtest_TypeParam_&gt; \</span></div><div class="line"><a name="l14270"></a><span class="lineno">14270</span>&#160;<span class="preprocessor"> void GTEST_SUITE_NAMESPACE_( \</span></div><div class="line"><a name="l14271"></a><span class="lineno">14271</span>&#160;<span class="preprocessor"> SuiteName)::TestName&lt;gtest_TypeParam_&gt;::TestBody()</span></div><div class="line"><a name="l14272"></a><span class="lineno">14272</span>&#160;</div><div class="line"><a name="l14273"></a><span class="lineno">14273</span>&#160;<span class="preprocessor">#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \</span></div><div class="line"><a name="l14274"></a><span class="lineno">14274</span>&#160;<span class="preprocessor"> namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \</span></div><div class="line"><a name="l14275"></a><span class="lineno">14275</span>&#160;<span class="preprocessor"> typedef ::testing::internal::Templates&lt;__VA_ARGS__&gt;::type gtest_AllTests_; \</span></div><div class="line"><a name="l14276"></a><span class="lineno">14276</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l14277"></a><span class="lineno">14277</span>&#160;<span class="preprocessor"> static const char* const GTEST_REGISTERED_TEST_NAMES_( \</span></div><div class="line"><a name="l14278"></a><span class="lineno">14278</span>&#160;<span class="preprocessor"> SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \</span></div><div class="line"><a name="l14279"></a><span class="lineno">14279</span>&#160;<span class="preprocessor"> GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \</span></div><div class="line"><a name="l14280"></a><span class="lineno">14280</span>&#160;<span class="preprocessor"> __FILE__, __LINE__, #__VA_ARGS__)</span></div><div class="line"><a name="l14281"></a><span class="lineno">14281</span>&#160;</div><div class="line"><a name="l14282"></a><span class="lineno">14282</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l14283"></a><span class="lineno">14283</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14284"></a><span class="lineno">14284</span>&#160;<span class="preprocessor">#define REGISTER_TYPED_TEST_CASE_P REGISTER_TYPED_TEST_SUITE_P</span></div><div class="line"><a name="l14285"></a><span class="lineno">14285</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14286"></a><span class="lineno">14286</span>&#160;</div><div class="line"><a name="l14287"></a><span class="lineno">14287</span>&#160;<span class="comment">// The &#39;Types&#39; template argument below must have spaces around it</span></div><div class="line"><a name="l14288"></a><span class="lineno">14288</span>&#160;<span class="comment">// since some compilers may choke on &#39;&gt;&gt;&#39; when passing a template</span></div><div class="line"><a name="l14289"></a><span class="lineno">14289</span>&#160;<span class="comment">// instance (e.g. Types&lt;int&gt;)</span></div><div class="line"><a name="l14290"></a><span class="lineno">14290</span>&#160;<span class="preprocessor">#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \</span></div><div class="line"><a name="l14291"></a><span class="lineno">14291</span>&#160;<span class="preprocessor"> static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \</span></div><div class="line"><a name="l14292"></a><span class="lineno">14292</span>&#160;<span class="preprocessor"> ::testing::internal::TypeParameterizedTestSuite&lt; \</span></div><div class="line"><a name="l14293"></a><span class="lineno">14293</span>&#160;<span class="preprocessor"> SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \</span></div><div class="line"><a name="l14294"></a><span class="lineno">14294</span>&#160;<span class="preprocessor"> ::testing::internal::TypeList&lt;Types&gt;::type&gt;:: \</span></div><div class="line"><a name="l14295"></a><span class="lineno">14295</span>&#160;<span class="preprocessor"> Register(#Prefix, \</span></div><div class="line"><a name="l14296"></a><span class="lineno">14296</span>&#160;<span class="preprocessor"> ::testing::internal::CodeLocation(__FILE__, __LINE__), \</span></div><div class="line"><a name="l14297"></a><span class="lineno">14297</span>&#160;<span class="preprocessor"> &amp;GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName), #SuiteName, \</span></div><div class="line"><a name="l14298"></a><span class="lineno">14298</span>&#160;<span class="preprocessor"> GTEST_REGISTERED_TEST_NAMES_(SuiteName), \</span></div><div class="line"><a name="l14299"></a><span class="lineno">14299</span>&#160;<span class="preprocessor"> ::testing::internal::GenerateNames&lt; \</span></div><div class="line"><a name="l14300"></a><span class="lineno">14300</span>&#160;<span class="preprocessor"> ::testing::internal::NameGeneratorSelector&lt; \</span></div><div class="line"><a name="l14301"></a><span class="lineno">14301</span>&#160;<span class="preprocessor"> __VA_ARGS__&gt;::type, \</span></div><div class="line"><a name="l14302"></a><span class="lineno">14302</span>&#160;<span class="preprocessor"> ::testing::internal::TypeList&lt;Types&gt;::type&gt;())</span></div><div class="line"><a name="l14303"></a><span class="lineno">14303</span>&#160;</div><div class="line"><a name="l14304"></a><span class="lineno">14304</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l14305"></a><span class="lineno">14305</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14306"></a><span class="lineno">14306</span>&#160;<span class="preprocessor">#define INSTANTIATE_TYPED_TEST_CASE_P INSTANTIATE_TYPED_TEST_SUITE_P</span></div><div class="line"><a name="l14307"></a><span class="lineno">14307</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14308"></a><span class="lineno">14308</span>&#160;</div><div class="line"><a name="l14309"></a><span class="lineno">14309</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_TYPED_TEST_P</span></div><div class="line"><a name="l14310"></a><span class="lineno">14310</span>&#160;</div><div class="line"><a name="l14311"></a><span class="lineno">14311</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_</span></div><div class="line"><a name="l14312"></a><span class="lineno">14312</span>&#160;</div><div class="line"><a name="l14313"></a><span class="lineno">14313</span>&#160;<a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4251 \</div><div class="line"><a name="l14314"></a><span class="lineno">14314</span>&#160;<span class="comment">/* class A needs to have dll-interface to be used by clients of class B */</span>)</div><div class="line"><a name="l14315"></a><span class="lineno">14315</span>&#160;</div><div class="line"><a name="l14316"></a><span class="lineno">14316</span>&#160;<span class="comment">// Depending on the platform, different string classes are available.</span></div><div class="line"><a name="l14317"></a><span class="lineno">14317</span>&#160;<span class="comment">// On Linux, in addition to ::std::string, Google also makes use of</span></div><div class="line"><a name="l14318"></a><span class="lineno">14318</span>&#160;<span class="comment">// class ::string, which has the same interface as ::std::string, but</span></div><div class="line"><a name="l14319"></a><span class="lineno">14319</span>&#160;<span class="comment">// has a different implementation.</span></div><div class="line"><a name="l14320"></a><span class="lineno">14320</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14321"></a><span class="lineno">14321</span>&#160;<span class="comment">// You can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that</span></div><div class="line"><a name="l14322"></a><span class="lineno">14322</span>&#160;<span class="comment">// ::string is available AND is a distinct type to ::std::string, or</span></div><div class="line"><a name="l14323"></a><span class="lineno">14323</span>&#160;<span class="comment">// define it to 0 to indicate otherwise.</span></div><div class="line"><a name="l14324"></a><span class="lineno">14324</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14325"></a><span class="lineno">14325</span>&#160;<span class="comment">// If ::std::string and ::string are the same class on your platform</span></div><div class="line"><a name="l14326"></a><span class="lineno">14326</span>&#160;<span class="comment">// due to aliasing, you should define GTEST_HAS_GLOBAL_STRING to 0.</span></div><div class="line"><a name="l14327"></a><span class="lineno">14327</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14328"></a><span class="lineno">14328</span>&#160;<span class="comment">// If you do not define GTEST_HAS_GLOBAL_STRING, it is defined</span></div><div class="line"><a name="l14329"></a><span class="lineno">14329</span>&#160;<span class="comment">// heuristically.</span></div><div class="line"><a name="l14330"></a><span class="lineno">14330</span>&#160;</div><div class="line"><a name="l14331"></a><span class="lineno">14331</span>&#160;namespace <a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l14332"></a><span class="lineno">14332</span>&#160;</div><div class="line"><a name="l14333"></a><span class="lineno">14333</span>&#160;<span class="comment">// Silence C4100 (unreferenced formal parameter) and 4805</span></div><div class="line"><a name="l14334"></a><span class="lineno">14334</span>&#160;<span class="comment">// unsafe mix of type &#39;const int&#39; and type &#39;const bool&#39;</span></div><div class="line"><a name="l14335"></a><span class="lineno">14335</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l14336"></a><span class="lineno">14336</span>&#160;<span class="preprocessor"># pragma warning(push)</span></div><div class="line"><a name="l14337"></a><span class="lineno">14337</span>&#160;<span class="preprocessor"># pragma warning(disable:4805)</span></div><div class="line"><a name="l14338"></a><span class="lineno">14338</span>&#160;<span class="preprocessor"># pragma warning(disable:4100)</span></div><div class="line"><a name="l14339"></a><span class="lineno">14339</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l14340"></a><span class="lineno">14340</span>&#160;</div><div class="line"><a name="l14341"></a><span class="lineno">14341</span>&#160;</div><div class="line"><a name="l14342"></a><span class="lineno">14342</span>&#160;<span class="comment">// Declares the flags.</span></div><div class="line"><a name="l14343"></a><span class="lineno">14343</span>&#160;</div><div class="line"><a name="l14344"></a><span class="lineno">14344</span>&#160;<span class="comment">// This flag temporary enables the disabled tests.</span></div><div class="line"><a name="l14345"></a><span class="lineno">14345</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(also_run_disabled_tests);</div><div class="line"><a name="l14346"></a><span class="lineno">14346</span>&#160;</div><div class="line"><a name="l14347"></a><span class="lineno">14347</span>&#160;<span class="comment">// This flag brings the debugger on an assertion failure.</span></div><div class="line"><a name="l14348"></a><span class="lineno">14348</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(break_on_failure);</div><div class="line"><a name="l14349"></a><span class="lineno">14349</span>&#160;</div><div class="line"><a name="l14350"></a><span class="lineno">14350</span>&#160;<span class="comment">// This flag controls whether Google Test catches all test-thrown exceptions</span></div><div class="line"><a name="l14351"></a><span class="lineno">14351</span>&#160;<span class="comment">// and logs them as failures.</span></div><div class="line"><a name="l14352"></a><span class="lineno">14352</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(catch_exceptions);</div><div class="line"><a name="l14353"></a><span class="lineno">14353</span>&#160;</div><div class="line"><a name="l14354"></a><span class="lineno">14354</span>&#160;<span class="comment">// This flag enables using colors in terminal output. Available values are</span></div><div class="line"><a name="l14355"></a><span class="lineno">14355</span>&#160;<span class="comment">// &quot;yes&quot; to enable colors, &quot;no&quot; (disable colors), or &quot;auto&quot; (the default)</span></div><div class="line"><a name="l14356"></a><span class="lineno">14356</span>&#160;<span class="comment">// to let Google Test decide.</span></div><div class="line"><a name="l14357"></a><span class="lineno">14357</span>&#160;<a class="code" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a>(color);</div><div class="line"><a name="l14358"></a><span class="lineno">14358</span>&#160;</div><div class="line"><a name="l14359"></a><span class="lineno">14359</span>&#160;<span class="comment">// This flag sets up the filter to select by name using a glob pattern</span></div><div class="line"><a name="l14360"></a><span class="lineno">14360</span>&#160;<span class="comment">// the tests to run. If the filter is not given all tests are executed.</span></div><div class="line"><a name="l14361"></a><span class="lineno">14361</span>&#160;<a class="code" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a>(<a class="code" href="namespaceutl_1_1meta.html#ac72acc616316c322e750d20a46553ba4">filter</a>);</div><div class="line"><a name="l14362"></a><span class="lineno">14362</span>&#160;</div><div class="line"><a name="l14363"></a><span class="lineno">14363</span>&#160;<span class="comment">// This flag controls whether Google Test installs a signal handler that dumps</span></div><div class="line"><a name="l14364"></a><span class="lineno">14364</span>&#160;<span class="comment">// debugging information when fatal signals are raised.</span></div><div class="line"><a name="l14365"></a><span class="lineno">14365</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(install_failure_signal_handler);</div><div class="line"><a name="l14366"></a><span class="lineno">14366</span>&#160;</div><div class="line"><a name="l14367"></a><span class="lineno">14367</span>&#160;<span class="comment">// This flag causes the Google Test to list tests. None of the tests listed</span></div><div class="line"><a name="l14368"></a><span class="lineno">14368</span>&#160;<span class="comment">// are actually run if the flag is provided.</span></div><div class="line"><a name="l14369"></a><span class="lineno">14369</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(list_tests);</div><div class="line"><a name="l14370"></a><span class="lineno">14370</span>&#160;</div><div class="line"><a name="l14371"></a><span class="lineno">14371</span>&#160;<span class="comment">// This flag controls whether Google Test emits a detailed XML report to a file</span></div><div class="line"><a name="l14372"></a><span class="lineno">14372</span>&#160;<span class="comment">// in addition to its normal textual output.</span></div><div class="line"><a name="l14373"></a><span class="lineno">14373</span>&#160;<a class="code" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a>(output);</div><div class="line"><a name="l14374"></a><span class="lineno">14374</span>&#160;</div><div class="line"><a name="l14375"></a><span class="lineno">14375</span>&#160;<span class="comment">// This flags control whether Google Test prints the elapsed time for each</span></div><div class="line"><a name="l14376"></a><span class="lineno">14376</span>&#160;<span class="comment">// test.</span></div><div class="line"><a name="l14377"></a><span class="lineno">14377</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(print_time);</div><div class="line"><a name="l14378"></a><span class="lineno">14378</span>&#160;</div><div class="line"><a name="l14379"></a><span class="lineno">14379</span>&#160;<span class="comment">// This flags control whether Google Test prints UTF8 characters as text.</span></div><div class="line"><a name="l14380"></a><span class="lineno">14380</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(print_utf8);</div><div class="line"><a name="l14381"></a><span class="lineno">14381</span>&#160;</div><div class="line"><a name="l14382"></a><span class="lineno">14382</span>&#160;<span class="comment">// This flag specifies the random number seed.</span></div><div class="line"><a name="l14383"></a><span class="lineno">14383</span>&#160;<a class="code" href="gtest_8h.html#aab2ee98cb616054b1d3a7dc71efe81fc">GTEST_DECLARE_int32_</a>(random_seed);</div><div class="line"><a name="l14384"></a><span class="lineno">14384</span>&#160;</div><div class="line"><a name="l14385"></a><span class="lineno">14385</span>&#160;<span class="comment">// This flag sets how many times the tests are repeated. The default value</span></div><div class="line"><a name="l14386"></a><span class="lineno">14386</span>&#160;<span class="comment">// is 1. If the value is -1 the tests are repeating forever.</span></div><div class="line"><a name="l14387"></a><span class="lineno">14387</span>&#160;<a class="code" href="gtest_8h.html#aab2ee98cb616054b1d3a7dc71efe81fc">GTEST_DECLARE_int32_</a>(<a class="code" href="namespaceutl_1_1meta.html#aa013c45afb59b5c132a72be54ba145fb">repeat</a>);</div><div class="line"><a name="l14388"></a><span class="lineno">14388</span>&#160;</div><div class="line"><a name="l14389"></a><span class="lineno">14389</span>&#160;<span class="comment">// This flag controls whether Google Test includes Google Test internal</span></div><div class="line"><a name="l14390"></a><span class="lineno">14390</span>&#160;<span class="comment">// stack frames in failure stack traces.</span></div><div class="line"><a name="l14391"></a><span class="lineno">14391</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(show_internal_stack_frames);</div><div class="line"><a name="l14392"></a><span class="lineno">14392</span>&#160;</div><div class="line"><a name="l14393"></a><span class="lineno">14393</span>&#160;<span class="comment">// When this flag is specified, tests&#39; order is randomized on every iteration.</span></div><div class="line"><a name="l14394"></a><span class="lineno">14394</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(shuffle);</div><div class="line"><a name="l14395"></a><span class="lineno">14395</span>&#160;</div><div class="line"><a name="l14396"></a><span class="lineno">14396</span>&#160;<span class="comment">// This flag specifies the maximum number of stack frames to be</span></div><div class="line"><a name="l14397"></a><span class="lineno">14397</span>&#160;<span class="comment">// printed in a failure message.</span></div><div class="line"><a name="l14398"></a><span class="lineno">14398</span>&#160;<a class="code" href="gtest_8h.html#aab2ee98cb616054b1d3a7dc71efe81fc">GTEST_DECLARE_int32_</a>(stack_trace_depth);</div><div class="line"><a name="l14399"></a><span class="lineno">14399</span>&#160;</div><div class="line"><a name="l14400"></a><span class="lineno">14400</span>&#160;<span class="comment">// When this flag is specified, a failed assertion will throw an</span></div><div class="line"><a name="l14401"></a><span class="lineno">14401</span>&#160;<span class="comment">// exception if exceptions are enabled, or exit the program with a</span></div><div class="line"><a name="l14402"></a><span class="lineno">14402</span>&#160;<span class="comment">// non-zero code otherwise. For use with an external test framework.</span></div><div class="line"><a name="l14403"></a><span class="lineno">14403</span>&#160;<a class="code" href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a>(throw_on_failure);</div><div class="line"><a name="l14404"></a><span class="lineno">14404</span>&#160;</div><div class="line"><a name="l14405"></a><span class="lineno">14405</span>&#160;<span class="comment">// When this flag is set with a &quot;host:port&quot; string, on supported</span></div><div class="line"><a name="l14406"></a><span class="lineno">14406</span>&#160;<span class="comment">// platforms test results are streamed to the specified port on</span></div><div class="line"><a name="l14407"></a><span class="lineno">14407</span>&#160;<span class="comment">// the specified host machine.</span></div><div class="line"><a name="l14408"></a><span class="lineno">14408</span>&#160;<a class="code" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a>(stream_result_to);</div><div class="line"><a name="l14409"></a><span class="lineno">14409</span>&#160;</div><div class="line"><a name="l14410"></a><span class="lineno">14410</span>&#160;<span class="preprocessor">#if GTEST_USE_OWN_FLAGFILE_FLAG_</span></div><div class="line"><a name="l14411"></a><span class="lineno">14411</span>&#160;<a class="code" href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a>(flagfile);</div><div class="line"><a name="l14412"></a><span class="lineno">14412</span>&#160;<span class="preprocessor">#endif // GTEST_USE_OWN_FLAGFILE_FLAG_</span></div><div class="line"><a name="l14413"></a><span class="lineno">14413</span>&#160;</div><div class="line"><a name="l14414"></a><span class="lineno">14414</span>&#160;<span class="comment">// The upper limit for valid stack trace depths.</span></div><div class="line"><a name="l14415"></a><span class="lineno">14415</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> kMaxStackTraceDepth = 100;</div><div class="line"><a name="l14416"></a><span class="lineno">14416</span>&#160;</div><div class="line"><a name="l14417"></a><span class="lineno">14417</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l14418"></a><span class="lineno">14418</span>&#160;</div><div class="line"><a name="l14419"></a><span class="lineno">14419</span>&#160;<span class="keyword">class </span>AssertHelper;</div><div class="line"><a name="l14420"></a><span class="lineno">14420</span>&#160;<span class="keyword">class </span>DefaultGlobalTestPartResultReporter;</div><div class="line"><a name="l14421"></a><span class="lineno">14421</span>&#160;<span class="keyword">class </span>ExecDeathTest;</div><div class="line"><a name="l14422"></a><span class="lineno">14422</span>&#160;<span class="keyword">class </span>NoExecDeathTest;</div><div class="line"><a name="l14423"></a><span class="lineno">14423</span>&#160;<span class="keyword">class </span>FinalSuccessChecker;</div><div class="line"><a name="l14424"></a><span class="lineno">14424</span>&#160;<span class="keyword">class </span>GTestFlagSaver;</div><div class="line"><a name="l14425"></a><span class="lineno">14425</span>&#160;<span class="keyword">class </span>StreamingListenerTest;</div><div class="line"><a name="l14426"></a><span class="lineno">14426</span>&#160;<span class="keyword">class </span>TestResultAccessor;</div><div class="line"><a name="l14427"></a><span class="lineno">14427</span>&#160;<span class="keyword">class </span>TestEventListenersAccessor;</div><div class="line"><a name="l14428"></a><span class="lineno">14428</span>&#160;<span class="keyword">class </span>TestEventRepeater;</div><div class="line"><a name="l14429"></a><span class="lineno">14429</span>&#160;<span class="keyword">class </span>UnitTestRecordPropertyTestHelper;</div><div class="line"><a name="l14430"></a><span class="lineno">14430</span>&#160;<span class="keyword">class </span>WindowsDeathTest;</div><div class="line"><a name="l14431"></a><span class="lineno">14431</span>&#160;<span class="keyword">class </span>FuchsiaDeathTest;</div><div class="line"><a name="l14432"></a><span class="lineno">14432</span>&#160;<span class="keyword">class </span>UnitTestImpl* GetUnitTestImpl();</div><div class="line"><a name="l14433"></a><span class="lineno">14433</span>&#160;<span class="keywordtype">void</span> ReportFailureInUnknownLocation(TestPartResult::Type result_type,</div><div class="line"><a name="l14434"></a><span class="lineno">14434</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; message);</div><div class="line"><a name="l14435"></a><span class="lineno">14435</span>&#160;</div><div class="line"><a name="l14436"></a><span class="lineno">14436</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l14437"></a><span class="lineno">14437</span>&#160;</div><div class="line"><a name="l14438"></a><span class="lineno">14438</span>&#160;<span class="comment">// The friend relationship of some of these classes is cyclic.</span></div><div class="line"><a name="l14439"></a><span class="lineno">14439</span>&#160;<span class="comment">// If we don&#39;t forward declare them the compiler might confuse the classes</span></div><div class="line"><a name="l14440"></a><span class="lineno">14440</span>&#160;<span class="comment">// in friendship clauses with same named classes on the scope.</span></div><div class="line"><a name="l14441"></a><span class="lineno">14441</span>&#160;<span class="keyword">class </span>Test;</div><div class="line"><a name="l14442"></a><span class="lineno">14442</span>&#160;<span class="keyword">class </span>TestSuite;</div><div class="line"><a name="l14443"></a><span class="lineno">14443</span>&#160;</div><div class="line"><a name="l14444"></a><span class="lineno">14444</span>&#160;<span class="comment">// Old API is still available but deprecated</span></div><div class="line"><a name="l14445"></a><span class="lineno">14445</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l14446"></a><span class="lineno">14446</span>&#160;<span class="keyword">using</span> TestCase = TestSuite;</div><div class="line"><a name="l14447"></a><span class="lineno">14447</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l14448"></a><span class="lineno">14448</span>&#160;<span class="keyword">class </span>TestInfo;</div><div class="line"><a name="l14449"></a><span class="lineno">14449</span>&#160;<span class="keyword">class </span>UnitTest;</div><div class="line"><a name="l14450"></a><span class="lineno">14450</span>&#160;</div><div class="line"><a name="l14451"></a><span class="lineno">14451</span>&#160;<span class="comment">// A class for indicating whether an assertion was successful. When</span></div><div class="line"><a name="l14452"></a><span class="lineno">14452</span>&#160;<span class="comment">// the assertion wasn&#39;t successful, the AssertionResult object</span></div><div class="line"><a name="l14453"></a><span class="lineno">14453</span>&#160;<span class="comment">// remembers a non-empty message that describes how it failed.</span></div><div class="line"><a name="l14454"></a><span class="lineno">14454</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14455"></a><span class="lineno">14455</span>&#160;<span class="comment">// To create an instance of this class, use one of the factory functions</span></div><div class="line"><a name="l14456"></a><span class="lineno">14456</span>&#160;<span class="comment">// (AssertionSuccess() and AssertionFailure()).</span></div><div class="line"><a name="l14457"></a><span class="lineno">14457</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14458"></a><span class="lineno">14458</span>&#160;<span class="comment">// This class is useful for two purposes:</span></div><div class="line"><a name="l14459"></a><span class="lineno">14459</span>&#160;<span class="comment">// 1. Defining predicate functions to be used with Boolean test assertions</span></div><div class="line"><a name="l14460"></a><span class="lineno">14460</span>&#160;<span class="comment">// EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts</span></div><div class="line"><a name="l14461"></a><span class="lineno">14461</span>&#160;<span class="comment">// 2. Defining predicate-format functions to be</span></div><div class="line"><a name="l14462"></a><span class="lineno">14462</span>&#160;<span class="comment">// used with predicate assertions (ASSERT_PRED_FORMAT*, etc).</span></div><div class="line"><a name="l14463"></a><span class="lineno">14463</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14464"></a><span class="lineno">14464</span>&#160;<span class="comment">// For example, if you define IsEven predicate:</span></div><div class="line"><a name="l14465"></a><span class="lineno">14465</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14466"></a><span class="lineno">14466</span>&#160;<span class="comment">// testing::AssertionResult IsEven(int n) {</span></div><div class="line"><a name="l14467"></a><span class="lineno">14467</span>&#160;<span class="comment">// if ((n % 2) == 0)</span></div><div class="line"><a name="l14468"></a><span class="lineno">14468</span>&#160;<span class="comment">// return testing::AssertionSuccess();</span></div><div class="line"><a name="l14469"></a><span class="lineno">14469</span>&#160;<span class="comment">// else</span></div><div class="line"><a name="l14470"></a><span class="lineno">14470</span>&#160;<span class="comment">// return testing::AssertionFailure() &lt;&lt; n &lt;&lt; &quot; is odd&quot;;</span></div><div class="line"><a name="l14471"></a><span class="lineno">14471</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l14472"></a><span class="lineno">14472</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14473"></a><span class="lineno">14473</span>&#160;<span class="comment">// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5)))</span></div><div class="line"><a name="l14474"></a><span class="lineno">14474</span>&#160;<span class="comment">// will print the message</span></div><div class="line"><a name="l14475"></a><span class="lineno">14475</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14476"></a><span class="lineno">14476</span>&#160;<span class="comment">// Value of: IsEven(Fib(5))</span></div><div class="line"><a name="l14477"></a><span class="lineno">14477</span>&#160;<span class="comment">// Actual: false (5 is odd)</span></div><div class="line"><a name="l14478"></a><span class="lineno">14478</span>&#160;<span class="comment">// Expected: true</span></div><div class="line"><a name="l14479"></a><span class="lineno">14479</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14480"></a><span class="lineno">14480</span>&#160;<span class="comment">// instead of a more opaque</span></div><div class="line"><a name="l14481"></a><span class="lineno">14481</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14482"></a><span class="lineno">14482</span>&#160;<span class="comment">// Value of: IsEven(Fib(5))</span></div><div class="line"><a name="l14483"></a><span class="lineno">14483</span>&#160;<span class="comment">// Actual: false</span></div><div class="line"><a name="l14484"></a><span class="lineno">14484</span>&#160;<span class="comment">// Expected: true</span></div><div class="line"><a name="l14485"></a><span class="lineno">14485</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14486"></a><span class="lineno">14486</span>&#160;<span class="comment">// in case IsEven is a simple Boolean predicate.</span></div><div class="line"><a name="l14487"></a><span class="lineno">14487</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14488"></a><span class="lineno">14488</span>&#160;<span class="comment">// If you expect your predicate to be reused and want to support informative</span></div><div class="line"><a name="l14489"></a><span class="lineno">14489</span>&#160;<span class="comment">// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up</span></div><div class="line"><a name="l14490"></a><span class="lineno">14490</span>&#160;<span class="comment">// about half as often as positive ones in our tests), supply messages for</span></div><div class="line"><a name="l14491"></a><span class="lineno">14491</span>&#160;<span class="comment">// both success and failure cases:</span></div><div class="line"><a name="l14492"></a><span class="lineno">14492</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14493"></a><span class="lineno">14493</span>&#160;<span class="comment">// testing::AssertionResult IsEven(int n) {</span></div><div class="line"><a name="l14494"></a><span class="lineno">14494</span>&#160;<span class="comment">// if ((n % 2) == 0)</span></div><div class="line"><a name="l14495"></a><span class="lineno">14495</span>&#160;<span class="comment">// return testing::AssertionSuccess() &lt;&lt; n &lt;&lt; &quot; is even&quot;;</span></div><div class="line"><a name="l14496"></a><span class="lineno">14496</span>&#160;<span class="comment">// else</span></div><div class="line"><a name="l14497"></a><span class="lineno">14497</span>&#160;<span class="comment">// return testing::AssertionFailure() &lt;&lt; n &lt;&lt; &quot; is odd&quot;;</span></div><div class="line"><a name="l14498"></a><span class="lineno">14498</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l14499"></a><span class="lineno">14499</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14500"></a><span class="lineno">14500</span>&#160;<span class="comment">// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print</span></div><div class="line"><a name="l14501"></a><span class="lineno">14501</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14502"></a><span class="lineno">14502</span>&#160;<span class="comment">// Value of: IsEven(Fib(6))</span></div><div class="line"><a name="l14503"></a><span class="lineno">14503</span>&#160;<span class="comment">// Actual: true (8 is even)</span></div><div class="line"><a name="l14504"></a><span class="lineno">14504</span>&#160;<span class="comment">// Expected: false</span></div><div class="line"><a name="l14505"></a><span class="lineno">14505</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14506"></a><span class="lineno">14506</span>&#160;<span class="comment">// NB: Predicates that support negative Boolean assertions have reduced</span></div><div class="line"><a name="l14507"></a><span class="lineno">14507</span>&#160;<span class="comment">// performance in positive ones so be careful not to use them in tests</span></div><div class="line"><a name="l14508"></a><span class="lineno">14508</span>&#160;<span class="comment">// that have lots (tens of thousands) of positive Boolean assertions.</span></div><div class="line"><a name="l14509"></a><span class="lineno">14509</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14510"></a><span class="lineno">14510</span>&#160;<span class="comment">// To use this class with EXPECT_PRED_FORMAT assertions such as:</span></div><div class="line"><a name="l14511"></a><span class="lineno">14511</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14512"></a><span class="lineno">14512</span>&#160;<span class="comment">// // Verifies that Foo() returns an even number.</span></div><div class="line"><a name="l14513"></a><span class="lineno">14513</span>&#160;<span class="comment">// EXPECT_PRED_FORMAT1(IsEven, Foo());</span></div><div class="line"><a name="l14514"></a><span class="lineno">14514</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14515"></a><span class="lineno">14515</span>&#160;<span class="comment">// you need to define:</span></div><div class="line"><a name="l14516"></a><span class="lineno">14516</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14517"></a><span class="lineno">14517</span>&#160;<span class="comment">// testing::AssertionResult IsEven(const char* expr, int n) {</span></div><div class="line"><a name="l14518"></a><span class="lineno">14518</span>&#160;<span class="comment">// if ((n % 2) == 0)</span></div><div class="line"><a name="l14519"></a><span class="lineno">14519</span>&#160;<span class="comment">// return testing::AssertionSuccess();</span></div><div class="line"><a name="l14520"></a><span class="lineno">14520</span>&#160;<span class="comment">// else</span></div><div class="line"><a name="l14521"></a><span class="lineno">14521</span>&#160;<span class="comment">// return testing::AssertionFailure()</span></div><div class="line"><a name="l14522"></a><span class="lineno">14522</span>&#160;<span class="comment">// &lt;&lt; &quot;Expected: &quot; &lt;&lt; expr &lt;&lt; &quot; is even\n Actual: it&#39;s &quot; &lt;&lt; n;</span></div><div class="line"><a name="l14523"></a><span class="lineno">14523</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l14524"></a><span class="lineno">14524</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14525"></a><span class="lineno">14525</span>&#160;<span class="comment">// If Foo() returns 5, you will see the following message:</span></div><div class="line"><a name="l14526"></a><span class="lineno">14526</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14527"></a><span class="lineno">14527</span>&#160;<span class="comment">// Expected: Foo() is even</span></div><div class="line"><a name="l14528"></a><span class="lineno">14528</span>&#160;<span class="comment">// Actual: it&#39;s 5</span></div><div class="line"><a name="l14529"></a><span class="lineno">14529</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14530"></a><span class="lineno">14530</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult {</div><div class="line"><a name="l14531"></a><span class="lineno">14531</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l14532"></a><span class="lineno">14532</span>&#160; <span class="comment">// Copy constructor.</span></div><div class="line"><a name="l14533"></a><span class="lineno">14533</span>&#160; <span class="comment">// Used in EXPECT_TRUE/FALSE(assertion_result).</span></div><div class="line"><a name="l14534"></a><span class="lineno">14534</span>&#160; AssertionResult(<span class="keyword">const</span> AssertionResult&amp; other);</div><div class="line"><a name="l14535"></a><span class="lineno">14535</span>&#160;</div><div class="line"><a name="l14536"></a><span class="lineno">14536</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1910</span></div><div class="line"><a name="l14537"></a><span class="lineno">14537</span>&#160; <a class="code" href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a>(4800 <span class="comment">/* forcing value to bool */</span>)</div><div class="line"><a name="l14538"></a><span class="lineno">14538</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l14539"></a><span class="lineno">14539</span>&#160;</div><div class="line"><a name="l14540"></a><span class="lineno">14540</span>&#160; <span class="comment">// Used in the EXPECT_TRUE/FALSE(bool_expression).</span></div><div class="line"><a name="l14541"></a><span class="lineno">14541</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l14542"></a><span class="lineno">14542</span>&#160; <span class="comment">// T must be contextually convertible to bool.</span></div><div class="line"><a name="l14543"></a><span class="lineno">14543</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l14544"></a><span class="lineno">14544</span>&#160; <span class="comment">// The second parameter prevents this overload from being considered if</span></div><div class="line"><a name="l14545"></a><span class="lineno">14545</span>&#160; <span class="comment">// the argument is implicitly convertible to AssertionResult. In that case</span></div><div class="line"><a name="l14546"></a><span class="lineno">14546</span>&#160; <span class="comment">// we want AssertionResult&#39;s copy constructor to be used.</span></div><div class="line"><a name="l14547"></a><span class="lineno">14547</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l14548"></a><span class="lineno">14548</span>&#160; <span class="keyword">explicit</span> AssertionResult(</div><div class="line"><a name="l14549"></a><span class="lineno">14549</span>&#160; <span class="keyword">const</span> T&amp; success,</div><div class="line"><a name="l14550"></a><span class="lineno">14550</span>&#160; <span class="keyword">typename</span> internal::EnableIf&lt;</div><div class="line"><a name="l14551"></a><span class="lineno">14551</span>&#160; !internal::ImplicitlyConvertible&lt;T, AssertionResult&gt;::value&gt;::type*</div><div class="line"><a name="l14552"></a><span class="lineno">14552</span>&#160; <span class="comment">/*enabler*/</span></div><div class="line"><a name="l14553"></a><span class="lineno">14553</span>&#160; = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l14554"></a><span class="lineno">14554</span>&#160; : success_(success) {}</div><div class="line"><a name="l14555"></a><span class="lineno">14555</span>&#160;</div><div class="line"><a name="l14556"></a><span class="lineno">14556</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; _MSC_VER &lt; 1910</span></div><div class="line"><a name="l14557"></a><span class="lineno">14557</span>&#160; <a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>()</div><div class="line"><a name="l14558"></a><span class="lineno">14558</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l14559"></a><span class="lineno">14559</span>&#160;</div><div class="line"><a name="l14560"></a><span class="lineno">14560</span>&#160; <span class="comment">// Assignment operator.</span></div><div class="line"><a name="l14561"></a><span class="lineno">14561</span>&#160; AssertionResult&amp; operator=(AssertionResult other) {</div><div class="line"><a name="l14562"></a><span class="lineno">14562</span>&#160; <a class="code" href="namespaceutl.html#ae0f873b4883af7cc18cb23dd2810f4e6">swap</a>(other);</div><div class="line"><a name="l14563"></a><span class="lineno">14563</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l14564"></a><span class="lineno">14564</span>&#160; }</div><div class="line"><a name="l14565"></a><span class="lineno">14565</span>&#160;</div><div class="line"><a name="l14566"></a><span class="lineno">14566</span>&#160; <span class="comment">// Returns true iff the assertion succeeded.</span></div><div class="line"><a name="l14567"></a><span class="lineno">14567</span>&#160; <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> success_; } <span class="comment">// NOLINT</span></div><div class="line"><a name="l14568"></a><span class="lineno">14568</span>&#160;</div><div class="line"><a name="l14569"></a><span class="lineno">14569</span>&#160; <span class="comment">// Returns the assertion&#39;s negation. Used with EXPECT/ASSERT_FALSE.</span></div><div class="line"><a name="l14570"></a><span class="lineno">14570</span>&#160; AssertionResult operator!() <span class="keyword">const</span>;</div><div class="line"><a name="l14571"></a><span class="lineno">14571</span>&#160;</div><div class="line"><a name="l14572"></a><span class="lineno">14572</span>&#160; <span class="comment">// Returns the text streamed into this AssertionResult. Test assertions</span></div><div class="line"><a name="l14573"></a><span class="lineno">14573</span>&#160; <span class="comment">// use it when they fail (i.e., the predicate&#39;s outcome doesn&#39;t match the</span></div><div class="line"><a name="l14574"></a><span class="lineno">14574</span>&#160; <span class="comment">// assertion&#39;s expectation). When nothing has been streamed into the</span></div><div class="line"><a name="l14575"></a><span class="lineno">14575</span>&#160; <span class="comment">// object, returns an empty string.</span></div><div class="line"><a name="l14576"></a><span class="lineno">14576</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* message()<span class="keyword"> const </span>{</div><div class="line"><a name="l14577"></a><span class="lineno">14577</span>&#160; <span class="keywordflow">return</span> message_.get() != <span class="keyword">nullptr</span> ? message_-&gt;c_str() : <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l14578"></a><span class="lineno">14578</span>&#160; }</div><div class="line"><a name="l14579"></a><span class="lineno">14579</span>&#160; <span class="comment">// Deprecated; please use message() instead.</span></div><div class="line"><a name="l14580"></a><span class="lineno">14580</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* failure_message()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> message(); }</div><div class="line"><a name="l14581"></a><span class="lineno">14581</span>&#160;</div><div class="line"><a name="l14582"></a><span class="lineno">14582</span>&#160; <span class="comment">// Streams a custom failure message into this object.</span></div><div class="line"><a name="l14583"></a><span class="lineno">14583</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; AssertionResult&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator&lt;&lt;</a>(<span class="keyword">const</span> T&amp; value) {</div><div class="line"><a name="l14584"></a><span class="lineno">14584</span>&#160; AppendMessage(Message() &lt;&lt; value);</div><div class="line"><a name="l14585"></a><span class="lineno">14585</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l14586"></a><span class="lineno">14586</span>&#160; }</div><div class="line"><a name="l14587"></a><span class="lineno">14587</span>&#160;</div><div class="line"><a name="l14588"></a><span class="lineno">14588</span>&#160; <span class="comment">// Allows streaming basic output manipulators such as endl or flush into</span></div><div class="line"><a name="l14589"></a><span class="lineno">14589</span>&#160; <span class="comment">// this object.</span></div><div class="line"><a name="l14590"></a><span class="lineno">14590</span>&#160; AssertionResult&amp; <a class="code" href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">operator&lt;&lt;</a>(</div><div class="line"><a name="l14591"></a><span class="lineno">14591</span>&#160; ::std::ostream&amp; (*basic_manipulator)(::std::ostream&amp; stream)) {</div><div class="line"><a name="l14592"></a><span class="lineno">14592</span>&#160; AppendMessage(Message() &lt;&lt; basic_manipulator);</div><div class="line"><a name="l14593"></a><span class="lineno">14593</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l14594"></a><span class="lineno">14594</span>&#160; }</div><div class="line"><a name="l14595"></a><span class="lineno">14595</span>&#160;</div><div class="line"><a name="l14596"></a><span class="lineno">14596</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l14597"></a><span class="lineno">14597</span>&#160; <span class="comment">// Appends the contents of message to message_.</span></div><div class="line"><a name="l14598"></a><span class="lineno">14598</span>&#160; <span class="keywordtype">void</span> AppendMessage(<span class="keyword">const</span> Message&amp; a_message) {</div><div class="line"><a name="l14599"></a><span class="lineno">14599</span>&#160; <span class="keywordflow">if</span> (message_.get() == <span class="keyword">nullptr</span>) message_.reset(<a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">new ::std::string</a>);</div><div class="line"><a name="l14600"></a><span class="lineno">14600</span>&#160; message_-&gt;append(a_message.GetString().c_str());</div><div class="line"><a name="l14601"></a><span class="lineno">14601</span>&#160; }</div><div class="line"><a name="l14602"></a><span class="lineno">14602</span>&#160;</div><div class="line"><a name="l14603"></a><span class="lineno">14603</span>&#160; <span class="comment">// Swap the contents of this AssertionResult with other.</span></div><div class="line"><a name="l14604"></a><span class="lineno">14604</span>&#160; <span class="keywordtype">void</span> <a class="code" href="namespaceutl.html#ae0f873b4883af7cc18cb23dd2810f4e6">swap</a>(AssertionResult&amp; other);</div><div class="line"><a name="l14605"></a><span class="lineno">14605</span>&#160;</div><div class="line"><a name="l14606"></a><span class="lineno">14606</span>&#160; <span class="comment">// Stores result of the assertion predicate.</span></div><div class="line"><a name="l14607"></a><span class="lineno">14607</span>&#160; <span class="keywordtype">bool</span> success_;</div><div class="line"><a name="l14608"></a><span class="lineno">14608</span>&#160; <span class="comment">// Stores the message describing the condition in case the expectation</span></div><div class="line"><a name="l14609"></a><span class="lineno">14609</span>&#160; <span class="comment">// construct is not satisfied with the predicate&#39;s outcome.</span></div><div class="line"><a name="l14610"></a><span class="lineno">14610</span>&#160; <span class="comment">// Referenced via a pointer to avoid taking too much stack frame space</span></div><div class="line"><a name="l14611"></a><span class="lineno">14611</span>&#160; <span class="comment">// with test assertions.</span></div><div class="line"><a name="l14612"></a><span class="lineno">14612</span>&#160; std::unique_ptr&lt; ::std::string&gt; message_;</div><div class="line"><a name="l14613"></a><span class="lineno">14613</span>&#160;};</div><div class="line"><a name="l14614"></a><span class="lineno">14614</span>&#160;</div><div class="line"><a name="l14615"></a><span class="lineno">14615</span>&#160;<span class="comment">// Makes a successful assertion result.</span></div><div class="line"><a name="l14616"></a><span class="lineno">14616</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult AssertionSuccess();</div><div class="line"><a name="l14617"></a><span class="lineno">14617</span>&#160;</div><div class="line"><a name="l14618"></a><span class="lineno">14618</span>&#160;<span class="comment">// Makes a failed assertion result.</span></div><div class="line"><a name="l14619"></a><span class="lineno">14619</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult AssertionFailure();</div><div class="line"><a name="l14620"></a><span class="lineno">14620</span>&#160;</div><div class="line"><a name="l14621"></a><span class="lineno">14621</span>&#160;<span class="comment">// Makes a failed assertion result with the given failure message.</span></div><div class="line"><a name="l14622"></a><span class="lineno">14622</span>&#160;<span class="comment">// Deprecated; use AssertionFailure() &lt;&lt; msg.</span></div><div class="line"><a name="l14623"></a><span class="lineno">14623</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult AssertionFailure(<span class="keyword">const</span> Message&amp; msg);</div><div class="line"><a name="l14624"></a><span class="lineno">14624</span>&#160;</div><div class="line"><a name="l14625"></a><span class="lineno">14625</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l14626"></a><span class="lineno">14626</span>&#160;</div><div class="line"><a name="l14627"></a><span class="lineno">14627</span>&#160;<span class="comment">// Includes the auto-generated header that implements a family of generic</span></div><div class="line"><a name="l14628"></a><span class="lineno">14628</span>&#160;<span class="comment">// predicate assertion macros. This include comes late because it relies on</span></div><div class="line"><a name="l14629"></a><span class="lineno">14629</span>&#160;<span class="comment">// APIs declared above.</span></div><div class="line"><a name="l14630"></a><span class="lineno">14630</span>&#160;<span class="comment">// Copyright 2006, Google Inc.</span></div><div class="line"><a name="l14631"></a><span class="lineno">14631</span>&#160;<span class="comment">// All rights reserved.</span></div><div class="line"><a name="l14632"></a><span class="lineno">14632</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14633"></a><span class="lineno">14633</span>&#160;<span class="comment">// Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l14634"></a><span class="lineno">14634</span>&#160;<span class="comment">// modification, are permitted provided that the following conditions are</span></div><div class="line"><a name="l14635"></a><span class="lineno">14635</span>&#160;<span class="comment">// met:</span></div><div class="line"><a name="l14636"></a><span class="lineno">14636</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14637"></a><span class="lineno">14637</span>&#160;<span class="comment">// * Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l14638"></a><span class="lineno">14638</span>&#160;<span class="comment">// notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l14639"></a><span class="lineno">14639</span>&#160;<span class="comment">// * Redistributions in binary form must reproduce the above</span></div><div class="line"><a name="l14640"></a><span class="lineno">14640</span>&#160;<span class="comment">// copyright notice, this list of conditions and the following disclaimer</span></div><div class="line"><a name="l14641"></a><span class="lineno">14641</span>&#160;<span class="comment">// in the documentation and/or other materials provided with the</span></div><div class="line"><a name="l14642"></a><span class="lineno">14642</span>&#160;<span class="comment">// distribution.</span></div><div class="line"><a name="l14643"></a><span class="lineno">14643</span>&#160;<span class="comment">// * Neither the name of Google Inc. nor the names of its</span></div><div class="line"><a name="l14644"></a><span class="lineno">14644</span>&#160;<span class="comment">// contributors may be used to endorse or promote products derived from</span></div><div class="line"><a name="l14645"></a><span class="lineno">14645</span>&#160;<span class="comment">// this software without specific prior written permission.</span></div><div class="line"><a name="l14646"></a><span class="lineno">14646</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14647"></a><span class="lineno">14647</span>&#160;<span class="comment">// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div><div class="line"><a name="l14648"></a><span class="lineno">14648</span>&#160;<span class="comment">// &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div><div class="line"><a name="l14649"></a><span class="lineno">14649</span>&#160;<span class="comment">// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div><div class="line"><a name="l14650"></a><span class="lineno">14650</span>&#160;<span class="comment">// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div><div class="line"><a name="l14651"></a><span class="lineno">14651</span>&#160;<span class="comment">// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div><div class="line"><a name="l14652"></a><span class="lineno">14652</span>&#160;<span class="comment">// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div><div class="line"><a name="l14653"></a><span class="lineno">14653</span>&#160;<span class="comment">// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div><div class="line"><a name="l14654"></a><span class="lineno">14654</span>&#160;<span class="comment">// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div><div class="line"><a name="l14655"></a><span class="lineno">14655</span>&#160;<span class="comment">// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div><div class="line"><a name="l14656"></a><span class="lineno">14656</span>&#160;<span class="comment">// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div><div class="line"><a name="l14657"></a><span class="lineno">14657</span>&#160;<span class="comment">// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l14658"></a><span class="lineno">14658</span>&#160;</div><div class="line"><a name="l14659"></a><span class="lineno">14659</span>&#160;<span class="comment">// This file is AUTOMATICALLY GENERATED on 01/02/2019 by command</span></div><div class="line"><a name="l14660"></a><span class="lineno">14660</span>&#160;<span class="comment">// &#39;gen_gtest_pred_impl.py 5&#39;. DO NOT EDIT BY HAND!</span></div><div class="line"><a name="l14661"></a><span class="lineno">14661</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14662"></a><span class="lineno">14662</span>&#160;<span class="comment">// Implements a family of generic predicate assertion macros.</span></div><div class="line"><a name="l14663"></a><span class="lineno">14663</span>&#160;<span class="comment">// GOOGLETEST_CM0001 DO NOT DELETE</span></div><div class="line"><a name="l14664"></a><span class="lineno">14664</span>&#160;</div><div class="line"><a name="l14665"></a><span class="lineno">14665</span>&#160;<span class="preprocessor">#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_</span></div><div class="line"><a name="l14666"></a><span class="lineno"><a class="line" href="gtest_8h.html#a36afb7e44e600d2da0e6d8f4f739ea3b">14666</a></span>&#160;<span class="preprocessor">#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_</span></div><div class="line"><a name="l14667"></a><span class="lineno">14667</span>&#160;</div><div class="line"><a name="l14668"></a><span class="lineno">14668</span>&#160;</div><div class="line"><a name="l14669"></a><span class="lineno">14669</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l14670"></a><span class="lineno">14670</span>&#160;</div><div class="line"><a name="l14671"></a><span class="lineno">14671</span>&#160;<span class="comment">// This header implements a family of generic predicate assertion</span></div><div class="line"><a name="l14672"></a><span class="lineno">14672</span>&#160;<span class="comment">// macros:</span></div><div class="line"><a name="l14673"></a><span class="lineno">14673</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14674"></a><span class="lineno">14674</span>&#160;<span class="comment">// ASSERT_PRED_FORMAT1(pred_format, v1)</span></div><div class="line"><a name="l14675"></a><span class="lineno">14675</span>&#160;<span class="comment">// ASSERT_PRED_FORMAT2(pred_format, v1, v2)</span></div><div class="line"><a name="l14676"></a><span class="lineno">14676</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l14677"></a><span class="lineno">14677</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14678"></a><span class="lineno">14678</span>&#160;<span class="comment">// where pred_format is a function or functor that takes n (in the</span></div><div class="line"><a name="l14679"></a><span class="lineno">14679</span>&#160;<span class="comment">// case of ASSERT_PRED_FORMATn) values and their source expression</span></div><div class="line"><a name="l14680"></a><span class="lineno">14680</span>&#160;<span class="comment">// text, and returns a testing::AssertionResult. See the definition</span></div><div class="line"><a name="l14681"></a><span class="lineno">14681</span>&#160;<span class="comment">// of ASSERT_EQ in gtest.h for an example.</span></div><div class="line"><a name="l14682"></a><span class="lineno">14682</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14683"></a><span class="lineno">14683</span>&#160;<span class="comment">// If you don&#39;t care about formatting, you can use the more</span></div><div class="line"><a name="l14684"></a><span class="lineno">14684</span>&#160;<span class="comment">// restrictive version:</span></div><div class="line"><a name="l14685"></a><span class="lineno">14685</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14686"></a><span class="lineno">14686</span>&#160;<span class="comment">// ASSERT_PRED1(pred, v1)</span></div><div class="line"><a name="l14687"></a><span class="lineno">14687</span>&#160;<span class="comment">// ASSERT_PRED2(pred, v1, v2)</span></div><div class="line"><a name="l14688"></a><span class="lineno">14688</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l14689"></a><span class="lineno">14689</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14690"></a><span class="lineno">14690</span>&#160;<span class="comment">// where pred is an n-ary function or functor that returns bool,</span></div><div class="line"><a name="l14691"></a><span class="lineno">14691</span>&#160;<span class="comment">// and the values v1, v2, ..., must support the &lt;&lt; operator for</span></div><div class="line"><a name="l14692"></a><span class="lineno">14692</span>&#160;<span class="comment">// streaming to std::ostream.</span></div><div class="line"><a name="l14693"></a><span class="lineno">14693</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14694"></a><span class="lineno">14694</span>&#160;<span class="comment">// We also define the EXPECT_* variations.</span></div><div class="line"><a name="l14695"></a><span class="lineno">14695</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14696"></a><span class="lineno">14696</span>&#160;<span class="comment">// For now we only support predicates whose arity is at most 5.</span></div><div class="line"><a name="l14697"></a><span class="lineno">14697</span>&#160;<span class="comment">// Please email googletestframework@googlegroups.com if you need</span></div><div class="line"><a name="l14698"></a><span class="lineno">14698</span>&#160;<span class="comment">// support for higher arities.</span></div><div class="line"><a name="l14699"></a><span class="lineno">14699</span>&#160;</div><div class="line"><a name="l14700"></a><span class="lineno">14700</span>&#160;<span class="comment">// GTEST_ASSERT_ is the basic statement to which all of the assertions</span></div><div class="line"><a name="l14701"></a><span class="lineno">14701</span>&#160;<span class="comment">// in this file reduce. Don&#39;t use this in your code.</span></div><div class="line"><a name="l14702"></a><span class="lineno">14702</span>&#160;</div><div class="line"><a name="l14703"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8c09939dd67f1bb5b68c9f6a44ea75db">14703</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_(expression, on_failure) \</span></div><div class="line"><a name="l14704"></a><span class="lineno">14704</span>&#160;<span class="preprocessor"> GTEST_AMBIGUOUS_ELSE_BLOCKER_ \</span></div><div class="line"><a name="l14705"></a><span class="lineno">14705</span>&#160;<span class="preprocessor"> if (const ::testing::AssertionResult gtest_ar = (expression)) \</span></div><div class="line"><a name="l14706"></a><span class="lineno">14706</span>&#160;<span class="preprocessor"> ; \</span></div><div class="line"><a name="l14707"></a><span class="lineno">14707</span>&#160;<span class="preprocessor"> else \</span></div><div class="line"><a name="l14708"></a><span class="lineno">14708</span>&#160;<span class="preprocessor"> on_failure(gtest_ar.failure_message())</span></div><div class="line"><a name="l14709"></a><span class="lineno">14709</span>&#160;</div><div class="line"><a name="l14710"></a><span class="lineno">14710</span>&#160;</div><div class="line"><a name="l14711"></a><span class="lineno">14711</span>&#160;<span class="comment">// Helper function for implementing {EXPECT|ASSERT}_PRED1. Don&#39;t use</span></div><div class="line"><a name="l14712"></a><span class="lineno">14712</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14713"></a><span class="lineno">14713</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pred,</div><div class="line"><a name="l14714"></a><span class="lineno">14714</span>&#160; <span class="keyword">typename</span> T1&gt;</div><div class="line"><a name="l14715"></a><span class="lineno"><a class="line" href="namespacetesting.html#a7f73180474723be6e92185d6fa9e7c9f">14715</a></span>&#160;AssertionResult <a class="code" href="namespacetesting.html#a7f73180474723be6e92185d6fa9e7c9f">AssertPred1Helper</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pred_text,</div><div class="line"><a name="l14716"></a><span class="lineno">14716</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e1,</div><div class="line"><a name="l14717"></a><span class="lineno">14717</span>&#160; Pred pred,</div><div class="line"><a name="l14718"></a><span class="lineno">14718</span>&#160; <span class="keyword">const</span> T1&amp; v1) {</div><div class="line"><a name="l14719"></a><span class="lineno">14719</span>&#160; <span class="keywordflow">if</span> (pred(v1)) <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l14720"></a><span class="lineno">14720</span>&#160;</div><div class="line"><a name="l14721"></a><span class="lineno">14721</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l14722"></a><span class="lineno">14722</span>&#160; &lt;&lt; pred_text &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot;) evaluates to false, where&quot;</span></div><div class="line"><a name="l14723"></a><span class="lineno">14723</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14724"></a><span class="lineno">14724</span>&#160; &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v1);</div><div class="line"><a name="l14725"></a><span class="lineno">14725</span>&#160;}</div><div class="line"><a name="l14726"></a><span class="lineno">14726</span>&#160;</div><div class="line"><a name="l14727"></a><span class="lineno">14727</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.</span></div><div class="line"><a name="l14728"></a><span class="lineno">14728</span>&#160;<span class="comment">// Don&#39;t use this in your code.</span></div><div class="line"><a name="l14729"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa3e3bfe04bb0e54d7f0e57e2f991d1eb">14729</a></span>&#160;<span class="preprocessor">#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\</span></div><div class="line"><a name="l14730"></a><span class="lineno">14730</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(pred_format(#v1, v1), \</span></div><div class="line"><a name="l14731"></a><span class="lineno">14731</span>&#160;<span class="preprocessor"> on_failure)</span></div><div class="line"><a name="l14732"></a><span class="lineno">14732</span>&#160;</div><div class="line"><a name="l14733"></a><span class="lineno">14733</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED1. Don&#39;t use</span></div><div class="line"><a name="l14734"></a><span class="lineno">14734</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14735"></a><span class="lineno"><a class="line" href="gtest_8h.html#ad44cf322952076d85305bbdf39769ac1">14735</a></span>&#160;<span class="preprocessor">#define GTEST_PRED1_(pred, v1, on_failure)\</span></div><div class="line"><a name="l14736"></a><span class="lineno">14736</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \</span></div><div class="line"><a name="l14737"></a><span class="lineno">14737</span>&#160;<span class="preprocessor"> #v1, \</span></div><div class="line"><a name="l14738"></a><span class="lineno">14738</span>&#160;<span class="preprocessor"> pred, \</span></div><div class="line"><a name="l14739"></a><span class="lineno">14739</span>&#160;<span class="preprocessor"> v1), on_failure)</span></div><div class="line"><a name="l14740"></a><span class="lineno">14740</span>&#160;</div><div class="line"><a name="l14741"></a><span class="lineno">14741</span>&#160;<span class="comment">// Unary predicate assertion macros.</span></div><div class="line"><a name="l14742"></a><span class="lineno"><a class="line" href="gtest_8h.html#a07132aa62cf4902e50e68d0265f573b6">14742</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED_FORMAT1(pred_format, v1) \</span></div><div class="line"><a name="l14743"></a><span class="lineno">14743</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14744"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6d09aa83f8d297481380c7c073c9f070">14744</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED1(pred, v1) \</span></div><div class="line"><a name="l14745"></a><span class="lineno">14745</span>&#160;<span class="preprocessor"> GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14746"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3771ca0d1a72013aebc3d66e046491ed">14746</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED_FORMAT1(pred_format, v1) \</span></div><div class="line"><a name="l14747"></a><span class="lineno">14747</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14748"></a><span class="lineno"><a class="line" href="gtest_8h.html#a7d72f779b7d39b8f73a563ebc6d0604b">14748</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED1(pred, v1) \</span></div><div class="line"><a name="l14749"></a><span class="lineno">14749</span>&#160;<span class="preprocessor"> GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14750"></a><span class="lineno">14750</span>&#160;</div><div class="line"><a name="l14751"></a><span class="lineno">14751</span>&#160;</div><div class="line"><a name="l14752"></a><span class="lineno">14752</span>&#160;</div><div class="line"><a name="l14753"></a><span class="lineno">14753</span>&#160;<span class="comment">// Helper function for implementing {EXPECT|ASSERT}_PRED2. Don&#39;t use</span></div><div class="line"><a name="l14754"></a><span class="lineno">14754</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14755"></a><span class="lineno">14755</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pred,</div><div class="line"><a name="l14756"></a><span class="lineno">14756</span>&#160; <span class="keyword">typename</span> T1,</div><div class="line"><a name="l14757"></a><span class="lineno">14757</span>&#160; <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l14758"></a><span class="lineno"><a class="line" href="namespacetesting.html#aa6587938029dd8733ecb885068f08247">14758</a></span>&#160;AssertionResult <a class="code" href="namespacetesting.html#aa6587938029dd8733ecb885068f08247">AssertPred2Helper</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pred_text,</div><div class="line"><a name="l14759"></a><span class="lineno">14759</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e1,</div><div class="line"><a name="l14760"></a><span class="lineno">14760</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e2,</div><div class="line"><a name="l14761"></a><span class="lineno">14761</span>&#160; Pred pred,</div><div class="line"><a name="l14762"></a><span class="lineno">14762</span>&#160; <span class="keyword">const</span> T1&amp; v1,</div><div class="line"><a name="l14763"></a><span class="lineno">14763</span>&#160; <span class="keyword">const</span> T2&amp; v2) {</div><div class="line"><a name="l14764"></a><span class="lineno">14764</span>&#160; <span class="keywordflow">if</span> (pred(v1, v2)) <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l14765"></a><span class="lineno">14765</span>&#160;</div><div class="line"><a name="l14766"></a><span class="lineno">14766</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l14767"></a><span class="lineno">14767</span>&#160; &lt;&lt; pred_text &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e2</div><div class="line"><a name="l14768"></a><span class="lineno">14768</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) evaluates to false, where&quot;</span></div><div class="line"><a name="l14769"></a><span class="lineno">14769</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14770"></a><span class="lineno">14770</span>&#160; &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v1) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14771"></a><span class="lineno">14771</span>&#160; &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v2);</div><div class="line"><a name="l14772"></a><span class="lineno">14772</span>&#160;}</div><div class="line"><a name="l14773"></a><span class="lineno">14773</span>&#160;</div><div class="line"><a name="l14774"></a><span class="lineno">14774</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.</span></div><div class="line"><a name="l14775"></a><span class="lineno">14775</span>&#160;<span class="comment">// Don&#39;t use this in your code.</span></div><div class="line"><a name="l14776"></a><span class="lineno"><a class="line" href="gtest_8h.html#a115c18d1f752b7f091d577fb69cac372">14776</a></span>&#160;<span class="preprocessor">#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\</span></div><div class="line"><a name="l14777"></a><span class="lineno">14777</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), \</span></div><div class="line"><a name="l14778"></a><span class="lineno">14778</span>&#160;<span class="preprocessor"> on_failure)</span></div><div class="line"><a name="l14779"></a><span class="lineno">14779</span>&#160;</div><div class="line"><a name="l14780"></a><span class="lineno">14780</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED2. Don&#39;t use</span></div><div class="line"><a name="l14781"></a><span class="lineno">14781</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14782"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac560264104bd030b64034505d294a7b6">14782</a></span>&#160;<span class="preprocessor">#define GTEST_PRED2_(pred, v1, v2, on_failure)\</span></div><div class="line"><a name="l14783"></a><span class="lineno">14783</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \</span></div><div class="line"><a name="l14784"></a><span class="lineno">14784</span>&#160;<span class="preprocessor"> #v1, \</span></div><div class="line"><a name="l14785"></a><span class="lineno">14785</span>&#160;<span class="preprocessor"> #v2, \</span></div><div class="line"><a name="l14786"></a><span class="lineno">14786</span>&#160;<span class="preprocessor"> pred, \</span></div><div class="line"><a name="l14787"></a><span class="lineno">14787</span>&#160;<span class="preprocessor"> v1, \</span></div><div class="line"><a name="l14788"></a><span class="lineno">14788</span>&#160;<span class="preprocessor"> v2), on_failure)</span></div><div class="line"><a name="l14789"></a><span class="lineno">14789</span>&#160;</div><div class="line"><a name="l14790"></a><span class="lineno">14790</span>&#160;<span class="comment">// Binary predicate assertion macros.</span></div><div class="line"><a name="l14791"></a><span class="lineno"><a class="line" href="gtest_8h.html#af0141918615a5e2d5247e9cda8324dae">14791</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \</span></div><div class="line"><a name="l14792"></a><span class="lineno">14792</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14793"></a><span class="lineno"><a class="line" href="gtest_8h.html#a14e74e655e502914d3d07e083145ac91">14793</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED2(pred, v1, v2) \</span></div><div class="line"><a name="l14794"></a><span class="lineno">14794</span>&#160;<span class="preprocessor"> GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14795"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac452685a1a98ea3d96eb956a062ee210">14795</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \</span></div><div class="line"><a name="l14796"></a><span class="lineno">14796</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14797"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4e9b777cce4e5423f4c2e491be7aa818">14797</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED2(pred, v1, v2) \</span></div><div class="line"><a name="l14798"></a><span class="lineno">14798</span>&#160;<span class="preprocessor"> GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14799"></a><span class="lineno">14799</span>&#160;</div><div class="line"><a name="l14800"></a><span class="lineno">14800</span>&#160;</div><div class="line"><a name="l14801"></a><span class="lineno">14801</span>&#160;</div><div class="line"><a name="l14802"></a><span class="lineno">14802</span>&#160;<span class="comment">// Helper function for implementing {EXPECT|ASSERT}_PRED3. Don&#39;t use</span></div><div class="line"><a name="l14803"></a><span class="lineno">14803</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14804"></a><span class="lineno">14804</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pred,</div><div class="line"><a name="l14805"></a><span class="lineno">14805</span>&#160; <span class="keyword">typename</span> T1,</div><div class="line"><a name="l14806"></a><span class="lineno">14806</span>&#160; <span class="keyword">typename</span> T2,</div><div class="line"><a name="l14807"></a><span class="lineno">14807</span>&#160; <span class="keyword">typename</span> T3&gt;</div><div class="line"><a name="l14808"></a><span class="lineno"><a class="line" href="namespacetesting.html#ac92dcbd00a0ffb2913e65d286e321a22">14808</a></span>&#160;AssertionResult <a class="code" href="namespacetesting.html#ac92dcbd00a0ffb2913e65d286e321a22">AssertPred3Helper</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pred_text,</div><div class="line"><a name="l14809"></a><span class="lineno">14809</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e1,</div><div class="line"><a name="l14810"></a><span class="lineno">14810</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e2,</div><div class="line"><a name="l14811"></a><span class="lineno">14811</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e3,</div><div class="line"><a name="l14812"></a><span class="lineno">14812</span>&#160; Pred pred,</div><div class="line"><a name="l14813"></a><span class="lineno">14813</span>&#160; <span class="keyword">const</span> T1&amp; v1,</div><div class="line"><a name="l14814"></a><span class="lineno">14814</span>&#160; <span class="keyword">const</span> T2&amp; v2,</div><div class="line"><a name="l14815"></a><span class="lineno">14815</span>&#160; <span class="keyword">const</span> T3&amp; v3) {</div><div class="line"><a name="l14816"></a><span class="lineno">14816</span>&#160; <span class="keywordflow">if</span> (pred(v1, v2, v3)) <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l14817"></a><span class="lineno">14817</span>&#160;</div><div class="line"><a name="l14818"></a><span class="lineno">14818</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l14819"></a><span class="lineno">14819</span>&#160; &lt;&lt; pred_text &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e3</div><div class="line"><a name="l14820"></a><span class="lineno">14820</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) evaluates to false, where&quot;</span></div><div class="line"><a name="l14821"></a><span class="lineno">14821</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14822"></a><span class="lineno">14822</span>&#160; &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v1) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14823"></a><span class="lineno">14823</span>&#160; &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v2) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14824"></a><span class="lineno">14824</span>&#160; &lt;&lt; e3 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v3);</div><div class="line"><a name="l14825"></a><span class="lineno">14825</span>&#160;}</div><div class="line"><a name="l14826"></a><span class="lineno">14826</span>&#160;</div><div class="line"><a name="l14827"></a><span class="lineno">14827</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.</span></div><div class="line"><a name="l14828"></a><span class="lineno">14828</span>&#160;<span class="comment">// Don&#39;t use this in your code.</span></div><div class="line"><a name="l14829"></a><span class="lineno"><a class="line" href="gtest_8h.html#a49cdf8707268ee932bb772d879a226cc">14829</a></span>&#160;<span class="preprocessor">#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\</span></div><div class="line"><a name="l14830"></a><span class="lineno">14830</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), \</span></div><div class="line"><a name="l14831"></a><span class="lineno">14831</span>&#160;<span class="preprocessor"> on_failure)</span></div><div class="line"><a name="l14832"></a><span class="lineno">14832</span>&#160;</div><div class="line"><a name="l14833"></a><span class="lineno">14833</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED3. Don&#39;t use</span></div><div class="line"><a name="l14834"></a><span class="lineno">14834</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14835"></a><span class="lineno"><a class="line" href="gtest_8h.html#af30518f03233bc4486b55284b0827eb8">14835</a></span>&#160;<span class="preprocessor">#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\</span></div><div class="line"><a name="l14836"></a><span class="lineno">14836</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \</span></div><div class="line"><a name="l14837"></a><span class="lineno">14837</span>&#160;<span class="preprocessor"> #v1, \</span></div><div class="line"><a name="l14838"></a><span class="lineno">14838</span>&#160;<span class="preprocessor"> #v2, \</span></div><div class="line"><a name="l14839"></a><span class="lineno">14839</span>&#160;<span class="preprocessor"> #v3, \</span></div><div class="line"><a name="l14840"></a><span class="lineno">14840</span>&#160;<span class="preprocessor"> pred, \</span></div><div class="line"><a name="l14841"></a><span class="lineno">14841</span>&#160;<span class="preprocessor"> v1, \</span></div><div class="line"><a name="l14842"></a><span class="lineno">14842</span>&#160;<span class="preprocessor"> v2, \</span></div><div class="line"><a name="l14843"></a><span class="lineno">14843</span>&#160;<span class="preprocessor"> v3), on_failure)</span></div><div class="line"><a name="l14844"></a><span class="lineno">14844</span>&#160;</div><div class="line"><a name="l14845"></a><span class="lineno">14845</span>&#160;<span class="comment">// Ternary predicate assertion macros.</span></div><div class="line"><a name="l14846"></a><span class="lineno"><a class="line" href="gtest_8h.html#a7285708fa5d37d6d8ed5b5e59da08bae">14846</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \</span></div><div class="line"><a name="l14847"></a><span class="lineno">14847</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14848"></a><span class="lineno"><a class="line" href="gtest_8h.html#a0a0aff2564ea84c7eb3517ac8eda04da">14848</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED3(pred, v1, v2, v3) \</span></div><div class="line"><a name="l14849"></a><span class="lineno">14849</span>&#160;<span class="preprocessor"> GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14850"></a><span class="lineno"><a class="line" href="gtest_8h.html#a494e3b8dc22f4765f7e041f16c930e3d">14850</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \</span></div><div class="line"><a name="l14851"></a><span class="lineno">14851</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14852"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa7688f3ab9f09a2c1dbf13bd1f29d8fd">14852</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED3(pred, v1, v2, v3) \</span></div><div class="line"><a name="l14853"></a><span class="lineno">14853</span>&#160;<span class="preprocessor"> GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14854"></a><span class="lineno">14854</span>&#160;</div><div class="line"><a name="l14855"></a><span class="lineno">14855</span>&#160;</div><div class="line"><a name="l14856"></a><span class="lineno">14856</span>&#160;</div><div class="line"><a name="l14857"></a><span class="lineno">14857</span>&#160;<span class="comment">// Helper function for implementing {EXPECT|ASSERT}_PRED4. Don&#39;t use</span></div><div class="line"><a name="l14858"></a><span class="lineno">14858</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14859"></a><span class="lineno">14859</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pred,</div><div class="line"><a name="l14860"></a><span class="lineno">14860</span>&#160; <span class="keyword">typename</span> T1,</div><div class="line"><a name="l14861"></a><span class="lineno">14861</span>&#160; <span class="keyword">typename</span> T2,</div><div class="line"><a name="l14862"></a><span class="lineno">14862</span>&#160; <span class="keyword">typename</span> T3,</div><div class="line"><a name="l14863"></a><span class="lineno">14863</span>&#160; <span class="keyword">typename</span> T4&gt;</div><div class="line"><a name="l14864"></a><span class="lineno"><a class="line" href="namespacetesting.html#ae90c778d69db4682e8fd8baaa0a9f9cd">14864</a></span>&#160;AssertionResult <a class="code" href="namespacetesting.html#ae90c778d69db4682e8fd8baaa0a9f9cd">AssertPred4Helper</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pred_text,</div><div class="line"><a name="l14865"></a><span class="lineno">14865</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e1,</div><div class="line"><a name="l14866"></a><span class="lineno">14866</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e2,</div><div class="line"><a name="l14867"></a><span class="lineno">14867</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e3,</div><div class="line"><a name="l14868"></a><span class="lineno">14868</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e4,</div><div class="line"><a name="l14869"></a><span class="lineno">14869</span>&#160; Pred pred,</div><div class="line"><a name="l14870"></a><span class="lineno">14870</span>&#160; <span class="keyword">const</span> T1&amp; v1,</div><div class="line"><a name="l14871"></a><span class="lineno">14871</span>&#160; <span class="keyword">const</span> T2&amp; v2,</div><div class="line"><a name="l14872"></a><span class="lineno">14872</span>&#160; <span class="keyword">const</span> T3&amp; v3,</div><div class="line"><a name="l14873"></a><span class="lineno">14873</span>&#160; <span class="keyword">const</span> T4&amp; v4) {</div><div class="line"><a name="l14874"></a><span class="lineno">14874</span>&#160; <span class="keywordflow">if</span> (pred(v1, v2, v3, v4)) <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l14875"></a><span class="lineno">14875</span>&#160;</div><div class="line"><a name="l14876"></a><span class="lineno">14876</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l14877"></a><span class="lineno">14877</span>&#160; &lt;&lt; pred_text &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e3 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e4</div><div class="line"><a name="l14878"></a><span class="lineno">14878</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) evaluates to false, where&quot;</span></div><div class="line"><a name="l14879"></a><span class="lineno">14879</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14880"></a><span class="lineno">14880</span>&#160; &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v1) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14881"></a><span class="lineno">14881</span>&#160; &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v2) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14882"></a><span class="lineno">14882</span>&#160; &lt;&lt; e3 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v3) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14883"></a><span class="lineno">14883</span>&#160; &lt;&lt; e4 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v4);</div><div class="line"><a name="l14884"></a><span class="lineno">14884</span>&#160;}</div><div class="line"><a name="l14885"></a><span class="lineno">14885</span>&#160;</div><div class="line"><a name="l14886"></a><span class="lineno">14886</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.</span></div><div class="line"><a name="l14887"></a><span class="lineno">14887</span>&#160;<span class="comment">// Don&#39;t use this in your code.</span></div><div class="line"><a name="l14888"></a><span class="lineno"><a class="line" href="gtest_8h.html#abd207ed869491ba4bba29f8df37b7355">14888</a></span>&#160;<span class="preprocessor">#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\</span></div><div class="line"><a name="l14889"></a><span class="lineno">14889</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), \</span></div><div class="line"><a name="l14890"></a><span class="lineno">14890</span>&#160;<span class="preprocessor"> on_failure)</span></div><div class="line"><a name="l14891"></a><span class="lineno">14891</span>&#160;</div><div class="line"><a name="l14892"></a><span class="lineno">14892</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED4. Don&#39;t use</span></div><div class="line"><a name="l14893"></a><span class="lineno">14893</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14894"></a><span class="lineno"><a class="line" href="gtest_8h.html#a14e8c70455104fac032efec097ef668b">14894</a></span>&#160;<span class="preprocessor">#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\</span></div><div class="line"><a name="l14895"></a><span class="lineno">14895</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \</span></div><div class="line"><a name="l14896"></a><span class="lineno">14896</span>&#160;<span class="preprocessor"> #v1, \</span></div><div class="line"><a name="l14897"></a><span class="lineno">14897</span>&#160;<span class="preprocessor"> #v2, \</span></div><div class="line"><a name="l14898"></a><span class="lineno">14898</span>&#160;<span class="preprocessor"> #v3, \</span></div><div class="line"><a name="l14899"></a><span class="lineno">14899</span>&#160;<span class="preprocessor"> #v4, \</span></div><div class="line"><a name="l14900"></a><span class="lineno">14900</span>&#160;<span class="preprocessor"> pred, \</span></div><div class="line"><a name="l14901"></a><span class="lineno">14901</span>&#160;<span class="preprocessor"> v1, \</span></div><div class="line"><a name="l14902"></a><span class="lineno">14902</span>&#160;<span class="preprocessor"> v2, \</span></div><div class="line"><a name="l14903"></a><span class="lineno">14903</span>&#160;<span class="preprocessor"> v3, \</span></div><div class="line"><a name="l14904"></a><span class="lineno">14904</span>&#160;<span class="preprocessor"> v4), on_failure)</span></div><div class="line"><a name="l14905"></a><span class="lineno">14905</span>&#160;</div><div class="line"><a name="l14906"></a><span class="lineno">14906</span>&#160;<span class="comment">// 4-ary predicate assertion macros.</span></div><div class="line"><a name="l14907"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3354347de0f2445400b509cf39dce1dc">14907</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \</span></div><div class="line"><a name="l14908"></a><span class="lineno">14908</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14909"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4fd2b1bad63eb752bc2ff2b6bb3f4569">14909</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED4(pred, v1, v2, v3, v4) \</span></div><div class="line"><a name="l14910"></a><span class="lineno">14910</span>&#160;<span class="preprocessor"> GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14911"></a><span class="lineno"><a class="line" href="gtest_8h.html#a1842593c1dfb13c9a4b33b01540a8b40">14911</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \</span></div><div class="line"><a name="l14912"></a><span class="lineno">14912</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14913"></a><span class="lineno"><a class="line" href="gtest_8h.html#addc030c521775610e4619a01541a2167">14913</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED4(pred, v1, v2, v3, v4) \</span></div><div class="line"><a name="l14914"></a><span class="lineno">14914</span>&#160;<span class="preprocessor"> GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14915"></a><span class="lineno">14915</span>&#160;</div><div class="line"><a name="l14916"></a><span class="lineno">14916</span>&#160;</div><div class="line"><a name="l14917"></a><span class="lineno">14917</span>&#160;</div><div class="line"><a name="l14918"></a><span class="lineno">14918</span>&#160;<span class="comment">// Helper function for implementing {EXPECT|ASSERT}_PRED5. Don&#39;t use</span></div><div class="line"><a name="l14919"></a><span class="lineno">14919</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14920"></a><span class="lineno">14920</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Pred,</div><div class="line"><a name="l14921"></a><span class="lineno">14921</span>&#160; <span class="keyword">typename</span> T1,</div><div class="line"><a name="l14922"></a><span class="lineno">14922</span>&#160; <span class="keyword">typename</span> T2,</div><div class="line"><a name="l14923"></a><span class="lineno">14923</span>&#160; <span class="keyword">typename</span> T3,</div><div class="line"><a name="l14924"></a><span class="lineno">14924</span>&#160; <span class="keyword">typename</span> T4,</div><div class="line"><a name="l14925"></a><span class="lineno">14925</span>&#160; <span class="keyword">typename</span> T5&gt;</div><div class="line"><a name="l14926"></a><span class="lineno"><a class="line" href="namespacetesting.html#addcf52b273ce17269cbf4956cfe600a6">14926</a></span>&#160;AssertionResult <a class="code" href="namespacetesting.html#addcf52b273ce17269cbf4956cfe600a6">AssertPred5Helper</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pred_text,</div><div class="line"><a name="l14927"></a><span class="lineno">14927</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e1,</div><div class="line"><a name="l14928"></a><span class="lineno">14928</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e2,</div><div class="line"><a name="l14929"></a><span class="lineno">14929</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e3,</div><div class="line"><a name="l14930"></a><span class="lineno">14930</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e4,</div><div class="line"><a name="l14931"></a><span class="lineno">14931</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* e5,</div><div class="line"><a name="l14932"></a><span class="lineno">14932</span>&#160; Pred pred,</div><div class="line"><a name="l14933"></a><span class="lineno">14933</span>&#160; <span class="keyword">const</span> T1&amp; v1,</div><div class="line"><a name="l14934"></a><span class="lineno">14934</span>&#160; <span class="keyword">const</span> T2&amp; v2,</div><div class="line"><a name="l14935"></a><span class="lineno">14935</span>&#160; <span class="keyword">const</span> T3&amp; v3,</div><div class="line"><a name="l14936"></a><span class="lineno">14936</span>&#160; <span class="keyword">const</span> T4&amp; v4,</div><div class="line"><a name="l14937"></a><span class="lineno">14937</span>&#160; <span class="keyword">const</span> T5&amp; v5) {</div><div class="line"><a name="l14938"></a><span class="lineno">14938</span>&#160; <span class="keywordflow">if</span> (pred(v1, v2, v3, v4, v5)) <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l14939"></a><span class="lineno">14939</span>&#160;</div><div class="line"><a name="l14940"></a><span class="lineno">14940</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l14941"></a><span class="lineno">14941</span>&#160; &lt;&lt; pred_text &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e3 &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e4</div><div class="line"><a name="l14942"></a><span class="lineno">14942</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; e5 &lt;&lt; <span class="stringliteral">&quot;) evaluates to false, where&quot;</span></div><div class="line"><a name="l14943"></a><span class="lineno">14943</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14944"></a><span class="lineno">14944</span>&#160; &lt;&lt; e1 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v1) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14945"></a><span class="lineno">14945</span>&#160; &lt;&lt; e2 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v2) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14946"></a><span class="lineno">14946</span>&#160; &lt;&lt; e3 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v3) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14947"></a><span class="lineno">14947</span>&#160; &lt;&lt; e4 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v4) &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span></div><div class="line"><a name="l14948"></a><span class="lineno">14948</span>&#160; &lt;&lt; e5 &lt;&lt; <span class="stringliteral">&quot; evaluates to &quot;</span> &lt;&lt; <a class="code" href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">::testing::PrintToString</a>(v5);</div><div class="line"><a name="l14949"></a><span class="lineno">14949</span>&#160;}</div><div class="line"><a name="l14950"></a><span class="lineno">14950</span>&#160;</div><div class="line"><a name="l14951"></a><span class="lineno">14951</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.</span></div><div class="line"><a name="l14952"></a><span class="lineno">14952</span>&#160;<span class="comment">// Don&#39;t use this in your code.</span></div><div class="line"><a name="l14953"></a><span class="lineno"><a class="line" href="gtest_8h.html#a107623ee191560f703a3fdc983803c8e">14953</a></span>&#160;<span class="preprocessor">#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\</span></div><div class="line"><a name="l14954"></a><span class="lineno">14954</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \</span></div><div class="line"><a name="l14955"></a><span class="lineno">14955</span>&#160;<span class="preprocessor"> on_failure)</span></div><div class="line"><a name="l14956"></a><span class="lineno">14956</span>&#160;</div><div class="line"><a name="l14957"></a><span class="lineno">14957</span>&#160;<span class="comment">// Internal macro for implementing {EXPECT|ASSERT}_PRED5. Don&#39;t use</span></div><div class="line"><a name="l14958"></a><span class="lineno">14958</span>&#160;<span class="comment">// this in your code.</span></div><div class="line"><a name="l14959"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2c42692f7d910dc2fe57869883190e6c">14959</a></span>&#160;<span class="preprocessor">#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\</span></div><div class="line"><a name="l14960"></a><span class="lineno">14960</span>&#160;<span class="preprocessor"> GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \</span></div><div class="line"><a name="l14961"></a><span class="lineno">14961</span>&#160;<span class="preprocessor"> #v1, \</span></div><div class="line"><a name="l14962"></a><span class="lineno">14962</span>&#160;<span class="preprocessor"> #v2, \</span></div><div class="line"><a name="l14963"></a><span class="lineno">14963</span>&#160;<span class="preprocessor"> #v3, \</span></div><div class="line"><a name="l14964"></a><span class="lineno">14964</span>&#160;<span class="preprocessor"> #v4, \</span></div><div class="line"><a name="l14965"></a><span class="lineno">14965</span>&#160;<span class="preprocessor"> #v5, \</span></div><div class="line"><a name="l14966"></a><span class="lineno">14966</span>&#160;<span class="preprocessor"> pred, \</span></div><div class="line"><a name="l14967"></a><span class="lineno">14967</span>&#160;<span class="preprocessor"> v1, \</span></div><div class="line"><a name="l14968"></a><span class="lineno">14968</span>&#160;<span class="preprocessor"> v2, \</span></div><div class="line"><a name="l14969"></a><span class="lineno">14969</span>&#160;<span class="preprocessor"> v3, \</span></div><div class="line"><a name="l14970"></a><span class="lineno">14970</span>&#160;<span class="preprocessor"> v4, \</span></div><div class="line"><a name="l14971"></a><span class="lineno">14971</span>&#160;<span class="preprocessor"> v5), on_failure)</span></div><div class="line"><a name="l14972"></a><span class="lineno">14972</span>&#160;</div><div class="line"><a name="l14973"></a><span class="lineno">14973</span>&#160;<span class="comment">// 5-ary predicate assertion macros.</span></div><div class="line"><a name="l14974"></a><span class="lineno"><a class="line" href="gtest_8h.html#a74beddf9661e4460f9969fe211b9e80e">14974</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \</span></div><div class="line"><a name="l14975"></a><span class="lineno">14975</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14976"></a><span class="lineno"><a class="line" href="gtest_8h.html#adbfcc13f3b3d14c42a7fbd41573932bf">14976</a></span>&#160;<span class="preprocessor">#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \</span></div><div class="line"><a name="l14977"></a><span class="lineno">14977</span>&#160;<span class="preprocessor"> GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l14978"></a><span class="lineno"><a class="line" href="gtest_8h.html#abd7cb4f36d6aa2cb346ab3ac812568f3">14978</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \</span></div><div class="line"><a name="l14979"></a><span class="lineno">14979</span>&#160;<span class="preprocessor"> GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14980"></a><span class="lineno"><a class="line" href="gtest_8h.html#af8e510af2b4a14d90eef66ace17d1c30">14980</a></span>&#160;<span class="preprocessor">#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \</span></div><div class="line"><a name="l14981"></a><span class="lineno">14981</span>&#160;<span class="preprocessor"> GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l14982"></a><span class="lineno">14982</span>&#160;</div><div class="line"><a name="l14983"></a><span class="lineno">14983</span>&#160;</div><div class="line"><a name="l14984"></a><span class="lineno">14984</span>&#160;</div><div class="line"><a name="l14985"></a><span class="lineno">14985</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l14986"></a><span class="lineno">14986</span>&#160;</div><div class="line"><a name="l14987"></a><span class="lineno">14987</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_</span></div><div class="line"><a name="l14988"></a><span class="lineno">14988</span>&#160;</div><div class="line"><a name="l14989"></a><span class="lineno">14989</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacetesting.html">testing</a> {</div><div class="line"><a name="l14990"></a><span class="lineno">14990</span>&#160;</div><div class="line"><a name="l14991"></a><span class="lineno">14991</span>&#160;<span class="comment">// The abstract class that all tests inherit from.</span></div><div class="line"><a name="l14992"></a><span class="lineno">14992</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14993"></a><span class="lineno">14993</span>&#160;<span class="comment">// In Google Test, a unit test program contains one or many TestSuites, and</span></div><div class="line"><a name="l14994"></a><span class="lineno">14994</span>&#160;<span class="comment">// each TestSuite contains one or many Tests.</span></div><div class="line"><a name="l14995"></a><span class="lineno">14995</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l14996"></a><span class="lineno">14996</span>&#160;<span class="comment">// When you define a test using the TEST macro, you don&#39;t need to</span></div><div class="line"><a name="l14997"></a><span class="lineno">14997</span>&#160;<span class="comment">// explicitly derive from Test - the TEST macro automatically does</span></div><div class="line"><a name="l14998"></a><span class="lineno">14998</span>&#160;<span class="comment">// this for you.</span></div><div class="line"><a name="l14999"></a><span class="lineno">14999</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15000"></a><span class="lineno">15000</span>&#160;<span class="comment">// The only time you derive from Test is when defining a test fixture</span></div><div class="line"><a name="l15001"></a><span class="lineno">15001</span>&#160;<span class="comment">// to be used in a TEST_F. For example:</span></div><div class="line"><a name="l15002"></a><span class="lineno">15002</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15003"></a><span class="lineno">15003</span>&#160;<span class="comment">// class FooTest : public testing::Test {</span></div><div class="line"><a name="l15004"></a><span class="lineno">15004</span>&#160;<span class="comment">// protected:</span></div><div class="line"><a name="l15005"></a><span class="lineno">15005</span>&#160;<span class="comment">// void SetUp() override { ... }</span></div><div class="line"><a name="l15006"></a><span class="lineno">15006</span>&#160;<span class="comment">// void TearDown() override { ... }</span></div><div class="line"><a name="l15007"></a><span class="lineno">15007</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l15008"></a><span class="lineno">15008</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l15009"></a><span class="lineno">15009</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15010"></a><span class="lineno">15010</span>&#160;<span class="comment">// TEST_F(FooTest, Bar) { ... }</span></div><div class="line"><a name="l15011"></a><span class="lineno">15011</span>&#160;<span class="comment">// TEST_F(FooTest, Baz) { ... }</span></div><div class="line"><a name="l15012"></a><span class="lineno">15012</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15013"></a><span class="lineno">15013</span>&#160;<span class="comment">// Test is not copyable.</span></div><div class="line"><a name="l15014"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html">15014</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test.html">Test</a> {</div><div class="line"><a name="l15015"></a><span class="lineno">15015</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15016"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#a4c49c2cdb6c328e6b709b4542f23de3c">15016</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>;</div><div class="line"><a name="l15017"></a><span class="lineno">15017</span>&#160;</div><div class="line"><a name="l15018"></a><span class="lineno">15018</span>&#160; <span class="comment">// The d&#39;tor is virtual as we intend to inherit from Test.</span></div><div class="line"><a name="l15019"></a><span class="lineno">15019</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classtesting_1_1_test.html">Test</a>();</div><div class="line"><a name="l15020"></a><span class="lineno">15020</span>&#160;</div><div class="line"><a name="l15021"></a><span class="lineno">15021</span>&#160; <span class="comment">// Sets up the stuff shared by all tests in this test case.</span></div><div class="line"><a name="l15022"></a><span class="lineno">15022</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15023"></a><span class="lineno">15023</span>&#160; <span class="comment">// Google Test will call Foo::SetUpTestSuite() before running the first</span></div><div class="line"><a name="l15024"></a><span class="lineno">15024</span>&#160; <span class="comment">// test in test case Foo. Hence a sub-class can define its own</span></div><div class="line"><a name="l15025"></a><span class="lineno">15025</span>&#160; <span class="comment">// SetUpTestSuite() method to shadow the one defined in the super</span></div><div class="line"><a name="l15026"></a><span class="lineno">15026</span>&#160; <span class="comment">// class.</span></div><div class="line"><a name="l15027"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#ae173b07a0fdd09fc1d417a2bb6cbdd76">15027</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test.html#ae173b07a0fdd09fc1d417a2bb6cbdd76">SetUpTestSuite</a>() {}</div><div class="line"><a name="l15028"></a><span class="lineno">15028</span>&#160;</div><div class="line"><a name="l15029"></a><span class="lineno">15029</span>&#160; <span class="comment">// Tears down the stuff shared by all tests in this test case.</span></div><div class="line"><a name="l15030"></a><span class="lineno">15030</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15031"></a><span class="lineno">15031</span>&#160; <span class="comment">// Google Test will call Foo::TearDownTestSuite() after running the last</span></div><div class="line"><a name="l15032"></a><span class="lineno">15032</span>&#160; <span class="comment">// test in test case Foo. Hence a sub-class can define its own</span></div><div class="line"><a name="l15033"></a><span class="lineno">15033</span>&#160; <span class="comment">// TearDownTestSuite() method to shadow the one defined in the super</span></div><div class="line"><a name="l15034"></a><span class="lineno">15034</span>&#160; <span class="comment">// class.</span></div><div class="line"><a name="l15035"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#a7704c8223ba28338a66ca2eaeba66383">15035</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test.html#a7704c8223ba28338a66ca2eaeba66383">TearDownTestSuite</a>() {}</div><div class="line"><a name="l15036"></a><span class="lineno">15036</span>&#160;</div><div class="line"><a name="l15037"></a><span class="lineno">15037</span>&#160; <span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15038"></a><span class="lineno">15038</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15039"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#af374706cbaf0ffc460f4fd04e7c150f1">15039</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test.html#af374706cbaf0ffc460f4fd04e7c150f1">TearDownTestCase</a>() {}</div><div class="line"><a name="l15040"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#a5ccbac42fee8c5b00b0bfe89b6c49d79">15040</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test.html#a5ccbac42fee8c5b00b0bfe89b6c49d79">SetUpTestCase</a>() {}</div><div class="line"><a name="l15041"></a><span class="lineno">15041</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15042"></a><span class="lineno">15042</span>&#160;</div><div class="line"><a name="l15043"></a><span class="lineno">15043</span>&#160; <span class="comment">// Returns true iff the current test has a fatal failure.</span></div><div class="line"><a name="l15044"></a><span class="lineno">15044</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> HasFatalFailure();</div><div class="line"><a name="l15045"></a><span class="lineno">15045</span>&#160;</div><div class="line"><a name="l15046"></a><span class="lineno">15046</span>&#160; <span class="comment">// Returns true iff the current test has a non-fatal failure.</span></div><div class="line"><a name="l15047"></a><span class="lineno">15047</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> HasNonfatalFailure();</div><div class="line"><a name="l15048"></a><span class="lineno">15048</span>&#160;</div><div class="line"><a name="l15049"></a><span class="lineno">15049</span>&#160; <span class="comment">// Returns true iff the current test was skipped.</span></div><div class="line"><a name="l15050"></a><span class="lineno">15050</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> IsSkipped();</div><div class="line"><a name="l15051"></a><span class="lineno">15051</span>&#160;</div><div class="line"><a name="l15052"></a><span class="lineno">15052</span>&#160; <span class="comment">// Returns true iff the current test has a (either fatal or</span></div><div class="line"><a name="l15053"></a><span class="lineno">15053</span>&#160; <span class="comment">// non-fatal) failure.</span></div><div class="line"><a name="l15054"></a><span class="lineno"><a class="line" href="classtesting_1_1_test.html#a7a00be7dd0a6bfdc8d47a1b784623613">15054</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test.html#a7a00be7dd0a6bfdc8d47a1b784623613">HasFailure</a>() { <span class="keywordflow">return</span> HasFatalFailure() || HasNonfatalFailure(); }</div><div class="line"><a name="l15055"></a><span class="lineno">15055</span>&#160;</div><div class="line"><a name="l15056"></a><span class="lineno">15056</span>&#160; <span class="comment">// Logs a property for the current test, test suite, or for the entire</span></div><div class="line"><a name="l15057"></a><span class="lineno">15057</span>&#160; <span class="comment">// invocation of the test program when used outside of the context of a</span></div><div class="line"><a name="l15058"></a><span class="lineno">15058</span>&#160; <span class="comment">// test suite. Only the last value for a given key is remembered. These</span></div><div class="line"><a name="l15059"></a><span class="lineno">15059</span>&#160; <span class="comment">// are public static so they can be called from utility functions that are</span></div><div class="line"><a name="l15060"></a><span class="lineno">15060</span>&#160; <span class="comment">// not members of the test fixture. Calls to RecordProperty made during</span></div><div class="line"><a name="l15061"></a><span class="lineno">15061</span>&#160; <span class="comment">// lifespan of the test (from the moment its constructor starts to the</span></div><div class="line"><a name="l15062"></a><span class="lineno">15062</span>&#160; <span class="comment">// moment its destructor finishes) will be output in XML as attributes of</span></div><div class="line"><a name="l15063"></a><span class="lineno">15063</span>&#160; <span class="comment">// the &lt;testcase&gt; element. Properties recorded from fixture&#39;s</span></div><div class="line"><a name="l15064"></a><span class="lineno">15064</span>&#160; <span class="comment">// SetUpTestSuite or TearDownTestSuite are logged as attributes of the</span></div><div class="line"><a name="l15065"></a><span class="lineno">15065</span>&#160; <span class="comment">// corresponding &lt;testsuite&gt; element. Calls to RecordProperty made in the</span></div><div class="line"><a name="l15066"></a><span class="lineno">15066</span>&#160; <span class="comment">// global context (before or after invocation of RUN_ALL_TESTS and from</span></div><div class="line"><a name="l15067"></a><span class="lineno">15067</span>&#160; <span class="comment">// SetUp/TearDown method of Environment objects registered with Google</span></div><div class="line"><a name="l15068"></a><span class="lineno">15068</span>&#160; <span class="comment">// Test) will be output as attributes of the &lt;testsuites&gt; element.</span></div><div class="line"><a name="l15069"></a><span class="lineno">15069</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> RecordProperty(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; key, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; value);</div><div class="line"><a name="l15070"></a><span class="lineno">15070</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> RecordProperty(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; key, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l15071"></a><span class="lineno">15071</span>&#160;</div><div class="line"><a name="l15072"></a><span class="lineno">15072</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l15073"></a><span class="lineno">15073</span>&#160; <span class="comment">// Creates a Test object.</span></div><div class="line"><a name="l15074"></a><span class="lineno">15074</span>&#160; <a class="code" href="classtesting_1_1_test.html">Test</a>();</div><div class="line"><a name="l15075"></a><span class="lineno">15075</span>&#160;</div><div class="line"><a name="l15076"></a><span class="lineno">15076</span>&#160; <span class="comment">// Sets up the test fixture.</span></div><div class="line"><a name="l15077"></a><span class="lineno">15077</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetUp();</div><div class="line"><a name="l15078"></a><span class="lineno">15078</span>&#160;</div><div class="line"><a name="l15079"></a><span class="lineno">15079</span>&#160; <span class="comment">// Tears down the test fixture.</span></div><div class="line"><a name="l15080"></a><span class="lineno">15080</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TearDown();</div><div class="line"><a name="l15081"></a><span class="lineno">15081</span>&#160;</div><div class="line"><a name="l15082"></a><span class="lineno">15082</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15083"></a><span class="lineno">15083</span>&#160; <span class="comment">// Returns true iff the current test has the same fixture class as</span></div><div class="line"><a name="l15084"></a><span class="lineno">15084</span>&#160; <span class="comment">// the first test in the current test suite.</span></div><div class="line"><a name="l15085"></a><span class="lineno">15085</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> HasSameFixtureClass();</div><div class="line"><a name="l15086"></a><span class="lineno">15086</span>&#160;</div><div class="line"><a name="l15087"></a><span class="lineno">15087</span>&#160; <span class="comment">// Runs the test after the test fixture has been set up.</span></div><div class="line"><a name="l15088"></a><span class="lineno">15088</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15089"></a><span class="lineno">15089</span>&#160; <span class="comment">// A sub-class must implement this to define the test logic.</span></div><div class="line"><a name="l15090"></a><span class="lineno">15090</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15091"></a><span class="lineno">15091</span>&#160; <span class="comment">// DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM.</span></div><div class="line"><a name="l15092"></a><span class="lineno">15092</span>&#160; <span class="comment">// Instead, use the TEST or TEST_F macro.</span></div><div class="line"><a name="l15093"></a><span class="lineno">15093</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TestBody() = 0;</div><div class="line"><a name="l15094"></a><span class="lineno">15094</span>&#160;</div><div class="line"><a name="l15095"></a><span class="lineno">15095</span>&#160; <span class="comment">// Sets up, executes, and tears down the test.</span></div><div class="line"><a name="l15096"></a><span class="lineno">15096</span>&#160; <span class="keywordtype">void</span> Run();</div><div class="line"><a name="l15097"></a><span class="lineno">15097</span>&#160;</div><div class="line"><a name="l15098"></a><span class="lineno">15098</span>&#160; <span class="comment">// Deletes self. We deliberately pick an unusual name for this</span></div><div class="line"><a name="l15099"></a><span class="lineno">15099</span>&#160; <span class="comment">// internal method to avoid clashing with names used in user TESTs.</span></div><div class="line"><a name="l15100"></a><span class="lineno">15100</span>&#160; <span class="keywordtype">void</span> DeleteSelf_() { <span class="keyword">delete</span> <span class="keyword">this</span>; }</div><div class="line"><a name="l15101"></a><span class="lineno">15101</span>&#160;</div><div class="line"><a name="l15102"></a><span class="lineno">15102</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt;GTEST_FLAG_SAVER_&gt; gtest_flag_saver_;</div><div class="line"><a name="l15103"></a><span class="lineno">15103</span>&#160;</div><div class="line"><a name="l15104"></a><span class="lineno">15104</span>&#160; <span class="comment">// Often a user misspells SetUp() as Setup() and spends a long time</span></div><div class="line"><a name="l15105"></a><span class="lineno">15105</span>&#160; <span class="comment">// wondering why it is never called by Google Test. The declaration of</span></div><div class="line"><a name="l15106"></a><span class="lineno">15106</span>&#160; <span class="comment">// the following method is solely for catching such an error at</span></div><div class="line"><a name="l15107"></a><span class="lineno">15107</span>&#160; <span class="comment">// compile time:</span></div><div class="line"><a name="l15108"></a><span class="lineno">15108</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15109"></a><span class="lineno">15109</span>&#160; <span class="comment">// - The return type is deliberately chosen to be not void, so it</span></div><div class="line"><a name="l15110"></a><span class="lineno">15110</span>&#160; <span class="comment">// will be a conflict if void Setup() is declared in the user&#39;s</span></div><div class="line"><a name="l15111"></a><span class="lineno">15111</span>&#160; <span class="comment">// test fixture.</span></div><div class="line"><a name="l15112"></a><span class="lineno">15112</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15113"></a><span class="lineno">15113</span>&#160; <span class="comment">// - This method is private, so it will be another compiler error</span></div><div class="line"><a name="l15114"></a><span class="lineno">15114</span>&#160; <span class="comment">// if the method is called from the user&#39;s test fixture.</span></div><div class="line"><a name="l15115"></a><span class="lineno">15115</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15116"></a><span class="lineno">15116</span>&#160; <span class="comment">// DO NOT OVERRIDE THIS FUNCTION.</span></div><div class="line"><a name="l15117"></a><span class="lineno">15117</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15118"></a><span class="lineno">15118</span>&#160; <span class="comment">// If you see an error about overriding the following function or</span></div><div class="line"><a name="l15119"></a><span class="lineno">15119</span>&#160; <span class="comment">// about it being private, you have mis-spelled SetUp() as Setup().</span></div><div class="line"><a name="l15120"></a><span class="lineno">15120</span>&#160; <span class="keyword">struct </span>Setup_should_be_spelled_SetUp {};</div><div class="line"><a name="l15121"></a><span class="lineno">15121</span>&#160; <span class="keyword">virtual</span> Setup_should_be_spelled_SetUp* Setup() { <span class="keywordflow">return</span> <span class="keyword">nullptr</span>; }</div><div class="line"><a name="l15122"></a><span class="lineno">15122</span>&#160;</div><div class="line"><a name="l15123"></a><span class="lineno">15123</span>&#160; <span class="comment">// We disallow copying Tests.</span></div><div class="line"><a name="l15124"></a><span class="lineno">15124</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(Test);</div><div class="line"><a name="l15125"></a><span class="lineno">15125</span>&#160;};</div><div class="line"><a name="l15126"></a><span class="lineno">15126</span>&#160;</div><div class="line"><a name="l15127"></a><span class="lineno"><a class="line" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">15127</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="namespacetesting_1_1internal.html#a66a845df404b38fe85c5e14a069f255a">internal::TimeInMillis</a> <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a>;</div><div class="line"><a name="l15128"></a><span class="lineno">15128</span>&#160;</div><div class="line"><a name="l15129"></a><span class="lineno">15129</span>&#160;<span class="comment">// A copyable object representing a user specified test property which can be</span></div><div class="line"><a name="l15130"></a><span class="lineno">15130</span>&#160;<span class="comment">// output as a key/value string pair.</span></div><div class="line"><a name="l15131"></a><span class="lineno">15131</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15132"></a><span class="lineno">15132</span>&#160;<span class="comment">// Don&#39;t inherit from TestProperty as its destructor is not virtual.</span></div><div class="line"><a name="l15133"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_property.html">15133</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1_test_property.html">TestProperty</a> {</div><div class="line"><a name="l15134"></a><span class="lineno">15134</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15135"></a><span class="lineno">15135</span>&#160; <span class="comment">// C&#39;tor. TestProperty does NOT have a default constructor.</span></div><div class="line"><a name="l15136"></a><span class="lineno">15136</span>&#160; <span class="comment">// Always use this constructor (with parameters) to create a</span></div><div class="line"><a name="l15137"></a><span class="lineno">15137</span>&#160; <span class="comment">// TestProperty object.</span></div><div class="line"><a name="l15138"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_property.html#a25a0ccf1c75a92af46a48d3c2a873e6d">15138</a></span>&#160; <a class="code" href="classtesting_1_1_test_property.html#a25a0ccf1c75a92af46a48d3c2a873e6d">TestProperty</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; a_key, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; a_value) :</div><div class="line"><a name="l15139"></a><span class="lineno">15139</span>&#160; key_(a_key), value_(a_value) {</div><div class="line"><a name="l15140"></a><span class="lineno">15140</span>&#160; }</div><div class="line"><a name="l15141"></a><span class="lineno">15141</span>&#160;</div><div class="line"><a name="l15142"></a><span class="lineno">15142</span>&#160; <span class="comment">// Gets the user supplied key.</span></div><div class="line"><a name="l15143"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_property.html#ad60435d4ad04ac030487d8998fc61c5f">15143</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_property.html#ad60435d4ad04ac030487d8998fc61c5f">key</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15144"></a><span class="lineno">15144</span>&#160; <span class="keywordflow">return</span> key_.c_str();</div><div class="line"><a name="l15145"></a><span class="lineno">15145</span>&#160; }</div><div class="line"><a name="l15146"></a><span class="lineno">15146</span>&#160;</div><div class="line"><a name="l15147"></a><span class="lineno">15147</span>&#160; <span class="comment">// Gets the user supplied value.</span></div><div class="line"><a name="l15148"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_property.html#ad423a07af33c88b0c9ed33ee74815a63">15148</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_property.html#ad423a07af33c88b0c9ed33ee74815a63">value</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15149"></a><span class="lineno">15149</span>&#160; <span class="keywordflow">return</span> value_.c_str();</div><div class="line"><a name="l15150"></a><span class="lineno">15150</span>&#160; }</div><div class="line"><a name="l15151"></a><span class="lineno">15151</span>&#160;</div><div class="line"><a name="l15152"></a><span class="lineno">15152</span>&#160; <span class="comment">// Sets a new value, overriding the one supplied in the constructor.</span></div><div class="line"><a name="l15153"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_property.html#a377245335d9f614cd06d1650e3358e1d">15153</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_property.html#a377245335d9f614cd06d1650e3358e1d">SetValue</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; new_value) {</div><div class="line"><a name="l15154"></a><span class="lineno">15154</span>&#160; value_ = new_value;</div><div class="line"><a name="l15155"></a><span class="lineno">15155</span>&#160; }</div><div class="line"><a name="l15156"></a><span class="lineno">15156</span>&#160;</div><div class="line"><a name="l15157"></a><span class="lineno">15157</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15158"></a><span class="lineno">15158</span>&#160; <span class="comment">// The key supplied by the user.</span></div><div class="line"><a name="l15159"></a><span class="lineno">15159</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> key_;</div><div class="line"><a name="l15160"></a><span class="lineno">15160</span>&#160; <span class="comment">// The value supplied by the user.</span></div><div class="line"><a name="l15161"></a><span class="lineno">15161</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> value_;</div><div class="line"><a name="l15162"></a><span class="lineno">15162</span>&#160;};</div><div class="line"><a name="l15163"></a><span class="lineno">15163</span>&#160;</div><div class="line"><a name="l15164"></a><span class="lineno">15164</span>&#160;<span class="comment">// The result of a single Test. This includes a list of</span></div><div class="line"><a name="l15165"></a><span class="lineno">15165</span>&#160;<span class="comment">// TestPartResults, a list of TestProperties, a count of how many</span></div><div class="line"><a name="l15166"></a><span class="lineno">15166</span>&#160;<span class="comment">// death tests there are in the Test, and how much time it took to run</span></div><div class="line"><a name="l15167"></a><span class="lineno">15167</span>&#160;<span class="comment">// the Test.</span></div><div class="line"><a name="l15168"></a><span class="lineno">15168</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15169"></a><span class="lineno">15169</span>&#160;<span class="comment">// TestResult is not copyable.</span></div><div class="line"><a name="l15170"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html">15170</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test_result.html">TestResult</a> {</div><div class="line"><a name="l15171"></a><span class="lineno">15171</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15172"></a><span class="lineno">15172</span>&#160; <span class="comment">// Creates an empty TestResult.</span></div><div class="line"><a name="l15173"></a><span class="lineno">15173</span>&#160; <a class="code" href="classtesting_1_1_test_result.html">TestResult</a>();</div><div class="line"><a name="l15174"></a><span class="lineno">15174</span>&#160;</div><div class="line"><a name="l15175"></a><span class="lineno">15175</span>&#160; <span class="comment">// D&#39;tor. Do not inherit from TestResult.</span></div><div class="line"><a name="l15176"></a><span class="lineno">15176</span>&#160; ~<a class="code" href="classtesting_1_1_test_result.html">TestResult</a>();</div><div class="line"><a name="l15177"></a><span class="lineno">15177</span>&#160;</div><div class="line"><a name="l15178"></a><span class="lineno">15178</span>&#160; <span class="comment">// Gets the number of all test parts. This is the sum of the number</span></div><div class="line"><a name="l15179"></a><span class="lineno">15179</span>&#160; <span class="comment">// of successful test parts and the number of failed test parts.</span></div><div class="line"><a name="l15180"></a><span class="lineno">15180</span>&#160; <span class="keywordtype">int</span> total_part_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15181"></a><span class="lineno">15181</span>&#160;</div><div class="line"><a name="l15182"></a><span class="lineno">15182</span>&#160; <span class="comment">// Returns the number of the test properties.</span></div><div class="line"><a name="l15183"></a><span class="lineno">15183</span>&#160; <span class="keywordtype">int</span> test_property_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15184"></a><span class="lineno">15184</span>&#160;</div><div class="line"><a name="l15185"></a><span class="lineno">15185</span>&#160; <span class="comment">// Returns true iff the test passed (i.e. no test part failed).</span></div><div class="line"><a name="l15186"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#acf7e6e72f05a0545c48ea48e7f8851df">15186</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_result.html#acf7e6e72f05a0545c48ea48e7f8851df">Passed</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !Skipped() &amp;&amp; !Failed(); }</div><div class="line"><a name="l15187"></a><span class="lineno">15187</span>&#160;</div><div class="line"><a name="l15188"></a><span class="lineno">15188</span>&#160; <span class="comment">// Returns true iff the test was skipped.</span></div><div class="line"><a name="l15189"></a><span class="lineno">15189</span>&#160; <span class="keywordtype">bool</span> Skipped() <span class="keyword">const</span>;</div><div class="line"><a name="l15190"></a><span class="lineno">15190</span>&#160;</div><div class="line"><a name="l15191"></a><span class="lineno">15191</span>&#160; <span class="comment">// Returns true iff the test failed.</span></div><div class="line"><a name="l15192"></a><span class="lineno">15192</span>&#160; <span class="keywordtype">bool</span> Failed() <span class="keyword">const</span>;</div><div class="line"><a name="l15193"></a><span class="lineno">15193</span>&#160;</div><div class="line"><a name="l15194"></a><span class="lineno">15194</span>&#160; <span class="comment">// Returns true iff the test fatally failed.</span></div><div class="line"><a name="l15195"></a><span class="lineno">15195</span>&#160; <span class="keywordtype">bool</span> HasFatalFailure() <span class="keyword">const</span>;</div><div class="line"><a name="l15196"></a><span class="lineno">15196</span>&#160;</div><div class="line"><a name="l15197"></a><span class="lineno">15197</span>&#160; <span class="comment">// Returns true iff the test has a non-fatal failure.</span></div><div class="line"><a name="l15198"></a><span class="lineno">15198</span>&#160; <span class="keywordtype">bool</span> HasNonfatalFailure() <span class="keyword">const</span>;</div><div class="line"><a name="l15199"></a><span class="lineno">15199</span>&#160;</div><div class="line"><a name="l15200"></a><span class="lineno">15200</span>&#160; <span class="comment">// Returns the elapsed time, in milliseconds.</span></div><div class="line"><a name="l15201"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#a717e05e00d4af5cb809433e343ab63af">15201</a></span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> <a class="code" href="classtesting_1_1_test_result.html#a717e05e00d4af5cb809433e343ab63af">elapsed_time</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elapsed_time_; }</div><div class="line"><a name="l15202"></a><span class="lineno">15202</span>&#160;</div><div class="line"><a name="l15203"></a><span class="lineno">15203</span>&#160; <span class="comment">// Returns the i-th test part result among all the results. i can range from 0</span></div><div class="line"><a name="l15204"></a><span class="lineno">15204</span>&#160; <span class="comment">// to total_part_count() - 1. If i is not in that range, aborts the program.</span></div><div class="line"><a name="l15205"></a><span class="lineno">15205</span>&#160; <span class="keyword">const</span> TestPartResult&amp; GetTestPartResult(<span class="keywordtype">int</span> i) <span class="keyword">const</span>;</div><div class="line"><a name="l15206"></a><span class="lineno">15206</span>&#160;</div><div class="line"><a name="l15207"></a><span class="lineno">15207</span>&#160; <span class="comment">// Returns the i-th test property. i can range from 0 to</span></div><div class="line"><a name="l15208"></a><span class="lineno">15208</span>&#160; <span class="comment">// test_property_count() - 1. If i is not in that range, aborts the</span></div><div class="line"><a name="l15209"></a><span class="lineno">15209</span>&#160; <span class="comment">// program.</span></div><div class="line"><a name="l15210"></a><span class="lineno">15210</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_property.html">TestProperty</a>&amp; GetTestProperty(<span class="keywordtype">int</span> i) <span class="keyword">const</span>;</div><div class="line"><a name="l15211"></a><span class="lineno">15211</span>&#160;</div><div class="line"><a name="l15212"></a><span class="lineno">15212</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15213"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#a4c49c2cdb6c328e6b709b4542f23de3c">15213</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>;</div><div class="line"><a name="l15214"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#ab9aaba231fd11196425e75caf709bfc6">15214</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>;</div><div class="line"><a name="l15215"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#a832b4d233efee1a32feb0f4190b30d39">15215</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>;</div><div class="line"><a name="l15216"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#abae39633da9932847b41cb80efd62115">15216</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::DefaultGlobalTestPartResultReporter;</div><div class="line"><a name="l15217"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#adf5553cae6aea6f8648d47e299237e34">15217</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::ExecDeathTest;</div><div class="line"><a name="l15218"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#ae762da04e74a0d3b0daded3c5bd4a8e8">15218</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::TestResultAccessor;</div><div class="line"><a name="l15219"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#acc0a5e7573fd6ae7ad1878613bb86853">15219</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::UnitTestImpl;</div><div class="line"><a name="l15220"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#a6aeedc04a0590fcc1b3c5f687dbb0f9f">15220</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::WindowsDeathTest;</div><div class="line"><a name="l15221"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_result.html#af29d5921f68031cdfba0b28cf4b3b559">15221</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::FuchsiaDeathTest;</div><div class="line"><a name="l15222"></a><span class="lineno">15222</span>&#160;</div><div class="line"><a name="l15223"></a><span class="lineno">15223</span>&#160; <span class="comment">// Gets the vector of TestPartResults.</span></div><div class="line"><a name="l15224"></a><span class="lineno">15224</span>&#160; <span class="keyword">const</span> std::vector&lt;TestPartResult&gt;&amp; test_part_results()<span class="keyword"> const </span>{</div><div class="line"><a name="l15225"></a><span class="lineno">15225</span>&#160; <span class="keywordflow">return</span> test_part_results_;</div><div class="line"><a name="l15226"></a><span class="lineno">15226</span>&#160; }</div><div class="line"><a name="l15227"></a><span class="lineno">15227</span>&#160;</div><div class="line"><a name="l15228"></a><span class="lineno">15228</span>&#160; <span class="comment">// Gets the vector of TestProperties.</span></div><div class="line"><a name="l15229"></a><span class="lineno">15229</span>&#160; <span class="keyword">const</span> std::vector&lt;TestProperty&gt;&amp; test_properties()<span class="keyword"> const </span>{</div><div class="line"><a name="l15230"></a><span class="lineno">15230</span>&#160; <span class="keywordflow">return</span> test_properties_;</div><div class="line"><a name="l15231"></a><span class="lineno">15231</span>&#160; }</div><div class="line"><a name="l15232"></a><span class="lineno">15232</span>&#160;</div><div class="line"><a name="l15233"></a><span class="lineno">15233</span>&#160; <span class="comment">// Sets the elapsed time.</span></div><div class="line"><a name="l15234"></a><span class="lineno">15234</span>&#160; <span class="keywordtype">void</span> set_elapsed_time(<a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> elapsed) { elapsed_time_ = elapsed; }</div><div class="line"><a name="l15235"></a><span class="lineno">15235</span>&#160;</div><div class="line"><a name="l15236"></a><span class="lineno">15236</span>&#160; <span class="comment">// Adds a test property to the list. The property is validated and may add</span></div><div class="line"><a name="l15237"></a><span class="lineno">15237</span>&#160; <span class="comment">// a non-fatal failure if invalid (e.g., if it conflicts with reserved</span></div><div class="line"><a name="l15238"></a><span class="lineno">15238</span>&#160; <span class="comment">// key names). If a property is already recorded for the same key, the</span></div><div class="line"><a name="l15239"></a><span class="lineno">15239</span>&#160; <span class="comment">// value will be updated, rather than storing multiple values for the same</span></div><div class="line"><a name="l15240"></a><span class="lineno">15240</span>&#160; <span class="comment">// key. xml_element specifies the element for which the property is being</span></div><div class="line"><a name="l15241"></a><span class="lineno">15241</span>&#160; <span class="comment">// recorded and is used for validation.</span></div><div class="line"><a name="l15242"></a><span class="lineno">15242</span>&#160; <span class="keywordtype">void</span> RecordProperty(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; xml_element,</div><div class="line"><a name="l15243"></a><span class="lineno">15243</span>&#160; <span class="keyword">const</span> TestProperty&amp; test_property);</div><div class="line"><a name="l15244"></a><span class="lineno">15244</span>&#160;</div><div class="line"><a name="l15245"></a><span class="lineno">15245</span>&#160; <span class="comment">// Adds a failure if the key is a reserved attribute of Google Test</span></div><div class="line"><a name="l15246"></a><span class="lineno">15246</span>&#160; <span class="comment">// testsuite tags. Returns true if the property is valid.</span></div><div class="line"><a name="l15247"></a><span class="lineno">15247</span>&#160; <span class="comment">// FIXME: Validate attribute names are legal and human readable.</span></div><div class="line"><a name="l15248"></a><span class="lineno">15248</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> ValidateTestProperty(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; xml_element,</div><div class="line"><a name="l15249"></a><span class="lineno">15249</span>&#160; <span class="keyword">const</span> TestProperty&amp; test_property);</div><div class="line"><a name="l15250"></a><span class="lineno">15250</span>&#160;</div><div class="line"><a name="l15251"></a><span class="lineno">15251</span>&#160; <span class="comment">// Adds a test part result to the list.</span></div><div class="line"><a name="l15252"></a><span class="lineno">15252</span>&#160; <span class="keywordtype">void</span> AddTestPartResult(<span class="keyword">const</span> TestPartResult&amp; test_part_result);</div><div class="line"><a name="l15253"></a><span class="lineno">15253</span>&#160;</div><div class="line"><a name="l15254"></a><span class="lineno">15254</span>&#160; <span class="comment">// Returns the death test count.</span></div><div class="line"><a name="l15255"></a><span class="lineno">15255</span>&#160; <span class="keywordtype">int</span> death_test_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> death_test_count_; }</div><div class="line"><a name="l15256"></a><span class="lineno">15256</span>&#160;</div><div class="line"><a name="l15257"></a><span class="lineno">15257</span>&#160; <span class="comment">// Increments the death test count, returning the new count.</span></div><div class="line"><a name="l15258"></a><span class="lineno">15258</span>&#160; <span class="keywordtype">int</span> increment_death_test_count() { <span class="keywordflow">return</span> ++death_test_count_; }</div><div class="line"><a name="l15259"></a><span class="lineno">15259</span>&#160;</div><div class="line"><a name="l15260"></a><span class="lineno">15260</span>&#160; <span class="comment">// Clears the test part results.</span></div><div class="line"><a name="l15261"></a><span class="lineno">15261</span>&#160; <span class="keywordtype">void</span> ClearTestPartResults();</div><div class="line"><a name="l15262"></a><span class="lineno">15262</span>&#160;</div><div class="line"><a name="l15263"></a><span class="lineno">15263</span>&#160; <span class="comment">// Clears the object.</span></div><div class="line"><a name="l15264"></a><span class="lineno">15264</span>&#160; <span class="keywordtype">void</span> Clear();</div><div class="line"><a name="l15265"></a><span class="lineno">15265</span>&#160;</div><div class="line"><a name="l15266"></a><span class="lineno">15266</span>&#160; <span class="comment">// Protects mutable state of the property vector and of owned</span></div><div class="line"><a name="l15267"></a><span class="lineno">15267</span>&#160; <span class="comment">// properties, whose values may be updated.</span></div><div class="line"><a name="l15268"></a><span class="lineno">15268</span>&#160; internal::Mutex test_properites_mutex_;</div><div class="line"><a name="l15269"></a><span class="lineno">15269</span>&#160;</div><div class="line"><a name="l15270"></a><span class="lineno">15270</span>&#160; <span class="comment">// The vector of TestPartResults</span></div><div class="line"><a name="l15271"></a><span class="lineno">15271</span>&#160; std::vector&lt;TestPartResult&gt; test_part_results_;</div><div class="line"><a name="l15272"></a><span class="lineno">15272</span>&#160; <span class="comment">// The vector of TestProperties</span></div><div class="line"><a name="l15273"></a><span class="lineno">15273</span>&#160; std::vector&lt;TestProperty&gt; test_properties_;</div><div class="line"><a name="l15274"></a><span class="lineno">15274</span>&#160; <span class="comment">// Running count of death tests.</span></div><div class="line"><a name="l15275"></a><span class="lineno">15275</span>&#160; <span class="keywordtype">int</span> death_test_count_;</div><div class="line"><a name="l15276"></a><span class="lineno">15276</span>&#160; <span class="comment">// The elapsed time, in milliseconds.</span></div><div class="line"><a name="l15277"></a><span class="lineno">15277</span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> elapsed_time_;</div><div class="line"><a name="l15278"></a><span class="lineno">15278</span>&#160;</div><div class="line"><a name="l15279"></a><span class="lineno">15279</span>&#160; <span class="comment">// We disallow copying TestResult.</span></div><div class="line"><a name="l15280"></a><span class="lineno">15280</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(TestResult);</div><div class="line"><a name="l15281"></a><span class="lineno">15281</span>&#160;}; <span class="comment">// class TestResult</span></div><div class="line"><a name="l15282"></a><span class="lineno">15282</span>&#160;</div><div class="line"><a name="l15283"></a><span class="lineno">15283</span>&#160;<span class="comment">// A TestInfo object stores the following information about a test:</span></div><div class="line"><a name="l15284"></a><span class="lineno">15284</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15285"></a><span class="lineno">15285</span>&#160;<span class="comment">// Test suite name</span></div><div class="line"><a name="l15286"></a><span class="lineno">15286</span>&#160;<span class="comment">// Test name</span></div><div class="line"><a name="l15287"></a><span class="lineno">15287</span>&#160;<span class="comment">// Whether the test should be run</span></div><div class="line"><a name="l15288"></a><span class="lineno">15288</span>&#160;<span class="comment">// A function pointer that creates the test object when invoked</span></div><div class="line"><a name="l15289"></a><span class="lineno">15289</span>&#160;<span class="comment">// Test result</span></div><div class="line"><a name="l15290"></a><span class="lineno">15290</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15291"></a><span class="lineno">15291</span>&#160;<span class="comment">// The constructor of TestInfo registers itself with the UnitTest</span></div><div class="line"><a name="l15292"></a><span class="lineno">15292</span>&#160;<span class="comment">// singleton such that the RUN_ALL_TESTS() macro knows which tests to</span></div><div class="line"><a name="l15293"></a><span class="lineno">15293</span>&#160;<span class="comment">// run.</span></div><div class="line"><a name="l15294"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html">15294</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a> {</div><div class="line"><a name="l15295"></a><span class="lineno">15295</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15296"></a><span class="lineno">15296</span>&#160; <span class="comment">// Destructs a TestInfo object. This function is not virtual, so</span></div><div class="line"><a name="l15297"></a><span class="lineno">15297</span>&#160; <span class="comment">// don&#39;t inherit from TestInfo.</span></div><div class="line"><a name="l15298"></a><span class="lineno">15298</span>&#160; ~<a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>();</div><div class="line"><a name="l15299"></a><span class="lineno">15299</span>&#160;</div><div class="line"><a name="l15300"></a><span class="lineno">15300</span>&#160; <span class="comment">// Returns the test suite name.</span></div><div class="line"><a name="l15301"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a82a84ffd0e4d18eb5a3f97a2077e12cc">15301</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#a82a84ffd0e4d18eb5a3f97a2077e12cc">test_suite_name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> test_suite_name_.c_str(); }</div><div class="line"><a name="l15302"></a><span class="lineno">15302</span>&#160;</div><div class="line"><a name="l15303"></a><span class="lineno">15303</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15304"></a><span class="lineno">15304</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15305"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a036a20710c8c2252889544daba9a8ff9">15305</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#a036a20710c8c2252889544daba9a8ff9">test_case_name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> test_suite_name(); }</div><div class="line"><a name="l15306"></a><span class="lineno">15306</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15307"></a><span class="lineno">15307</span>&#160;</div><div class="line"><a name="l15308"></a><span class="lineno">15308</span>&#160; <span class="comment">// Returns the test name.</span></div><div class="line"><a name="l15309"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#ac2581b45eccc9a3b94cb41c4807d0e34">15309</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#ac2581b45eccc9a3b94cb41c4807d0e34">name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> name_.c_str(); }</div><div class="line"><a name="l15310"></a><span class="lineno">15310</span>&#160;</div><div class="line"><a name="l15311"></a><span class="lineno">15311</span>&#160; <span class="comment">// Returns the name of the parameter type, or NULL if this is not a typed</span></div><div class="line"><a name="l15312"></a><span class="lineno">15312</span>&#160; <span class="comment">// or a type-parameterized test.</span></div><div class="line"><a name="l15313"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a7759bc57f4350ad406cbbb0b3bcea320">15313</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#a7759bc57f4350ad406cbbb0b3bcea320">type_param</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15314"></a><span class="lineno">15314</span>&#160; <span class="keywordflow">if</span> (type_param_.get() != <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> type_param_-&gt;c_str();</div><div class="line"><a name="l15315"></a><span class="lineno">15315</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l15316"></a><span class="lineno">15316</span>&#160; }</div><div class="line"><a name="l15317"></a><span class="lineno">15317</span>&#160;</div><div class="line"><a name="l15318"></a><span class="lineno">15318</span>&#160; <span class="comment">// Returns the text representation of the value parameter, or NULL if this</span></div><div class="line"><a name="l15319"></a><span class="lineno">15319</span>&#160; <span class="comment">// is not a value-parameterized test.</span></div><div class="line"><a name="l15320"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#abdf2c6cfcf4819e725816c64e1c1fc24">15320</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#abdf2c6cfcf4819e725816c64e1c1fc24">value_param</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15321"></a><span class="lineno">15321</span>&#160; <span class="keywordflow">if</span> (value_param_.get() != <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> value_param_-&gt;c_str();</div><div class="line"><a name="l15322"></a><span class="lineno">15322</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l15323"></a><span class="lineno">15323</span>&#160; }</div><div class="line"><a name="l15324"></a><span class="lineno">15324</span>&#160;</div><div class="line"><a name="l15325"></a><span class="lineno">15325</span>&#160; <span class="comment">// Returns the file name where this test is defined.</span></div><div class="line"><a name="l15326"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a9b74d79cf618ce5bb0d0b1da75ee8b35">15326</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_info.html#a9b74d79cf618ce5bb0d0b1da75ee8b35">file</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> location_.file.c_str(); }</div><div class="line"><a name="l15327"></a><span class="lineno">15327</span>&#160;</div><div class="line"><a name="l15328"></a><span class="lineno">15328</span>&#160; <span class="comment">// Returns the line where this test is defined.</span></div><div class="line"><a name="l15329"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#af5931cfc594b5d660c56b3c61c41ea13">15329</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classtesting_1_1_test_info.html#af5931cfc594b5d660c56b3c61c41ea13">line</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> location_.line; }</div><div class="line"><a name="l15330"></a><span class="lineno">15330</span>&#160;</div><div class="line"><a name="l15331"></a><span class="lineno">15331</span>&#160; <span class="comment">// Return true if this test should not be run because it&#39;s in another shard.</span></div><div class="line"><a name="l15332"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a8621f2cf7623fd1609db8e324f0c2fec">15332</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_info.html#a8621f2cf7623fd1609db8e324f0c2fec">is_in_another_shard</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> is_in_another_shard_; }</div><div class="line"><a name="l15333"></a><span class="lineno">15333</span>&#160;</div><div class="line"><a name="l15334"></a><span class="lineno">15334</span>&#160; <span class="comment">// Returns true if this test should run, that is if the test is not</span></div><div class="line"><a name="l15335"></a><span class="lineno">15335</span>&#160; <span class="comment">// disabled (or it is disabled but the also_run_disabled_tests flag has</span></div><div class="line"><a name="l15336"></a><span class="lineno">15336</span>&#160; <span class="comment">// been specified) and its full name matches the user-specified filter.</span></div><div class="line"><a name="l15337"></a><span class="lineno">15337</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15338"></a><span class="lineno">15338</span>&#160; <span class="comment">// Google Test allows the user to filter the tests by their full names.</span></div><div class="line"><a name="l15339"></a><span class="lineno">15339</span>&#160; <span class="comment">// The full name of a test Bar in test suite Foo is defined as</span></div><div class="line"><a name="l15340"></a><span class="lineno">15340</span>&#160; <span class="comment">// &quot;Foo.Bar&quot;. Only the tests that match the filter will run.</span></div><div class="line"><a name="l15341"></a><span class="lineno">15341</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15342"></a><span class="lineno">15342</span>&#160; <span class="comment">// A filter is a colon-separated list of glob (not regex) patterns,</span></div><div class="line"><a name="l15343"></a><span class="lineno">15343</span>&#160; <span class="comment">// optionally followed by a &#39;-&#39; and a colon-separated list of</span></div><div class="line"><a name="l15344"></a><span class="lineno">15344</span>&#160; <span class="comment">// negative patterns (tests to exclude). A test is run if it</span></div><div class="line"><a name="l15345"></a><span class="lineno">15345</span>&#160; <span class="comment">// matches one of the positive patterns and does not match any of</span></div><div class="line"><a name="l15346"></a><span class="lineno">15346</span>&#160; <span class="comment">// the negative patterns.</span></div><div class="line"><a name="l15347"></a><span class="lineno">15347</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15348"></a><span class="lineno">15348</span>&#160; <span class="comment">// For example, *A*:Foo.* is a filter that matches any string that</span></div><div class="line"><a name="l15349"></a><span class="lineno">15349</span>&#160; <span class="comment">// contains the character &#39;A&#39; or starts with &quot;Foo.&quot;.</span></div><div class="line"><a name="l15350"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a866e33b5bc5ab2a6e5375fc7d3af0f96">15350</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_info.html#a866e33b5bc5ab2a6e5375fc7d3af0f96">should_run</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> should_run_; }</div><div class="line"><a name="l15351"></a><span class="lineno">15351</span>&#160;</div><div class="line"><a name="l15352"></a><span class="lineno">15352</span>&#160; <span class="comment">// Returns true iff this test will appear in the XML report.</span></div><div class="line"><a name="l15353"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a63e7042028b0b846f4b5a1e5bcffc079">15353</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_info.html#a63e7042028b0b846f4b5a1e5bcffc079">is_reportable</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15354"></a><span class="lineno">15354</span>&#160; <span class="comment">// The XML report includes tests matching the filter, excluding those</span></div><div class="line"><a name="l15355"></a><span class="lineno">15355</span>&#160; <span class="comment">// run in other shards.</span></div><div class="line"><a name="l15356"></a><span class="lineno">15356</span>&#160; <span class="keywordflow">return</span> matches_filter_ &amp;&amp; !is_in_another_shard_;</div><div class="line"><a name="l15357"></a><span class="lineno">15357</span>&#160; }</div><div class="line"><a name="l15358"></a><span class="lineno">15358</span>&#160;</div><div class="line"><a name="l15359"></a><span class="lineno">15359</span>&#160; <span class="comment">// Returns the result of the test.</span></div><div class="line"><a name="l15360"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#aee8cb884c95cd446129aba936b4159e0">15360</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_result.html">TestResult</a>* <a class="code" href="classtesting_1_1_test_info.html#aee8cb884c95cd446129aba936b4159e0">result</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &amp;result_; }</div><div class="line"><a name="l15361"></a><span class="lineno">15361</span>&#160;</div><div class="line"><a name="l15362"></a><span class="lineno">15362</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15363"></a><span class="lineno">15363</span>&#160;<span class="preprocessor">#if GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l15364"></a><span class="lineno">15364</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::DefaultDeathTestFactory;</div><div class="line"><a name="l15365"></a><span class="lineno">15365</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_DEATH_TEST</span></div><div class="line"><a name="l15366"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#a5b78b1c2e1fa07ffed92da365593eaa4">15366</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test.html">Test</a>;</div><div class="line"><a name="l15367"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#ab9aaba231fd11196425e75caf709bfc6">15367</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>;</div><div class="line"><a name="l15368"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#acc0a5e7573fd6ae7ad1878613bb86853">15368</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::UnitTestImpl;</div><div class="line"><a name="l15369"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_info.html#adc037d188dab349a94868991955c9cd4">15369</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::StreamingListenerTest;</div><div class="line"><a name="l15370"></a><span class="lineno">15370</span>&#160; <span class="keyword">friend</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* <a class="code" href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">internal::MakeAndRegisterTestInfo</a>(</div><div class="line"><a name="l15371"></a><span class="lineno">15371</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* type_param,</div><div class="line"><a name="l15372"></a><span class="lineno">15372</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* value_param, <a class="code" href="structtesting_1_1internal_1_1_code_location.html">internal::CodeLocation</a> code_location,</div><div class="line"><a name="l15373"></a><span class="lineno">15373</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">internal::TypeId</a> fixture_class_id, <a class="code" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">internal::SetUpTestSuiteFunc</a> set_up_tc,</div><div class="line"><a name="l15374"></a><span class="lineno">15374</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">internal::TearDownTestSuiteFunc</a> tear_down_tc,</div><div class="line"><a name="l15375"></a><span class="lineno">15375</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">internal::TestFactoryBase</a>* factory);</div><div class="line"><a name="l15376"></a><span class="lineno">15376</span>&#160;</div><div class="line"><a name="l15377"></a><span class="lineno">15377</span>&#160; <span class="comment">// Constructs a TestInfo object. The newly constructed instance assumes</span></div><div class="line"><a name="l15378"></a><span class="lineno">15378</span>&#160; <span class="comment">// ownership of the factory object.</span></div><div class="line"><a name="l15379"></a><span class="lineno">15379</span>&#160; <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; test_suite_name, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; name,</div><div class="line"><a name="l15380"></a><span class="lineno">15380</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* a_type_param, <span class="comment">// NULL if not a type-parameterized test</span></div><div class="line"><a name="l15381"></a><span class="lineno">15381</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* a_value_param, <span class="comment">// NULL if not a value-parameterized test</span></div><div class="line"><a name="l15382"></a><span class="lineno">15382</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_code_location.html">internal::CodeLocation</a> a_code_location,</div><div class="line"><a name="l15383"></a><span class="lineno">15383</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">internal::TypeId</a> fixture_class_id,</div><div class="line"><a name="l15384"></a><span class="lineno">15384</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">internal::TestFactoryBase</a>* factory);</div><div class="line"><a name="l15385"></a><span class="lineno">15385</span>&#160;</div><div class="line"><a name="l15386"></a><span class="lineno">15386</span>&#160; <span class="comment">// Increments the number of death tests encountered in this test so</span></div><div class="line"><a name="l15387"></a><span class="lineno">15387</span>&#160; <span class="comment">// far.</span></div><div class="line"><a name="l15388"></a><span class="lineno">15388</span>&#160; <span class="keywordtype">int</span> increment_death_test_count() {</div><div class="line"><a name="l15389"></a><span class="lineno">15389</span>&#160; <span class="keywordflow">return</span> result_.increment_death_test_count();</div><div class="line"><a name="l15390"></a><span class="lineno">15390</span>&#160; }</div><div class="line"><a name="l15391"></a><span class="lineno">15391</span>&#160;</div><div class="line"><a name="l15392"></a><span class="lineno">15392</span>&#160; <span class="comment">// Creates the test object, runs it, records its result, and then</span></div><div class="line"><a name="l15393"></a><span class="lineno">15393</span>&#160; <span class="comment">// deletes it.</span></div><div class="line"><a name="l15394"></a><span class="lineno">15394</span>&#160; <span class="keywordtype">void</span> Run();</div><div class="line"><a name="l15395"></a><span class="lineno">15395</span>&#160;</div><div class="line"><a name="l15396"></a><span class="lineno">15396</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> ClearTestResult(<a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* test_info) {</div><div class="line"><a name="l15397"></a><span class="lineno">15397</span>&#160; test_info-&gt;result_.Clear();</div><div class="line"><a name="l15398"></a><span class="lineno">15398</span>&#160; }</div><div class="line"><a name="l15399"></a><span class="lineno">15399</span>&#160;</div><div class="line"><a name="l15400"></a><span class="lineno">15400</span>&#160; <span class="comment">// These fields are immutable properties of the test.</span></div><div class="line"><a name="l15401"></a><span class="lineno">15401</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> test_suite_name_; <span class="comment">// test suite name</span></div><div class="line"><a name="l15402"></a><span class="lineno">15402</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> name_; <span class="comment">// Test name</span></div><div class="line"><a name="l15403"></a><span class="lineno">15403</span>&#160; <span class="comment">// Name of the parameter type, or NULL if this is not a typed or a</span></div><div class="line"><a name="l15404"></a><span class="lineno">15404</span>&#160; <span class="comment">// type-parameterized test.</span></div><div class="line"><a name="l15405"></a><span class="lineno">15405</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt;const ::std::string&gt; type_param_;</div><div class="line"><a name="l15406"></a><span class="lineno">15406</span>&#160; <span class="comment">// Text representation of the value parameter, or NULL if this is not a</span></div><div class="line"><a name="l15407"></a><span class="lineno">15407</span>&#160; <span class="comment">// value-parameterized test.</span></div><div class="line"><a name="l15408"></a><span class="lineno">15408</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt;const ::std::string&gt; value_param_;</div><div class="line"><a name="l15409"></a><span class="lineno">15409</span>&#160; internal::CodeLocation location_;</div><div class="line"><a name="l15410"></a><span class="lineno">15410</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">internal::TypeId</a> fixture_class_id_; <span class="comment">// ID of the test fixture class</span></div><div class="line"><a name="l15411"></a><span class="lineno">15411</span>&#160; <span class="keywordtype">bool</span> should_run_; <span class="comment">// True iff this test should run</span></div><div class="line"><a name="l15412"></a><span class="lineno">15412</span>&#160; <span class="keywordtype">bool</span> is_disabled_; <span class="comment">// True iff this test is disabled</span></div><div class="line"><a name="l15413"></a><span class="lineno">15413</span>&#160; <span class="keywordtype">bool</span> matches_filter_; <span class="comment">// True if this test matches the</span></div><div class="line"><a name="l15414"></a><span class="lineno">15414</span>&#160; <span class="comment">// user-specified filter.</span></div><div class="line"><a name="l15415"></a><span class="lineno">15415</span>&#160; <span class="keywordtype">bool</span> is_in_another_shard_; <span class="comment">// Will be run in another shard.</span></div><div class="line"><a name="l15416"></a><span class="lineno">15416</span>&#160; internal::TestFactoryBase* <span class="keyword">const</span> factory_; <span class="comment">// The factory that creates</span></div><div class="line"><a name="l15417"></a><span class="lineno">15417</span>&#160; <span class="comment">// the test object</span></div><div class="line"><a name="l15418"></a><span class="lineno">15418</span>&#160;</div><div class="line"><a name="l15419"></a><span class="lineno">15419</span>&#160; <span class="comment">// This field is mutable and needs to be reset before running the</span></div><div class="line"><a name="l15420"></a><span class="lineno">15420</span>&#160; <span class="comment">// test for the second time.</span></div><div class="line"><a name="l15421"></a><span class="lineno">15421</span>&#160; TestResult result_;</div><div class="line"><a name="l15422"></a><span class="lineno">15422</span>&#160;</div><div class="line"><a name="l15423"></a><span class="lineno">15423</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(TestInfo);</div><div class="line"><a name="l15424"></a><span class="lineno">15424</span>&#160;};</div><div class="line"><a name="l15425"></a><span class="lineno">15425</span>&#160;</div><div class="line"><a name="l15426"></a><span class="lineno">15426</span>&#160;<span class="comment">// A test suite, which consists of a vector of TestInfos.</span></div><div class="line"><a name="l15427"></a><span class="lineno">15427</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15428"></a><span class="lineno">15428</span>&#160;<span class="comment">// TestSuite is not copyable.</span></div><div class="line"><a name="l15429"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html">15429</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a> {</div><div class="line"><a name="l15430"></a><span class="lineno">15430</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15431"></a><span class="lineno">15431</span>&#160; <span class="comment">// Creates a TestSuite with the given name.</span></div><div class="line"><a name="l15432"></a><span class="lineno">15432</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15433"></a><span class="lineno">15433</span>&#160; <span class="comment">// TestSuite does NOT have a default constructor. Always use this</span></div><div class="line"><a name="l15434"></a><span class="lineno">15434</span>&#160; <span class="comment">// constructor to create a TestSuite object.</span></div><div class="line"><a name="l15435"></a><span class="lineno">15435</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15436"></a><span class="lineno">15436</span>&#160; <span class="comment">// Arguments:</span></div><div class="line"><a name="l15437"></a><span class="lineno">15437</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15438"></a><span class="lineno">15438</span>&#160; <span class="comment">// name: name of the test suite</span></div><div class="line"><a name="l15439"></a><span class="lineno">15439</span>&#160; <span class="comment">// a_type_param: the name of the test&#39;s type parameter, or NULL if</span></div><div class="line"><a name="l15440"></a><span class="lineno">15440</span>&#160; <span class="comment">// this is not a type-parameterized test.</span></div><div class="line"><a name="l15441"></a><span class="lineno">15441</span>&#160; <span class="comment">// set_up_tc: pointer to the function that sets up the test suite</span></div><div class="line"><a name="l15442"></a><span class="lineno">15442</span>&#160; <span class="comment">// tear_down_tc: pointer to the function that tears down the test suite</span></div><div class="line"><a name="l15443"></a><span class="lineno">15443</span>&#160; <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* a_type_param,</div><div class="line"><a name="l15444"></a><span class="lineno">15444</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">internal::SetUpTestSuiteFunc</a> set_up_tc,</div><div class="line"><a name="l15445"></a><span class="lineno">15445</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">internal::TearDownTestSuiteFunc</a> tear_down_tc);</div><div class="line"><a name="l15446"></a><span class="lineno">15446</span>&#160;</div><div class="line"><a name="l15447"></a><span class="lineno">15447</span>&#160; <span class="comment">// Destructor of TestSuite.</span></div><div class="line"><a name="l15448"></a><span class="lineno">15448</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>();</div><div class="line"><a name="l15449"></a><span class="lineno">15449</span>&#160;</div><div class="line"><a name="l15450"></a><span class="lineno">15450</span>&#160; <span class="comment">// Gets the name of the TestSuite.</span></div><div class="line"><a name="l15451"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#ab3369db678ca3d9648d6fd63ad038986">15451</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_suite.html#ab3369db678ca3d9648d6fd63ad038986">name</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> name_.c_str(); }</div><div class="line"><a name="l15452"></a><span class="lineno">15452</span>&#160;</div><div class="line"><a name="l15453"></a><span class="lineno">15453</span>&#160; <span class="comment">// Returns the name of the parameter type, or NULL if this is not a</span></div><div class="line"><a name="l15454"></a><span class="lineno">15454</span>&#160; <span class="comment">// type-parameterized test suite.</span></div><div class="line"><a name="l15455"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#ab2ea12318bdbfb6aa97792344b49e3db">15455</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="classtesting_1_1_test_suite.html#ab2ea12318bdbfb6aa97792344b49e3db">type_param</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15456"></a><span class="lineno">15456</span>&#160; <span class="keywordflow">if</span> (type_param_.get() != <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> type_param_-&gt;c_str();</div><div class="line"><a name="l15457"></a><span class="lineno">15457</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l15458"></a><span class="lineno">15458</span>&#160; }</div><div class="line"><a name="l15459"></a><span class="lineno">15459</span>&#160;</div><div class="line"><a name="l15460"></a><span class="lineno">15460</span>&#160; <span class="comment">// Returns true if any test in this test suite should run.</span></div><div class="line"><a name="l15461"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#a8f62c17baef80042e0ff03ef5d5e4ba7">15461</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_suite.html#a8f62c17baef80042e0ff03ef5d5e4ba7">should_run</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> should_run_; }</div><div class="line"><a name="l15462"></a><span class="lineno">15462</span>&#160;</div><div class="line"><a name="l15463"></a><span class="lineno">15463</span>&#160; <span class="comment">// Gets the number of successful tests in this test suite.</span></div><div class="line"><a name="l15464"></a><span class="lineno">15464</span>&#160; <span class="keywordtype">int</span> successful_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15465"></a><span class="lineno">15465</span>&#160;</div><div class="line"><a name="l15466"></a><span class="lineno">15466</span>&#160; <span class="comment">// Gets the number of skipped tests in this test suite.</span></div><div class="line"><a name="l15467"></a><span class="lineno">15467</span>&#160; <span class="keywordtype">int</span> skipped_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15468"></a><span class="lineno">15468</span>&#160;</div><div class="line"><a name="l15469"></a><span class="lineno">15469</span>&#160; <span class="comment">// Gets the number of failed tests in this test suite.</span></div><div class="line"><a name="l15470"></a><span class="lineno">15470</span>&#160; <span class="keywordtype">int</span> failed_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15471"></a><span class="lineno">15471</span>&#160;</div><div class="line"><a name="l15472"></a><span class="lineno">15472</span>&#160; <span class="comment">// Gets the number of disabled tests that will be reported in the XML report.</span></div><div class="line"><a name="l15473"></a><span class="lineno">15473</span>&#160; <span class="keywordtype">int</span> reportable_disabled_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15474"></a><span class="lineno">15474</span>&#160;</div><div class="line"><a name="l15475"></a><span class="lineno">15475</span>&#160; <span class="comment">// Gets the number of disabled tests in this test suite.</span></div><div class="line"><a name="l15476"></a><span class="lineno">15476</span>&#160; <span class="keywordtype">int</span> disabled_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15477"></a><span class="lineno">15477</span>&#160;</div><div class="line"><a name="l15478"></a><span class="lineno">15478</span>&#160; <span class="comment">// Gets the number of tests to be printed in the XML report.</span></div><div class="line"><a name="l15479"></a><span class="lineno">15479</span>&#160; <span class="keywordtype">int</span> reportable_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15480"></a><span class="lineno">15480</span>&#160;</div><div class="line"><a name="l15481"></a><span class="lineno">15481</span>&#160; <span class="comment">// Get the number of tests in this test suite that should run.</span></div><div class="line"><a name="l15482"></a><span class="lineno">15482</span>&#160; <span class="keywordtype">int</span> test_to_run_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15483"></a><span class="lineno">15483</span>&#160;</div><div class="line"><a name="l15484"></a><span class="lineno">15484</span>&#160; <span class="comment">// Gets the number of all tests in this test suite.</span></div><div class="line"><a name="l15485"></a><span class="lineno">15485</span>&#160; <span class="keywordtype">int</span> total_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15486"></a><span class="lineno">15486</span>&#160;</div><div class="line"><a name="l15487"></a><span class="lineno">15487</span>&#160; <span class="comment">// Returns true iff the test suite passed.</span></div><div class="line"><a name="l15488"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#add51ece89b069b29e07f0476e0e6aae9">15488</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_suite.html#add51ece89b069b29e07f0476e0e6aae9">Passed</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !Failed(); }</div><div class="line"><a name="l15489"></a><span class="lineno">15489</span>&#160;</div><div class="line"><a name="l15490"></a><span class="lineno">15490</span>&#160; <span class="comment">// Returns true iff the test suite failed.</span></div><div class="line"><a name="l15491"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#adec55446c23dc2d0bfea91c6125a1047">15491</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classtesting_1_1_test_suite.html#adec55446c23dc2d0bfea91c6125a1047">Failed</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failed_test_count() &gt; 0; }</div><div class="line"><a name="l15492"></a><span class="lineno">15492</span>&#160;</div><div class="line"><a name="l15493"></a><span class="lineno">15493</span>&#160; <span class="comment">// Returns the elapsed time, in milliseconds.</span></div><div class="line"><a name="l15494"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#a2ede69fa37985ab8b21128955c56d6d7">15494</a></span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> <a class="code" href="classtesting_1_1_test_suite.html#a2ede69fa37985ab8b21128955c56d6d7">elapsed_time</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> elapsed_time_; }</div><div class="line"><a name="l15495"></a><span class="lineno">15495</span>&#160;</div><div class="line"><a name="l15496"></a><span class="lineno">15496</span>&#160; <span class="comment">// Returns the i-th test among all the tests. i can range from 0 to</span></div><div class="line"><a name="l15497"></a><span class="lineno">15497</span>&#160; <span class="comment">// total_test_count() - 1. If i is not in that range, returns NULL.</span></div><div class="line"><a name="l15498"></a><span class="lineno">15498</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* GetTestInfo(<span class="keywordtype">int</span> i) <span class="keyword">const</span>;</div><div class="line"><a name="l15499"></a><span class="lineno">15499</span>&#160;</div><div class="line"><a name="l15500"></a><span class="lineno">15500</span>&#160; <span class="comment">// Returns the TestResult that holds test properties recorded during</span></div><div class="line"><a name="l15501"></a><span class="lineno">15501</span>&#160; <span class="comment">// execution of SetUpTestSuite and TearDownTestSuite.</span></div><div class="line"><a name="l15502"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#a3391a0ec111c66e1ac16a800f5068af7">15502</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_result.html">TestResult</a>&amp; <a class="code" href="classtesting_1_1_test_suite.html#a3391a0ec111c66e1ac16a800f5068af7">ad_hoc_test_result</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ad_hoc_test_result_; }</div><div class="line"><a name="l15503"></a><span class="lineno">15503</span>&#160;</div><div class="line"><a name="l15504"></a><span class="lineno">15504</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15505"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#a5b78b1c2e1fa07ffed92da365593eaa4">15505</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test.html">Test</a>;</div><div class="line"><a name="l15506"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_suite.html#acc0a5e7573fd6ae7ad1878613bb86853">15506</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::UnitTestImpl;</div><div class="line"><a name="l15507"></a><span class="lineno">15507</span>&#160;</div><div class="line"><a name="l15508"></a><span class="lineno">15508</span>&#160; <span class="comment">// Gets the (mutable) vector of TestInfos in this TestSuite.</span></div><div class="line"><a name="l15509"></a><span class="lineno">15509</span>&#160; std::vector&lt;TestInfo*&gt;&amp; test_info_list() { <span class="keywordflow">return</span> test_info_list_; }</div><div class="line"><a name="l15510"></a><span class="lineno">15510</span>&#160;</div><div class="line"><a name="l15511"></a><span class="lineno">15511</span>&#160; <span class="comment">// Gets the (immutable) vector of TestInfos in this TestSuite.</span></div><div class="line"><a name="l15512"></a><span class="lineno">15512</span>&#160; <span class="keyword">const</span> std::vector&lt;TestInfo*&gt;&amp; test_info_list()<span class="keyword"> const </span>{</div><div class="line"><a name="l15513"></a><span class="lineno">15513</span>&#160; <span class="keywordflow">return</span> test_info_list_;</div><div class="line"><a name="l15514"></a><span class="lineno">15514</span>&#160; }</div><div class="line"><a name="l15515"></a><span class="lineno">15515</span>&#160;</div><div class="line"><a name="l15516"></a><span class="lineno">15516</span>&#160; <span class="comment">// Returns the i-th test among all the tests. i can range from 0 to</span></div><div class="line"><a name="l15517"></a><span class="lineno">15517</span>&#160; <span class="comment">// total_test_count() - 1. If i is not in that range, returns NULL.</span></div><div class="line"><a name="l15518"></a><span class="lineno">15518</span>&#160; TestInfo* GetMutableTestInfo(<span class="keywordtype">int</span> i);</div><div class="line"><a name="l15519"></a><span class="lineno">15519</span>&#160;</div><div class="line"><a name="l15520"></a><span class="lineno">15520</span>&#160; <span class="comment">// Sets the should_run member.</span></div><div class="line"><a name="l15521"></a><span class="lineno">15521</span>&#160; <span class="keywordtype">void</span> set_should_run(<span class="keywordtype">bool</span> should) { should_run_ = should; }</div><div class="line"><a name="l15522"></a><span class="lineno">15522</span>&#160;</div><div class="line"><a name="l15523"></a><span class="lineno">15523</span>&#160; <span class="comment">// Adds a TestInfo to this test suite. Will delete the TestInfo upon</span></div><div class="line"><a name="l15524"></a><span class="lineno">15524</span>&#160; <span class="comment">// destruction of the TestSuite object.</span></div><div class="line"><a name="l15525"></a><span class="lineno">15525</span>&#160; <span class="keywordtype">void</span> AddTestInfo(TestInfo * test_info);</div><div class="line"><a name="l15526"></a><span class="lineno">15526</span>&#160;</div><div class="line"><a name="l15527"></a><span class="lineno">15527</span>&#160; <span class="comment">// Clears the results of all tests in this test suite.</span></div><div class="line"><a name="l15528"></a><span class="lineno">15528</span>&#160; <span class="keywordtype">void</span> ClearResult();</div><div class="line"><a name="l15529"></a><span class="lineno">15529</span>&#160;</div><div class="line"><a name="l15530"></a><span class="lineno">15530</span>&#160; <span class="comment">// Clears the results of all tests in the given test suite.</span></div><div class="line"><a name="l15531"></a><span class="lineno">15531</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> ClearTestSuiteResult(TestSuite* test_suite) {</div><div class="line"><a name="l15532"></a><span class="lineno">15532</span>&#160; test_suite-&gt;ClearResult();</div><div class="line"><a name="l15533"></a><span class="lineno">15533</span>&#160; }</div><div class="line"><a name="l15534"></a><span class="lineno">15534</span>&#160;</div><div class="line"><a name="l15535"></a><span class="lineno">15535</span>&#160; <span class="comment">// Runs every test in this TestSuite.</span></div><div class="line"><a name="l15536"></a><span class="lineno">15536</span>&#160; <span class="keywordtype">void</span> Run();</div><div class="line"><a name="l15537"></a><span class="lineno">15537</span>&#160;</div><div class="line"><a name="l15538"></a><span class="lineno">15538</span>&#160; <span class="comment">// Runs SetUpTestSuite() for this TestSuite. This wrapper is needed</span></div><div class="line"><a name="l15539"></a><span class="lineno">15539</span>&#160; <span class="comment">// for catching exceptions thrown from SetUpTestSuite().</span></div><div class="line"><a name="l15540"></a><span class="lineno">15540</span>&#160; <span class="keywordtype">void</span> RunSetUpTestSuite() {</div><div class="line"><a name="l15541"></a><span class="lineno">15541</span>&#160; <span class="keywordflow">if</span> (set_up_tc_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l15542"></a><span class="lineno">15542</span>&#160; (*set_up_tc_)();</div><div class="line"><a name="l15543"></a><span class="lineno">15543</span>&#160; }</div><div class="line"><a name="l15544"></a><span class="lineno">15544</span>&#160; }</div><div class="line"><a name="l15545"></a><span class="lineno">15545</span>&#160;</div><div class="line"><a name="l15546"></a><span class="lineno">15546</span>&#160; <span class="comment">// Runs TearDownTestSuite() for this TestSuite. This wrapper is</span></div><div class="line"><a name="l15547"></a><span class="lineno">15547</span>&#160; <span class="comment">// needed for catching exceptions thrown from TearDownTestSuite().</span></div><div class="line"><a name="l15548"></a><span class="lineno">15548</span>&#160; <span class="keywordtype">void</span> RunTearDownTestSuite() {</div><div class="line"><a name="l15549"></a><span class="lineno">15549</span>&#160; <span class="keywordflow">if</span> (tear_down_tc_ != <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l15550"></a><span class="lineno">15550</span>&#160; (*tear_down_tc_)();</div><div class="line"><a name="l15551"></a><span class="lineno">15551</span>&#160; }</div><div class="line"><a name="l15552"></a><span class="lineno">15552</span>&#160; }</div><div class="line"><a name="l15553"></a><span class="lineno">15553</span>&#160;</div><div class="line"><a name="l15554"></a><span class="lineno">15554</span>&#160; <span class="comment">// Returns true iff test passed.</span></div><div class="line"><a name="l15555"></a><span class="lineno">15555</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestPassed(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15556"></a><span class="lineno">15556</span>&#160; <span class="keywordflow">return</span> test_info-&gt;should_run() &amp;&amp; test_info-&gt;result()-&gt;Passed();</div><div class="line"><a name="l15557"></a><span class="lineno">15557</span>&#160; }</div><div class="line"><a name="l15558"></a><span class="lineno">15558</span>&#160;</div><div class="line"><a name="l15559"></a><span class="lineno">15559</span>&#160; <span class="comment">// Returns true iff test skipped.</span></div><div class="line"><a name="l15560"></a><span class="lineno">15560</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestSkipped(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15561"></a><span class="lineno">15561</span>&#160; <span class="keywordflow">return</span> test_info-&gt;should_run() &amp;&amp; test_info-&gt;result()-&gt;Skipped();</div><div class="line"><a name="l15562"></a><span class="lineno">15562</span>&#160; }</div><div class="line"><a name="l15563"></a><span class="lineno">15563</span>&#160;</div><div class="line"><a name="l15564"></a><span class="lineno">15564</span>&#160; <span class="comment">// Returns true iff test failed.</span></div><div class="line"><a name="l15565"></a><span class="lineno">15565</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestFailed(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15566"></a><span class="lineno">15566</span>&#160; <span class="keywordflow">return</span> test_info-&gt;should_run() &amp;&amp; test_info-&gt;result()-&gt;Failed();</div><div class="line"><a name="l15567"></a><span class="lineno">15567</span>&#160; }</div><div class="line"><a name="l15568"></a><span class="lineno">15568</span>&#160;</div><div class="line"><a name="l15569"></a><span class="lineno">15569</span>&#160; <span class="comment">// Returns true iff the test is disabled and will be reported in the XML</span></div><div class="line"><a name="l15570"></a><span class="lineno">15570</span>&#160; <span class="comment">// report.</span></div><div class="line"><a name="l15571"></a><span class="lineno">15571</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestReportableDisabled(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15572"></a><span class="lineno">15572</span>&#160; <span class="keywordflow">return</span> test_info-&gt;is_reportable() &amp;&amp; test_info-&gt;is_disabled_;</div><div class="line"><a name="l15573"></a><span class="lineno">15573</span>&#160; }</div><div class="line"><a name="l15574"></a><span class="lineno">15574</span>&#160;</div><div class="line"><a name="l15575"></a><span class="lineno">15575</span>&#160; <span class="comment">// Returns true iff test is disabled.</span></div><div class="line"><a name="l15576"></a><span class="lineno">15576</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestDisabled(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15577"></a><span class="lineno">15577</span>&#160; <span class="keywordflow">return</span> test_info-&gt;is_disabled_;</div><div class="line"><a name="l15578"></a><span class="lineno">15578</span>&#160; }</div><div class="line"><a name="l15579"></a><span class="lineno">15579</span>&#160;</div><div class="line"><a name="l15580"></a><span class="lineno">15580</span>&#160; <span class="comment">// Returns true iff this test will appear in the XML report.</span></div><div class="line"><a name="l15581"></a><span class="lineno">15581</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> TestReportable(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15582"></a><span class="lineno">15582</span>&#160; <span class="keywordflow">return</span> test_info-&gt;is_reportable();</div><div class="line"><a name="l15583"></a><span class="lineno">15583</span>&#160; }</div><div class="line"><a name="l15584"></a><span class="lineno">15584</span>&#160;</div><div class="line"><a name="l15585"></a><span class="lineno">15585</span>&#160; <span class="comment">// Returns true if the given test should run.</span></div><div class="line"><a name="l15586"></a><span class="lineno">15586</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> ShouldRunTest(<span class="keyword">const</span> TestInfo* test_info) {</div><div class="line"><a name="l15587"></a><span class="lineno">15587</span>&#160; <span class="keywordflow">return</span> test_info-&gt;should_run();</div><div class="line"><a name="l15588"></a><span class="lineno">15588</span>&#160; }</div><div class="line"><a name="l15589"></a><span class="lineno">15589</span>&#160;</div><div class="line"><a name="l15590"></a><span class="lineno">15590</span>&#160; <span class="comment">// Shuffles the tests in this test suite.</span></div><div class="line"><a name="l15591"></a><span class="lineno">15591</span>&#160; <span class="keywordtype">void</span> ShuffleTests(internal::Random* random);</div><div class="line"><a name="l15592"></a><span class="lineno">15592</span>&#160;</div><div class="line"><a name="l15593"></a><span class="lineno">15593</span>&#160; <span class="comment">// Restores the test order to before the first shuffle.</span></div><div class="line"><a name="l15594"></a><span class="lineno">15594</span>&#160; <span class="keywordtype">void</span> UnshuffleTests();</div><div class="line"><a name="l15595"></a><span class="lineno">15595</span>&#160;</div><div class="line"><a name="l15596"></a><span class="lineno">15596</span>&#160; <span class="comment">// Name of the test suite.</span></div><div class="line"><a name="l15597"></a><span class="lineno">15597</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> name_;</div><div class="line"><a name="l15598"></a><span class="lineno">15598</span>&#160; <span class="comment">// Name of the parameter type, or NULL if this is not a typed or a</span></div><div class="line"><a name="l15599"></a><span class="lineno">15599</span>&#160; <span class="comment">// type-parameterized test.</span></div><div class="line"><a name="l15600"></a><span class="lineno">15600</span>&#160; <span class="keyword">const</span> std::unique_ptr&lt;const ::std::string&gt; type_param_;</div><div class="line"><a name="l15601"></a><span class="lineno">15601</span>&#160; <span class="comment">// The vector of TestInfos in their original order. It owns the</span></div><div class="line"><a name="l15602"></a><span class="lineno">15602</span>&#160; <span class="comment">// elements in the vector.</span></div><div class="line"><a name="l15603"></a><span class="lineno">15603</span>&#160; std::vector&lt;TestInfo*&gt; test_info_list_;</div><div class="line"><a name="l15604"></a><span class="lineno">15604</span>&#160; <span class="comment">// Provides a level of indirection for the test list to allow easy</span></div><div class="line"><a name="l15605"></a><span class="lineno">15605</span>&#160; <span class="comment">// shuffling and restoring the test order. The i-th element in this</span></div><div class="line"><a name="l15606"></a><span class="lineno">15606</span>&#160; <span class="comment">// vector is the index of the i-th test in the shuffled test list.</span></div><div class="line"><a name="l15607"></a><span class="lineno">15607</span>&#160; std::vector&lt;int&gt; test_indices_;</div><div class="line"><a name="l15608"></a><span class="lineno">15608</span>&#160; <span class="comment">// Pointer to the function that sets up the test suite.</span></div><div class="line"><a name="l15609"></a><span class="lineno">15609</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">internal::SetUpTestSuiteFunc</a> set_up_tc_;</div><div class="line"><a name="l15610"></a><span class="lineno">15610</span>&#160; <span class="comment">// Pointer to the function that tears down the test suite.</span></div><div class="line"><a name="l15611"></a><span class="lineno">15611</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">internal::TearDownTestSuiteFunc</a> tear_down_tc_;</div><div class="line"><a name="l15612"></a><span class="lineno">15612</span>&#160; <span class="comment">// True iff any test in this test suite should run.</span></div><div class="line"><a name="l15613"></a><span class="lineno">15613</span>&#160; <span class="keywordtype">bool</span> should_run_;</div><div class="line"><a name="l15614"></a><span class="lineno">15614</span>&#160; <span class="comment">// Elapsed time, in milliseconds.</span></div><div class="line"><a name="l15615"></a><span class="lineno">15615</span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> elapsed_time_;</div><div class="line"><a name="l15616"></a><span class="lineno">15616</span>&#160; <span class="comment">// Holds test properties recorded during execution of SetUpTestSuite and</span></div><div class="line"><a name="l15617"></a><span class="lineno">15617</span>&#160; <span class="comment">// TearDownTestSuite.</span></div><div class="line"><a name="l15618"></a><span class="lineno">15618</span>&#160; TestResult ad_hoc_test_result_;</div><div class="line"><a name="l15619"></a><span class="lineno">15619</span>&#160;</div><div class="line"><a name="l15620"></a><span class="lineno">15620</span>&#160; <span class="comment">// We disallow copying TestSuites.</span></div><div class="line"><a name="l15621"></a><span class="lineno">15621</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(TestSuite);</div><div class="line"><a name="l15622"></a><span class="lineno">15622</span>&#160;};</div><div class="line"><a name="l15623"></a><span class="lineno">15623</span>&#160;</div><div class="line"><a name="l15624"></a><span class="lineno">15624</span>&#160;<span class="comment">// An Environment object is capable of setting up and tearing down an</span></div><div class="line"><a name="l15625"></a><span class="lineno">15625</span>&#160;<span class="comment">// environment. You should subclass this to define your own</span></div><div class="line"><a name="l15626"></a><span class="lineno">15626</span>&#160;<span class="comment">// environment(s).</span></div><div class="line"><a name="l15627"></a><span class="lineno">15627</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15628"></a><span class="lineno">15628</span>&#160;<span class="comment">// An Environment object does the set-up and tear-down in virtual</span></div><div class="line"><a name="l15629"></a><span class="lineno">15629</span>&#160;<span class="comment">// methods SetUp() and TearDown() instead of the constructor and the</span></div><div class="line"><a name="l15630"></a><span class="lineno">15630</span>&#160;<span class="comment">// destructor, as:</span></div><div class="line"><a name="l15631"></a><span class="lineno">15631</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15632"></a><span class="lineno">15632</span>&#160;<span class="comment">// 1. You cannot safely throw from a destructor. This is a problem</span></div><div class="line"><a name="l15633"></a><span class="lineno">15633</span>&#160;<span class="comment">// as in some cases Google Test is used where exceptions are enabled, and</span></div><div class="line"><a name="l15634"></a><span class="lineno">15634</span>&#160;<span class="comment">// we may want to implement ASSERT_* using exceptions where they are</span></div><div class="line"><a name="l15635"></a><span class="lineno">15635</span>&#160;<span class="comment">// available.</span></div><div class="line"><a name="l15636"></a><span class="lineno">15636</span>&#160;<span class="comment">// 2. You cannot use ASSERT_* directly in a constructor or</span></div><div class="line"><a name="l15637"></a><span class="lineno">15637</span>&#160;<span class="comment">// destructor.</span></div><div class="line"><a name="l15638"></a><span class="lineno"><a class="line" href="classtesting_1_1_environment.html">15638</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1_environment.html">Environment</a> {</div><div class="line"><a name="l15639"></a><span class="lineno">15639</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15640"></a><span class="lineno">15640</span>&#160; <span class="comment">// The d&#39;tor is virtual as we need to subclass Environment.</span></div><div class="line"><a name="l15641"></a><span class="lineno"><a class="line" href="classtesting_1_1_environment.html#a0e41c320362576d752cd1f44cabd57d4">15641</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1_environment.html#a0e41c320362576d752cd1f44cabd57d4">~Environment</a>() {}</div><div class="line"><a name="l15642"></a><span class="lineno">15642</span>&#160;</div><div class="line"><a name="l15643"></a><span class="lineno">15643</span>&#160; <span class="comment">// Override this to define how to set up the environment.</span></div><div class="line"><a name="l15644"></a><span class="lineno"><a class="line" href="classtesting_1_1_environment.html#a1bf8cafaa9d4eba9feb98655ee434eb3">15644</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_environment.html#a1bf8cafaa9d4eba9feb98655ee434eb3">SetUp</a>() {}</div><div class="line"><a name="l15645"></a><span class="lineno">15645</span>&#160;</div><div class="line"><a name="l15646"></a><span class="lineno">15646</span>&#160; <span class="comment">// Override this to define how to tear down the environment.</span></div><div class="line"><a name="l15647"></a><span class="lineno"><a class="line" href="classtesting_1_1_environment.html#a039bdaa705c46b9b88234cf4d3bb6254">15647</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_environment.html#a039bdaa705c46b9b88234cf4d3bb6254">TearDown</a>() {}</div><div class="line"><a name="l15648"></a><span class="lineno">15648</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15649"></a><span class="lineno">15649</span>&#160; <span class="comment">// If you see an error about overriding the following function or</span></div><div class="line"><a name="l15650"></a><span class="lineno">15650</span>&#160; <span class="comment">// about it being private, you have mis-spelled SetUp() as Setup().</span></div><div class="line"><a name="l15651"></a><span class="lineno">15651</span>&#160; <span class="keyword">struct </span>Setup_should_be_spelled_SetUp {};</div><div class="line"><a name="l15652"></a><span class="lineno">15652</span>&#160; <span class="keyword">virtual</span> Setup_should_be_spelled_SetUp* Setup() { <span class="keywordflow">return</span> <span class="keyword">nullptr</span>; }</div><div class="line"><a name="l15653"></a><span class="lineno">15653</span>&#160;};</div><div class="line"><a name="l15654"></a><span class="lineno">15654</span>&#160;</div><div class="line"><a name="l15655"></a><span class="lineno">15655</span>&#160;<span class="preprocessor">#if GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l15656"></a><span class="lineno">15656</span>&#160;</div><div class="line"><a name="l15657"></a><span class="lineno">15657</span>&#160;<span class="comment">// Exception which can be thrown from TestEventListener::OnTestPartResult.</span></div><div class="line"><a name="l15658"></a><span class="lineno">15658</span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionException</div><div class="line"><a name="l15659"></a><span class="lineno">15659</span>&#160; : <span class="keyword">public</span> internal::GoogleTestFailureException {</div><div class="line"><a name="l15660"></a><span class="lineno">15660</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15661"></a><span class="lineno">15661</span>&#160; <span class="keyword">explicit</span> AssertionException(<span class="keyword">const</span> TestPartResult&amp; result)</div><div class="line"><a name="l15662"></a><span class="lineno">15662</span>&#160; : GoogleTestFailureException(result) {}</div><div class="line"><a name="l15663"></a><span class="lineno">15663</span>&#160;};</div><div class="line"><a name="l15664"></a><span class="lineno">15664</span>&#160;</div><div class="line"><a name="l15665"></a><span class="lineno">15665</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_EXCEPTIONS</span></div><div class="line"><a name="l15666"></a><span class="lineno">15666</span>&#160;</div><div class="line"><a name="l15667"></a><span class="lineno">15667</span>&#160;<span class="comment">// The interface for tracing execution of tests. The methods are organized in</span></div><div class="line"><a name="l15668"></a><span class="lineno">15668</span>&#160;<span class="comment">// the order the corresponding events are fired.</span></div><div class="line"><a name="l15669"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html">15669</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a> {</div><div class="line"><a name="l15670"></a><span class="lineno">15670</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15671"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html#a4512d19e7a108ec4926239ec1ea85d63">15671</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a4512d19e7a108ec4926239ec1ea85d63">~TestEventListener</a>() {}</div><div class="line"><a name="l15672"></a><span class="lineno">15672</span>&#160;</div><div class="line"><a name="l15673"></a><span class="lineno">15673</span>&#160; <span class="comment">// Fired before any test activity starts.</span></div><div class="line"><a name="l15674"></a><span class="lineno">15674</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a5f6c84f39851e8a603a2d2e10063816b">OnTestProgramStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15675"></a><span class="lineno">15675</span>&#160;</div><div class="line"><a name="l15676"></a><span class="lineno">15676</span>&#160; <span class="comment">// Fired before each iteration of tests starts. There may be more than</span></div><div class="line"><a name="l15677"></a><span class="lineno">15677</span>&#160; <span class="comment">// one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration</span></div><div class="line"><a name="l15678"></a><span class="lineno">15678</span>&#160; <span class="comment">// index, starting from 0.</span></div><div class="line"><a name="l15679"></a><span class="lineno">15679</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a60cc09b7907cb329d152eb5e7133bdeb">OnTestIterationStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test,</div><div class="line"><a name="l15680"></a><span class="lineno">15680</span>&#160; <span class="keywordtype">int</span> iteration) = 0;</div><div class="line"><a name="l15681"></a><span class="lineno">15681</span>&#160;</div><div class="line"><a name="l15682"></a><span class="lineno">15682</span>&#160; <span class="comment">// Fired before environment set-up for each iteration of tests starts.</span></div><div class="line"><a name="l15683"></a><span class="lineno">15683</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#aa6502e534919605be45f26a6daf9a40c">OnEnvironmentsSetUpStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15684"></a><span class="lineno">15684</span>&#160;</div><div class="line"><a name="l15685"></a><span class="lineno">15685</span>&#160; <span class="comment">// Fired after environment set-up for each iteration of tests ends.</span></div><div class="line"><a name="l15686"></a><span class="lineno">15686</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#aaa1021d75f5dbf3f05c829c1cc520341">OnEnvironmentsSetUpEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15687"></a><span class="lineno">15687</span>&#160;</div><div class="line"><a name="l15688"></a><span class="lineno">15688</span>&#160; <span class="comment">// Fired before the test suite starts.</span></div><div class="line"><a name="l15689"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html#ac6605dbb5859436d59d117348d63746c">15689</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#ac6605dbb5859436d59d117348d63746c">OnTestSuiteStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>&amp; test_suite) {}</div><div class="line"><a name="l15690"></a><span class="lineno">15690</span>&#160;</div><div class="line"><a name="l15691"></a><span class="lineno">15691</span>&#160; <span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15692"></a><span class="lineno">15692</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15693"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html#a96693881a1872657b4683e2f0a236ca5">15693</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a96693881a1872657b4683e2f0a236ca5">OnTestCaseStart</a>(<span class="keyword">const</span> TestCase&amp; test_case) {}</div><div class="line"><a name="l15694"></a><span class="lineno">15694</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15695"></a><span class="lineno">15695</span>&#160;</div><div class="line"><a name="l15696"></a><span class="lineno">15696</span>&#160; <span class="comment">// Fired before the test starts.</span></div><div class="line"><a name="l15697"></a><span class="lineno">15697</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#ab4f6a0ca16ae75daf385b3b5914e1048">OnTestStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>&amp; test_info) = 0;</div><div class="line"><a name="l15698"></a><span class="lineno">15698</span>&#160;</div><div class="line"><a name="l15699"></a><span class="lineno">15699</span>&#160; <span class="comment">// Fired after a failed assertion or a SUCCEED() invocation.</span></div><div class="line"><a name="l15700"></a><span class="lineno">15700</span>&#160; <span class="comment">// If you want to throw an exception from this function to skip to the next</span></div><div class="line"><a name="l15701"></a><span class="lineno">15701</span>&#160; <span class="comment">// TEST, it must be AssertionException defined above, or inherited from it.</span></div><div class="line"><a name="l15702"></a><span class="lineno">15702</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a054f8705c883fa120b91473aff38f2ee">OnTestPartResult</a>(<span class="keyword">const</span> TestPartResult&amp; test_part_result) = 0;</div><div class="line"><a name="l15703"></a><span class="lineno">15703</span>&#160;</div><div class="line"><a name="l15704"></a><span class="lineno">15704</span>&#160; <span class="comment">// Fired after the test ends.</span></div><div class="line"><a name="l15705"></a><span class="lineno">15705</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#abb1c44525ef038500608b5dc2f17099b">OnTestEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>&amp; test_info) = 0;</div><div class="line"><a name="l15706"></a><span class="lineno">15706</span>&#160;</div><div class="line"><a name="l15707"></a><span class="lineno">15707</span>&#160; <span class="comment">// Fired after the test suite ends.</span></div><div class="line"><a name="l15708"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html#a841e522e537bb858d21eb75d0228d3b5">15708</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a841e522e537bb858d21eb75d0228d3b5">OnTestSuiteEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>&amp; test_suite) {}</div><div class="line"><a name="l15709"></a><span class="lineno">15709</span>&#160;</div><div class="line"><a name="l15710"></a><span class="lineno">15710</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15711"></a><span class="lineno">15711</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15712"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listener.html#a76dbb7c3868d1c9abb957faee2568c0b">15712</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a76dbb7c3868d1c9abb957faee2568c0b">OnTestCaseEnd</a>(<span class="keyword">const</span> TestCase&amp; test_case) {}</div><div class="line"><a name="l15713"></a><span class="lineno">15713</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15714"></a><span class="lineno">15714</span>&#160;</div><div class="line"><a name="l15715"></a><span class="lineno">15715</span>&#160; <span class="comment">// Fired before environment tear-down for each iteration of tests starts.</span></div><div class="line"><a name="l15716"></a><span class="lineno">15716</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a468b5e6701bcb86cb2c956caadbba5e4">OnEnvironmentsTearDownStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15717"></a><span class="lineno">15717</span>&#160;</div><div class="line"><a name="l15718"></a><span class="lineno">15718</span>&#160; <span class="comment">// Fired after environment tear-down for each iteration of tests ends.</span></div><div class="line"><a name="l15719"></a><span class="lineno">15719</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a9ea04fa7f447865ba76df35e12ba2092">OnEnvironmentsTearDownEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15720"></a><span class="lineno">15720</span>&#160;</div><div class="line"><a name="l15721"></a><span class="lineno">15721</span>&#160; <span class="comment">// Fired after each iteration of tests finishes.</span></div><div class="line"><a name="l15722"></a><span class="lineno">15722</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#a550fdb3e55726e4cefa09f5697941425">OnTestIterationEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test,</div><div class="line"><a name="l15723"></a><span class="lineno">15723</span>&#160; <span class="keywordtype">int</span> iteration) = 0;</div><div class="line"><a name="l15724"></a><span class="lineno">15724</span>&#160;</div><div class="line"><a name="l15725"></a><span class="lineno">15725</span>&#160; <span class="comment">// Fired after all test activities have ended.</span></div><div class="line"><a name="l15726"></a><span class="lineno">15726</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_test_event_listener.html#ad15b6246d94c268e233487a86463ef3d">OnTestProgramEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; unit_test) = 0;</div><div class="line"><a name="l15727"></a><span class="lineno">15727</span>&#160;};</div><div class="line"><a name="l15728"></a><span class="lineno">15728</span>&#160;</div><div class="line"><a name="l15729"></a><span class="lineno">15729</span>&#160;<span class="comment">// The convenience class for users who need to override just one or two</span></div><div class="line"><a name="l15730"></a><span class="lineno">15730</span>&#160;<span class="comment">// methods and are not concerned that a possible change to a signature of</span></div><div class="line"><a name="l15731"></a><span class="lineno">15731</span>&#160;<span class="comment">// the methods they override will not be caught during the build. For</span></div><div class="line"><a name="l15732"></a><span class="lineno">15732</span>&#160;<span class="comment">// comments about each method please see the definition of TestEventListener</span></div><div class="line"><a name="l15733"></a><span class="lineno">15733</span>&#160;<span class="comment">// above.</span></div><div class="line"><a name="l15734"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html">15734</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1_empty_test_event_listener.html">EmptyTestEventListener</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a> {</div><div class="line"><a name="l15735"></a><span class="lineno">15735</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15736"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#ac3f5033fcd82080edb45f546ce9854fe">15736</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#ac3f5033fcd82080edb45f546ce9854fe">OnTestProgramStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15737"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a31edf103561e8b4d747656bc2d927661">15737</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a31edf103561e8b4d747656bc2d927661">OnTestIterationStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>,</div><div class="line"><a name="l15738"></a><span class="lineno">15738</span>&#160; <span class="keywordtype">int</span> <span class="comment">/*iteration*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15739"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a6e498ae763ac8c1a46bd861e0b7ff3f5">15739</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a6e498ae763ac8c1a46bd861e0b7ff3f5">OnEnvironmentsSetUpStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15740"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a9b4e781c0b38065a55c2fd163724ba69">15740</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a9b4e781c0b38065a55c2fd163724ba69">OnEnvironmentsSetUpEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15741"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a1e32e4bd4857822b6b50e6900aa5c651">15741</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a1e32e4bd4857822b6b50e6900aa5c651">OnTestSuiteStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>&amp; <span class="comment">/*test_suite*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15742"></a><span class="lineno">15742</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15743"></a><span class="lineno">15743</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15744"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#aa1fd7d378f2cdde00a4f8a2f4efb95b4">15744</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#aa1fd7d378f2cdde00a4f8a2f4efb95b4">OnTestCaseStart</a>(<span class="keyword">const</span> TestCase&amp; tc <span class="comment">/*test_suite*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15745"></a><span class="lineno">15745</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15746"></a><span class="lineno">15746</span>&#160;</div><div class="line"><a name="l15747"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a1d8c7f3f1f92826f668edae1bc5aadf4">15747</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a1d8c7f3f1f92826f668edae1bc5aadf4">OnTestStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>&amp; <span class="comment">/*test_info*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15748"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#ab95992f0a0b3741d59a24c3a7115fa60">15748</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#ab95992f0a0b3741d59a24c3a7115fa60">OnTestPartResult</a>(<span class="keyword">const</span> TestPartResult&amp; <span class="comment">/*test_part_result*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15749"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a709d7077c086c877d214231bc520ef90">15749</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a709d7077c086c877d214231bc520ef90">OnTestEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>&amp; <span class="comment">/*test_info*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15750"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#aefdb73682d290791461e186d864db718">15750</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#aefdb73682d290791461e186d864db718">OnTestSuiteEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>&amp; <span class="comment">/*test_suite*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15751"></a><span class="lineno">15751</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15752"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a166bcf075f37bfe14f912d2def55f61a">15752</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a166bcf075f37bfe14f912d2def55f61a">OnTestCaseEnd</a>(<span class="keyword">const</span> TestCase&amp; tc <span class="comment">/*test_suite*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15753"></a><span class="lineno">15753</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15754"></a><span class="lineno">15754</span>&#160;</div><div class="line"><a name="l15755"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#a320780451eac9178434b7c77d948ecbd">15755</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#a320780451eac9178434b7c77d948ecbd">OnEnvironmentsTearDownStart</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15756"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#ad9984052e82c3ae26395a2d9480326d2">15756</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#ad9984052e82c3ae26395a2d9480326d2">OnEnvironmentsTearDownEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15757"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#aae9c5c61e476f0c421402fb1dde434d2">15757</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#aae9c5c61e476f0c421402fb1dde434d2">OnTestIterationEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>,</div><div class="line"><a name="l15758"></a><span class="lineno">15758</span>&#160; <span class="keywordtype">int</span> <span class="comment">/*iteration*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15759"></a><span class="lineno"><a class="line" href="classtesting_1_1_empty_test_event_listener.html#aaa9d683e8e0c850af67a0b92d785ddb9">15759</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classtesting_1_1_empty_test_event_listener.html#aaa9d683e8e0c850af67a0b92d785ddb9">OnTestProgramEnd</a>(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>&amp; <span class="comment">/*unit_test*/</span>)<span class="keyword"> override </span>{}</div><div class="line"><a name="l15760"></a><span class="lineno">15760</span>&#160;};</div><div class="line"><a name="l15761"></a><span class="lineno">15761</span>&#160;</div><div class="line"><a name="l15762"></a><span class="lineno">15762</span>&#160;<span class="comment">// TestEventListeners lets users add listeners to track events in Google Test.</span></div><div class="line"><a name="l15763"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html">15763</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_test_event_listeners.html">TestEventListeners</a> {</div><div class="line"><a name="l15764"></a><span class="lineno">15764</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15765"></a><span class="lineno">15765</span>&#160; <a class="code" href="classtesting_1_1_test_event_listeners.html">TestEventListeners</a>();</div><div class="line"><a name="l15766"></a><span class="lineno">15766</span>&#160; ~<a class="code" href="classtesting_1_1_test_event_listeners.html">TestEventListeners</a>();</div><div class="line"><a name="l15767"></a><span class="lineno">15767</span>&#160;</div><div class="line"><a name="l15768"></a><span class="lineno">15768</span>&#160; <span class="comment">// Appends an event listener to the end of the list. Google Test assumes</span></div><div class="line"><a name="l15769"></a><span class="lineno">15769</span>&#160; <span class="comment">// the ownership of the listener (i.e. it will delete the listener when</span></div><div class="line"><a name="l15770"></a><span class="lineno">15770</span>&#160; <span class="comment">// the test program finishes).</span></div><div class="line"><a name="l15771"></a><span class="lineno">15771</span>&#160; <span class="keywordtype">void</span> Append(<a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* listener);</div><div class="line"><a name="l15772"></a><span class="lineno">15772</span>&#160;</div><div class="line"><a name="l15773"></a><span class="lineno">15773</span>&#160; <span class="comment">// Removes the given event listener from the list and returns it. It then</span></div><div class="line"><a name="l15774"></a><span class="lineno">15774</span>&#160; <span class="comment">// becomes the caller&#39;s responsibility to delete the listener. Returns</span></div><div class="line"><a name="l15775"></a><span class="lineno">15775</span>&#160; <span class="comment">// NULL if the listener is not found in the list.</span></div><div class="line"><a name="l15776"></a><span class="lineno">15776</span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* Release(<a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* listener);</div><div class="line"><a name="l15777"></a><span class="lineno">15777</span>&#160;</div><div class="line"><a name="l15778"></a><span class="lineno">15778</span>&#160; <span class="comment">// Returns the standard listener responsible for the default console</span></div><div class="line"><a name="l15779"></a><span class="lineno">15779</span>&#160; <span class="comment">// output. Can be removed from the listeners list to shut down default</span></div><div class="line"><a name="l15780"></a><span class="lineno">15780</span>&#160; <span class="comment">// console output. Note that removing this object from the listener list</span></div><div class="line"><a name="l15781"></a><span class="lineno">15781</span>&#160; <span class="comment">// with Release transfers its ownership to the caller and makes this</span></div><div class="line"><a name="l15782"></a><span class="lineno">15782</span>&#160; <span class="comment">// function return NULL the next time.</span></div><div class="line"><a name="l15783"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#a6293443acb5af942eeec638b6aa6dcf2">15783</a></span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* <a class="code" href="classtesting_1_1_test_event_listeners.html#a6293443acb5af942eeec638b6aa6dcf2">default_result_printer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15784"></a><span class="lineno">15784</span>&#160; <span class="keywordflow">return</span> default_result_printer_;</div><div class="line"><a name="l15785"></a><span class="lineno">15785</span>&#160; }</div><div class="line"><a name="l15786"></a><span class="lineno">15786</span>&#160;</div><div class="line"><a name="l15787"></a><span class="lineno">15787</span>&#160; <span class="comment">// Returns the standard listener responsible for the default XML output</span></div><div class="line"><a name="l15788"></a><span class="lineno">15788</span>&#160; <span class="comment">// controlled by the --gtest_output=xml flag. Can be removed from the</span></div><div class="line"><a name="l15789"></a><span class="lineno">15789</span>&#160; <span class="comment">// listeners list by users who want to shut down the default XML output</span></div><div class="line"><a name="l15790"></a><span class="lineno">15790</span>&#160; <span class="comment">// controlled by this flag and substitute it with custom one. Note that</span></div><div class="line"><a name="l15791"></a><span class="lineno">15791</span>&#160; <span class="comment">// removing this object from the listener list with Release transfers its</span></div><div class="line"><a name="l15792"></a><span class="lineno">15792</span>&#160; <span class="comment">// ownership to the caller and makes this function return NULL the next</span></div><div class="line"><a name="l15793"></a><span class="lineno">15793</span>&#160; <span class="comment">// time.</span></div><div class="line"><a name="l15794"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#aa880de6ddfc3f5824371853c6846abbd">15794</a></span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* <a class="code" href="classtesting_1_1_test_event_listeners.html#aa880de6ddfc3f5824371853c6846abbd">default_xml_generator</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l15795"></a><span class="lineno">15795</span>&#160; <span class="keywordflow">return</span> default_xml_generator_;</div><div class="line"><a name="l15796"></a><span class="lineno">15796</span>&#160; }</div><div class="line"><a name="l15797"></a><span class="lineno">15797</span>&#160;</div><div class="line"><a name="l15798"></a><span class="lineno">15798</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15799"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#ab9aaba231fd11196425e75caf709bfc6">15799</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>;</div><div class="line"><a name="l15800"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#a4c49c2cdb6c328e6b709b4542f23de3c">15800</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>;</div><div class="line"><a name="l15801"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#abae39633da9932847b41cb80efd62115">15801</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::DefaultGlobalTestPartResultReporter;</div><div class="line"><a name="l15802"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#afddba49fdf3f493532b4d5efb9814f4e">15802</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::NoExecDeathTest;</div><div class="line"><a name="l15803"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#addbc107b6b445617c880182bd4f44cf9">15803</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::TestEventListenersAccessor;</div><div class="line"><a name="l15804"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_event_listeners.html#acc0a5e7573fd6ae7ad1878613bb86853">15804</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::UnitTestImpl;</div><div class="line"><a name="l15805"></a><span class="lineno">15805</span>&#160;</div><div class="line"><a name="l15806"></a><span class="lineno">15806</span>&#160; <span class="comment">// Returns repeater that broadcasts the TestEventListener events to all</span></div><div class="line"><a name="l15807"></a><span class="lineno">15807</span>&#160; <span class="comment">// subscribers.</span></div><div class="line"><a name="l15808"></a><span class="lineno">15808</span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* repeater();</div><div class="line"><a name="l15809"></a><span class="lineno">15809</span>&#160;</div><div class="line"><a name="l15810"></a><span class="lineno">15810</span>&#160; <span class="comment">// Sets the default_result_printer attribute to the provided listener.</span></div><div class="line"><a name="l15811"></a><span class="lineno">15811</span>&#160; <span class="comment">// The listener is also added to the listener list and previous</span></div><div class="line"><a name="l15812"></a><span class="lineno">15812</span>&#160; <span class="comment">// default_result_printer is removed from it and deleted. The listener can</span></div><div class="line"><a name="l15813"></a><span class="lineno">15813</span>&#160; <span class="comment">// also be NULL in which case it will not be added to the list. Does</span></div><div class="line"><a name="l15814"></a><span class="lineno">15814</span>&#160; <span class="comment">// nothing if the previous and the current listener objects are the same.</span></div><div class="line"><a name="l15815"></a><span class="lineno">15815</span>&#160; <span class="keywordtype">void</span> SetDefaultResultPrinter(<a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* listener);</div><div class="line"><a name="l15816"></a><span class="lineno">15816</span>&#160;</div><div class="line"><a name="l15817"></a><span class="lineno">15817</span>&#160; <span class="comment">// Sets the default_xml_generator attribute to the provided listener. The</span></div><div class="line"><a name="l15818"></a><span class="lineno">15818</span>&#160; <span class="comment">// listener is also added to the listener list and previous</span></div><div class="line"><a name="l15819"></a><span class="lineno">15819</span>&#160; <span class="comment">// default_xml_generator is removed from it and deleted. The listener can</span></div><div class="line"><a name="l15820"></a><span class="lineno">15820</span>&#160; <span class="comment">// also be NULL in which case it will not be added to the list. Does</span></div><div class="line"><a name="l15821"></a><span class="lineno">15821</span>&#160; <span class="comment">// nothing if the previous and the current listener objects are the same.</span></div><div class="line"><a name="l15822"></a><span class="lineno">15822</span>&#160; <span class="keywordtype">void</span> SetDefaultXmlGenerator(<a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* listener);</div><div class="line"><a name="l15823"></a><span class="lineno">15823</span>&#160;</div><div class="line"><a name="l15824"></a><span class="lineno">15824</span>&#160; <span class="comment">// Controls whether events will be forwarded by the repeater to the</span></div><div class="line"><a name="l15825"></a><span class="lineno">15825</span>&#160; <span class="comment">// listeners in the list.</span></div><div class="line"><a name="l15826"></a><span class="lineno">15826</span>&#160; <span class="keywordtype">bool</span> EventForwardingEnabled() <span class="keyword">const</span>;</div><div class="line"><a name="l15827"></a><span class="lineno">15827</span>&#160; <span class="keywordtype">void</span> SuppressEventForwarding();</div><div class="line"><a name="l15828"></a><span class="lineno">15828</span>&#160;</div><div class="line"><a name="l15829"></a><span class="lineno">15829</span>&#160; <span class="comment">// The actual list of listeners.</span></div><div class="line"><a name="l15830"></a><span class="lineno">15830</span>&#160; internal::TestEventRepeater* repeater_;</div><div class="line"><a name="l15831"></a><span class="lineno">15831</span>&#160; <span class="comment">// Listener responsible for the standard result output.</span></div><div class="line"><a name="l15832"></a><span class="lineno">15832</span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* default_result_printer_;</div><div class="line"><a name="l15833"></a><span class="lineno">15833</span>&#160; <span class="comment">// Listener responsible for the creation of the XML output file.</span></div><div class="line"><a name="l15834"></a><span class="lineno">15834</span>&#160; <a class="code" href="classtesting_1_1_test_event_listener.html">TestEventListener</a>* default_xml_generator_;</div><div class="line"><a name="l15835"></a><span class="lineno">15835</span>&#160;</div><div class="line"><a name="l15836"></a><span class="lineno">15836</span>&#160; <span class="comment">// We disallow copying TestEventListeners.</span></div><div class="line"><a name="l15837"></a><span class="lineno">15837</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1_test_event_listeners.html">TestEventListeners</a>);</div><div class="line"><a name="l15838"></a><span class="lineno">15838</span>&#160;};</div><div class="line"><a name="l15839"></a><span class="lineno">15839</span>&#160;</div><div class="line"><a name="l15840"></a><span class="lineno">15840</span>&#160;<span class="comment">// A UnitTest consists of a vector of TestSuites.</span></div><div class="line"><a name="l15841"></a><span class="lineno">15841</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15842"></a><span class="lineno">15842</span>&#160;<span class="comment">// This is a singleton class. The only instance of UnitTest is</span></div><div class="line"><a name="l15843"></a><span class="lineno">15843</span>&#160;<span class="comment">// created when UnitTest::GetInstance() is first called. This</span></div><div class="line"><a name="l15844"></a><span class="lineno">15844</span>&#160;<span class="comment">// instance is never deleted.</span></div><div class="line"><a name="l15845"></a><span class="lineno">15845</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15846"></a><span class="lineno">15846</span>&#160;<span class="comment">// UnitTest is not copyable.</span></div><div class="line"><a name="l15847"></a><span class="lineno">15847</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l15848"></a><span class="lineno">15848</span>&#160;<span class="comment">// This class is thread-safe as long as the methods are called</span></div><div class="line"><a name="l15849"></a><span class="lineno">15849</span>&#160;<span class="comment">// according to their specification.</span></div><div class="line"><a name="l15850"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html">15850</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a> {</div><div class="line"><a name="l15851"></a><span class="lineno">15851</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l15852"></a><span class="lineno">15852</span>&#160; <span class="comment">// Gets the singleton UnitTest object. The first time this method</span></div><div class="line"><a name="l15853"></a><span class="lineno">15853</span>&#160; <span class="comment">// is called, a UnitTest object is constructed and returned.</span></div><div class="line"><a name="l15854"></a><span class="lineno">15854</span>&#160; <span class="comment">// Consecutive calls will return the same object.</span></div><div class="line"><a name="l15855"></a><span class="lineno">15855</span>&#160; <span class="keyword">static</span> <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>* GetInstance();</div><div class="line"><a name="l15856"></a><span class="lineno">15856</span>&#160;</div><div class="line"><a name="l15857"></a><span class="lineno">15857</span>&#160; <span class="comment">// Runs all tests in this UnitTest object and prints the result.</span></div><div class="line"><a name="l15858"></a><span class="lineno">15858</span>&#160; <span class="comment">// Returns 0 if successful, or 1 otherwise.</span></div><div class="line"><a name="l15859"></a><span class="lineno">15859</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15860"></a><span class="lineno">15860</span>&#160; <span class="comment">// This method can only be called from the main thread.</span></div><div class="line"><a name="l15861"></a><span class="lineno">15861</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15862"></a><span class="lineno">15862</span>&#160; <span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l15863"></a><span class="lineno">15863</span>&#160; <span class="keywordtype">int</span> Run() <a class="code" href="gtest_8h.html#a8e5aab8276b2645f64f41c9e3021b935">GTEST_MUST_USE_RESULT_</a>;</div><div class="line"><a name="l15864"></a><span class="lineno">15864</span>&#160;</div><div class="line"><a name="l15865"></a><span class="lineno">15865</span>&#160; <span class="comment">// Returns the working directory when the first TEST() or TEST_F()</span></div><div class="line"><a name="l15866"></a><span class="lineno">15866</span>&#160; <span class="comment">// was executed. The UnitTest object owns the string.</span></div><div class="line"><a name="l15867"></a><span class="lineno">15867</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* original_working_dir() <span class="keyword">const</span>;</div><div class="line"><a name="l15868"></a><span class="lineno">15868</span>&#160;</div><div class="line"><a name="l15869"></a><span class="lineno">15869</span>&#160; <span class="comment">// Returns the TestSuite object for the test that&#39;s currently running,</span></div><div class="line"><a name="l15870"></a><span class="lineno">15870</span>&#160; <span class="comment">// or NULL if no test is running.</span></div><div class="line"><a name="l15871"></a><span class="lineno">15871</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>* current_test_suite() <span class="keyword">const</span> <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l15872"></a><span class="lineno">15872</span>&#160;</div><div class="line"><a name="l15873"></a><span class="lineno">15873</span>&#160;<span class="comment">// Legacy API is still available but deprecated</span></div><div class="line"><a name="l15874"></a><span class="lineno">15874</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15875"></a><span class="lineno">15875</span>&#160; <span class="keyword">const</span> TestCase* current_test_case() <span class="keyword">const</span> <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l15876"></a><span class="lineno">15876</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l15877"></a><span class="lineno">15877</span>&#160;</div><div class="line"><a name="l15878"></a><span class="lineno">15878</span>&#160; <span class="comment">// Returns the TestInfo object for the test that&#39;s currently running,</span></div><div class="line"><a name="l15879"></a><span class="lineno">15879</span>&#160; <span class="comment">// or NULL if no test is running.</span></div><div class="line"><a name="l15880"></a><span class="lineno">15880</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* current_test_info() <span class="keyword">const</span></div><div class="line"><a name="l15881"></a><span class="lineno">15881</span>&#160; <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l15882"></a><span class="lineno">15882</span>&#160;</div><div class="line"><a name="l15883"></a><span class="lineno">15883</span>&#160; <span class="comment">// Returns the random seed used at the start of the current test run.</span></div><div class="line"><a name="l15884"></a><span class="lineno">15884</span>&#160; <span class="keywordtype">int</span> random_seed() <span class="keyword">const</span>;</div><div class="line"><a name="l15885"></a><span class="lineno">15885</span>&#160;</div><div class="line"><a name="l15886"></a><span class="lineno">15886</span>&#160; <span class="comment">// Returns the ParameterizedTestSuiteRegistry object used to keep track of</span></div><div class="line"><a name="l15887"></a><span class="lineno">15887</span>&#160; <span class="comment">// value-parameterized tests and instantiate and register them.</span></div><div class="line"><a name="l15888"></a><span class="lineno">15888</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15889"></a><span class="lineno">15889</span>&#160; <span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l15890"></a><span class="lineno">15890</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html">internal::ParameterizedTestSuiteRegistry</a>&amp; parameterized_test_registry()</div><div class="line"><a name="l15891"></a><span class="lineno">15891</span>&#160; <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l15892"></a><span class="lineno">15892</span>&#160;</div><div class="line"><a name="l15893"></a><span class="lineno">15893</span>&#160; <span class="comment">// Gets the number of successful test suites.</span></div><div class="line"><a name="l15894"></a><span class="lineno">15894</span>&#160; <span class="keywordtype">int</span> successful_test_suite_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15895"></a><span class="lineno">15895</span>&#160;</div><div class="line"><a name="l15896"></a><span class="lineno">15896</span>&#160; <span class="comment">// Gets the number of failed test suites.</span></div><div class="line"><a name="l15897"></a><span class="lineno">15897</span>&#160; <span class="keywordtype">int</span> failed_test_suite_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15898"></a><span class="lineno">15898</span>&#160;</div><div class="line"><a name="l15899"></a><span class="lineno">15899</span>&#160; <span class="comment">// Gets the number of all test suites.</span></div><div class="line"><a name="l15900"></a><span class="lineno">15900</span>&#160; <span class="keywordtype">int</span> total_test_suite_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15901"></a><span class="lineno">15901</span>&#160;</div><div class="line"><a name="l15902"></a><span class="lineno">15902</span>&#160; <span class="comment">// Gets the number of all test suites that contain at least one test</span></div><div class="line"><a name="l15903"></a><span class="lineno">15903</span>&#160; <span class="comment">// that should run.</span></div><div class="line"><a name="l15904"></a><span class="lineno">15904</span>&#160; <span class="keywordtype">int</span> test_suite_to_run_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15905"></a><span class="lineno">15905</span>&#160;</div><div class="line"><a name="l15906"></a><span class="lineno">15906</span>&#160; <span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15907"></a><span class="lineno">15907</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15908"></a><span class="lineno">15908</span>&#160; <span class="keywordtype">int</span> successful_test_case_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15909"></a><span class="lineno">15909</span>&#160; <span class="keywordtype">int</span> failed_test_case_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15910"></a><span class="lineno">15910</span>&#160; <span class="keywordtype">int</span> total_test_case_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15911"></a><span class="lineno">15911</span>&#160; <span class="keywordtype">int</span> test_case_to_run_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15912"></a><span class="lineno">15912</span>&#160;<span class="preprocessor">#endif // EMOVE_LEGACY_TEST_CASEAPI</span></div><div class="line"><a name="l15913"></a><span class="lineno">15913</span>&#160;</div><div class="line"><a name="l15914"></a><span class="lineno">15914</span>&#160; <span class="comment">// Gets the number of successful tests.</span></div><div class="line"><a name="l15915"></a><span class="lineno">15915</span>&#160; <span class="keywordtype">int</span> successful_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15916"></a><span class="lineno">15916</span>&#160;</div><div class="line"><a name="l15917"></a><span class="lineno">15917</span>&#160; <span class="comment">// Gets the number of skipped tests.</span></div><div class="line"><a name="l15918"></a><span class="lineno">15918</span>&#160; <span class="keywordtype">int</span> skipped_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15919"></a><span class="lineno">15919</span>&#160;</div><div class="line"><a name="l15920"></a><span class="lineno">15920</span>&#160; <span class="comment">// Gets the number of failed tests.</span></div><div class="line"><a name="l15921"></a><span class="lineno">15921</span>&#160; <span class="keywordtype">int</span> failed_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15922"></a><span class="lineno">15922</span>&#160;</div><div class="line"><a name="l15923"></a><span class="lineno">15923</span>&#160; <span class="comment">// Gets the number of disabled tests that will be reported in the XML report.</span></div><div class="line"><a name="l15924"></a><span class="lineno">15924</span>&#160; <span class="keywordtype">int</span> reportable_disabled_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15925"></a><span class="lineno">15925</span>&#160;</div><div class="line"><a name="l15926"></a><span class="lineno">15926</span>&#160; <span class="comment">// Gets the number of disabled tests.</span></div><div class="line"><a name="l15927"></a><span class="lineno">15927</span>&#160; <span class="keywordtype">int</span> disabled_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15928"></a><span class="lineno">15928</span>&#160;</div><div class="line"><a name="l15929"></a><span class="lineno">15929</span>&#160; <span class="comment">// Gets the number of tests to be printed in the XML report.</span></div><div class="line"><a name="l15930"></a><span class="lineno">15930</span>&#160; <span class="keywordtype">int</span> reportable_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15931"></a><span class="lineno">15931</span>&#160;</div><div class="line"><a name="l15932"></a><span class="lineno">15932</span>&#160; <span class="comment">// Gets the number of all tests.</span></div><div class="line"><a name="l15933"></a><span class="lineno">15933</span>&#160; <span class="keywordtype">int</span> total_test_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15934"></a><span class="lineno">15934</span>&#160;</div><div class="line"><a name="l15935"></a><span class="lineno">15935</span>&#160; <span class="comment">// Gets the number of tests that should run.</span></div><div class="line"><a name="l15936"></a><span class="lineno">15936</span>&#160; <span class="keywordtype">int</span> test_to_run_count() <span class="keyword">const</span>;</div><div class="line"><a name="l15937"></a><span class="lineno">15937</span>&#160;</div><div class="line"><a name="l15938"></a><span class="lineno">15938</span>&#160; <span class="comment">// Gets the time of the test program start, in ms from the start of the</span></div><div class="line"><a name="l15939"></a><span class="lineno">15939</span>&#160; <span class="comment">// UNIX epoch.</span></div><div class="line"><a name="l15940"></a><span class="lineno">15940</span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> start_timestamp() <span class="keyword">const</span>;</div><div class="line"><a name="l15941"></a><span class="lineno">15941</span>&#160;</div><div class="line"><a name="l15942"></a><span class="lineno">15942</span>&#160; <span class="comment">// Gets the elapsed time, in milliseconds.</span></div><div class="line"><a name="l15943"></a><span class="lineno">15943</span>&#160; <a class="code" href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">TimeInMillis</a> elapsed_time() <span class="keyword">const</span>;</div><div class="line"><a name="l15944"></a><span class="lineno">15944</span>&#160;</div><div class="line"><a name="l15945"></a><span class="lineno">15945</span>&#160; <span class="comment">// Returns true iff the unit test passed (i.e. all test suites passed).</span></div><div class="line"><a name="l15946"></a><span class="lineno">15946</span>&#160; <span class="keywordtype">bool</span> Passed() <span class="keyword">const</span>;</div><div class="line"><a name="l15947"></a><span class="lineno">15947</span>&#160;</div><div class="line"><a name="l15948"></a><span class="lineno">15948</span>&#160; <span class="comment">// Returns true iff the unit test failed (i.e. some test suite failed</span></div><div class="line"><a name="l15949"></a><span class="lineno">15949</span>&#160; <span class="comment">// or something outside of all tests failed).</span></div><div class="line"><a name="l15950"></a><span class="lineno">15950</span>&#160; <span class="keywordtype">bool</span> Failed() <span class="keyword">const</span>;</div><div class="line"><a name="l15951"></a><span class="lineno">15951</span>&#160;</div><div class="line"><a name="l15952"></a><span class="lineno">15952</span>&#160; <span class="comment">// Gets the i-th test suite among all the test suites. i can range from 0 to</span></div><div class="line"><a name="l15953"></a><span class="lineno">15953</span>&#160; <span class="comment">// total_test_suite_count() - 1. If i is not in that range, returns NULL.</span></div><div class="line"><a name="l15954"></a><span class="lineno">15954</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>* GetTestSuite(<span class="keywordtype">int</span> i) <span class="keyword">const</span>;</div><div class="line"><a name="l15955"></a><span class="lineno">15955</span>&#160;</div><div class="line"><a name="l15956"></a><span class="lineno">15956</span>&#160;<span class="comment">// Legacy API is deprecated but still available</span></div><div class="line"><a name="l15957"></a><span class="lineno">15957</span>&#160;<span class="preprocessor">#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15958"></a><span class="lineno">15958</span>&#160; <span class="keyword">const</span> TestCase* GetTestCase(<span class="keywordtype">int</span> i) <span class="keyword">const</span>;</div><div class="line"><a name="l15959"></a><span class="lineno">15959</span>&#160;<span class="preprocessor">#endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_</span></div><div class="line"><a name="l15960"></a><span class="lineno">15960</span>&#160;</div><div class="line"><a name="l15961"></a><span class="lineno">15961</span>&#160; <span class="comment">// Returns the TestResult containing information on test failures and</span></div><div class="line"><a name="l15962"></a><span class="lineno">15962</span>&#160; <span class="comment">// properties logged outside of individual test suites.</span></div><div class="line"><a name="l15963"></a><span class="lineno">15963</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1_test_result.html">TestResult</a>&amp; ad_hoc_test_result() <span class="keyword">const</span>;</div><div class="line"><a name="l15964"></a><span class="lineno">15964</span>&#160;</div><div class="line"><a name="l15965"></a><span class="lineno">15965</span>&#160; <span class="comment">// Returns the list of event listeners that can be used to track events</span></div><div class="line"><a name="l15966"></a><span class="lineno">15966</span>&#160; <span class="comment">// inside Google Test.</span></div><div class="line"><a name="l15967"></a><span class="lineno">15967</span>&#160; <a class="code" href="classtesting_1_1_test_event_listeners.html">TestEventListeners</a>&amp; listeners();</div><div class="line"><a name="l15968"></a><span class="lineno">15968</span>&#160;</div><div class="line"><a name="l15969"></a><span class="lineno">15969</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l15970"></a><span class="lineno">15970</span>&#160; <span class="comment">// Registers and returns a global test environment. When a test</span></div><div class="line"><a name="l15971"></a><span class="lineno">15971</span>&#160; <span class="comment">// program is run, all global test environments will be set-up in</span></div><div class="line"><a name="l15972"></a><span class="lineno">15972</span>&#160; <span class="comment">// the order they were registered. After all tests in the program</span></div><div class="line"><a name="l15973"></a><span class="lineno">15973</span>&#160; <span class="comment">// have finished, all global test environments will be torn-down in</span></div><div class="line"><a name="l15974"></a><span class="lineno">15974</span>&#160; <span class="comment">// the *reverse* order they were registered.</span></div><div class="line"><a name="l15975"></a><span class="lineno">15975</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15976"></a><span class="lineno">15976</span>&#160; <span class="comment">// The UnitTest object takes ownership of the given environment.</span></div><div class="line"><a name="l15977"></a><span class="lineno">15977</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l15978"></a><span class="lineno">15978</span>&#160; <span class="comment">// This method can only be called from the main thread.</span></div><div class="line"><a name="l15979"></a><span class="lineno">15979</span>&#160; <a class="code" href="classtesting_1_1_environment.html">Environment</a>* AddEnvironment(<a class="code" href="classtesting_1_1_environment.html">Environment</a>* env);</div><div class="line"><a name="l15980"></a><span class="lineno">15980</span>&#160;</div><div class="line"><a name="l15981"></a><span class="lineno">15981</span>&#160; <span class="comment">// Adds a TestPartResult to the current TestResult object. All</span></div><div class="line"><a name="l15982"></a><span class="lineno">15982</span>&#160; <span class="comment">// Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)</span></div><div class="line"><a name="l15983"></a><span class="lineno">15983</span>&#160; <span class="comment">// eventually call this to report their results. The user code</span></div><div class="line"><a name="l15984"></a><span class="lineno">15984</span>&#160; <span class="comment">// should use the assertion macros instead of calling this directly.</span></div><div class="line"><a name="l15985"></a><span class="lineno">15985</span>&#160; <span class="keywordtype">void</span> AddTestPartResult(TestPartResult::Type result_type,</div><div class="line"><a name="l15986"></a><span class="lineno">15986</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file_name,</div><div class="line"><a name="l15987"></a><span class="lineno">15987</span>&#160; <span class="keywordtype">int</span> line_number,</div><div class="line"><a name="l15988"></a><span class="lineno">15988</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; message,</div><div class="line"><a name="l15989"></a><span class="lineno">15989</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; os_stack_trace)</div><div class="line"><a name="l15990"></a><span class="lineno">15990</span>&#160; <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l15991"></a><span class="lineno">15991</span>&#160;</div><div class="line"><a name="l15992"></a><span class="lineno">15992</span>&#160; <span class="comment">// Adds a TestProperty to the current TestResult object when invoked from</span></div><div class="line"><a name="l15993"></a><span class="lineno">15993</span>&#160; <span class="comment">// inside a test, to current TestSuite&#39;s ad_hoc_test_result_ when invoked</span></div><div class="line"><a name="l15994"></a><span class="lineno">15994</span>&#160; <span class="comment">// from SetUpTestSuite or TearDownTestSuite, or to the global property set</span></div><div class="line"><a name="l15995"></a><span class="lineno">15995</span>&#160; <span class="comment">// when invoked elsewhere. If the result already contains a property with</span></div><div class="line"><a name="l15996"></a><span class="lineno">15996</span>&#160; <span class="comment">// the same key, the value will be updated.</span></div><div class="line"><a name="l15997"></a><span class="lineno">15997</span>&#160; <span class="keywordtype">void</span> RecordProperty(<span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; key, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; value);</div><div class="line"><a name="l15998"></a><span class="lineno">15998</span>&#160;</div><div class="line"><a name="l15999"></a><span class="lineno">15999</span>&#160; <span class="comment">// Gets the i-th test suite among all the test suites. i can range from 0 to</span></div><div class="line"><a name="l16000"></a><span class="lineno">16000</span>&#160; <span class="comment">// total_test_suite_count() - 1. If i is not in that range, returns NULL.</span></div><div class="line"><a name="l16001"></a><span class="lineno">16001</span>&#160; <a class="code" href="classtesting_1_1_test_suite.html">TestSuite</a>* GetMutableTestSuite(<span class="keywordtype">int</span> i);</div><div class="line"><a name="l16002"></a><span class="lineno">16002</span>&#160;</div><div class="line"><a name="l16003"></a><span class="lineno">16003</span>&#160; <span class="comment">// Accessors for the implementation object.</span></div><div class="line"><a name="l16004"></a><span class="lineno">16004</span>&#160; internal::UnitTestImpl* impl() { <span class="keywordflow">return</span> impl_; }</div><div class="line"><a name="l16005"></a><span class="lineno">16005</span>&#160; <span class="keyword">const</span> internal::UnitTestImpl* impl()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> impl_; }</div><div class="line"><a name="l16006"></a><span class="lineno">16006</span>&#160;</div><div class="line"><a name="l16007"></a><span class="lineno">16007</span>&#160; <span class="comment">// These classes and functions are friends as they need to access private</span></div><div class="line"><a name="l16008"></a><span class="lineno">16008</span>&#160; <span class="comment">// members of UnitTest.</span></div><div class="line"><a name="l16009"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html#ada54bdd5bdc24f39b9ca16807326654a">16009</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_scoped_trace.html">ScopedTrace</a>;</div><div class="line"><a name="l16010"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html#a5b78b1c2e1fa07ffed92da365593eaa4">16010</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1_test.html">Test</a>;</div><div class="line"><a name="l16011"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html#a183151aa061362c87572e743fe233db1">16011</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_assert_helper.html">internal::AssertHelper</a>;</div><div class="line"><a name="l16012"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html#adc037d188dab349a94868991955c9cd4">16012</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::StreamingListenerTest;</div><div class="line"><a name="l16013"></a><span class="lineno"><a class="line" href="classtesting_1_1_unit_test.html#ae970f89a9f477a349fe5778be85ef42e">16013</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::UnitTestRecordPropertyTestHelper;</div><div class="line"><a name="l16014"></a><span class="lineno">16014</span>&#160; <span class="keyword">friend</span> <a class="code" href="classtesting_1_1_environment.html">Environment</a>* <a class="code" href="namespacetesting.html#a460d7b998622e332392c1e00be3a60d5">AddGlobalTestEnvironment</a>(<a class="code" href="classtesting_1_1_environment.html">Environment</a>* env);</div><div class="line"><a name="l16015"></a><span class="lineno">16015</span>&#160; <span class="keyword">friend</span> internal::UnitTestImpl* internal::GetUnitTestImpl();</div><div class="line"><a name="l16016"></a><span class="lineno">16016</span>&#160; <span class="keyword">friend</span> <span class="keywordtype">void</span> internal::ReportFailureInUnknownLocation(</div><div class="line"><a name="l16017"></a><span class="lineno">16017</span>&#160; TestPartResult::Type result_type,</div><div class="line"><a name="l16018"></a><span class="lineno">16018</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; message);</div><div class="line"><a name="l16019"></a><span class="lineno">16019</span>&#160;</div><div class="line"><a name="l16020"></a><span class="lineno">16020</span>&#160; <span class="comment">// Creates an empty UnitTest.</span></div><div class="line"><a name="l16021"></a><span class="lineno">16021</span>&#160; <a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>();</div><div class="line"><a name="l16022"></a><span class="lineno">16022</span>&#160;</div><div class="line"><a name="l16023"></a><span class="lineno">16023</span>&#160; <span class="comment">// D&#39;tor</span></div><div class="line"><a name="l16024"></a><span class="lineno">16024</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>();</div><div class="line"><a name="l16025"></a><span class="lineno">16025</span>&#160;</div><div class="line"><a name="l16026"></a><span class="lineno">16026</span>&#160; <span class="comment">// Pushes a trace defined by SCOPED_TRACE() on to the per-thread</span></div><div class="line"><a name="l16027"></a><span class="lineno">16027</span>&#160; <span class="comment">// Google Test trace stack.</span></div><div class="line"><a name="l16028"></a><span class="lineno">16028</span>&#160; <span class="keywordtype">void</span> PushGTestTrace(<span class="keyword">const</span> internal::TraceInfo&amp; trace)</div><div class="line"><a name="l16029"></a><span class="lineno">16029</span>&#160; <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l16030"></a><span class="lineno">16030</span>&#160;</div><div class="line"><a name="l16031"></a><span class="lineno">16031</span>&#160; <span class="comment">// Pops a trace from the per-thread Google Test trace stack.</span></div><div class="line"><a name="l16032"></a><span class="lineno">16032</span>&#160; <span class="keywordtype">void</span> PopGTestTrace()</div><div class="line"><a name="l16033"></a><span class="lineno">16033</span>&#160; <a class="code" href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a>(mutex_);</div><div class="line"><a name="l16034"></a><span class="lineno">16034</span>&#160;</div><div class="line"><a name="l16035"></a><span class="lineno">16035</span>&#160; <span class="comment">// Protects mutable state in *impl_. This is mutable as some const</span></div><div class="line"><a name="l16036"></a><span class="lineno">16036</span>&#160; <span class="comment">// methods need to lock it too.</span></div><div class="line"><a name="l16037"></a><span class="lineno">16037</span>&#160; mutable internal::Mutex mutex_;</div><div class="line"><a name="l16038"></a><span class="lineno">16038</span>&#160;</div><div class="line"><a name="l16039"></a><span class="lineno">16039</span>&#160; <span class="comment">// Opaque implementation object. This field is never changed once</span></div><div class="line"><a name="l16040"></a><span class="lineno">16040</span>&#160; <span class="comment">// the object is constructed. We don&#39;t mark it as const here, as</span></div><div class="line"><a name="l16041"></a><span class="lineno">16041</span>&#160; <span class="comment">// doing so will cause a warning in the constructor of UnitTest.</span></div><div class="line"><a name="l16042"></a><span class="lineno">16042</span>&#160; <span class="comment">// Mutable state in *impl_ is protected by mutex_.</span></div><div class="line"><a name="l16043"></a><span class="lineno">16043</span>&#160; internal::UnitTestImpl* impl_;</div><div class="line"><a name="l16044"></a><span class="lineno">16044</span>&#160;</div><div class="line"><a name="l16045"></a><span class="lineno">16045</span>&#160; <span class="comment">// We disallow copying UnitTest.</span></div><div class="line"><a name="l16046"></a><span class="lineno">16046</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1_unit_test.html">UnitTest</a>);</div><div class="line"><a name="l16047"></a><span class="lineno">16047</span>&#160;};</div><div class="line"><a name="l16048"></a><span class="lineno">16048</span>&#160;</div><div class="line"><a name="l16049"></a><span class="lineno">16049</span>&#160;<span class="comment">// A convenient wrapper for adding an environment for the test</span></div><div class="line"><a name="l16050"></a><span class="lineno">16050</span>&#160;<span class="comment">// program.</span></div><div class="line"><a name="l16051"></a><span class="lineno">16051</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16052"></a><span class="lineno">16052</span>&#160;<span class="comment">// You should call this before RUN_ALL_TESTS() is called, probably in</span></div><div class="line"><a name="l16053"></a><span class="lineno">16053</span>&#160;<span class="comment">// main(). If you use gtest_main, you need to call this before main()</span></div><div class="line"><a name="l16054"></a><span class="lineno">16054</span>&#160;<span class="comment">// starts for it to take effect. For example, you can define a global</span></div><div class="line"><a name="l16055"></a><span class="lineno">16055</span>&#160;<span class="comment">// variable like this:</span></div><div class="line"><a name="l16056"></a><span class="lineno">16056</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16057"></a><span class="lineno">16057</span>&#160;<span class="comment">// testing::Environment* const foo_env =</span></div><div class="line"><a name="l16058"></a><span class="lineno">16058</span>&#160;<span class="comment">// testing::AddGlobalTestEnvironment(new FooEnvironment);</span></div><div class="line"><a name="l16059"></a><span class="lineno">16059</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16060"></a><span class="lineno">16060</span>&#160;<span class="comment">// However, we strongly recommend you to write your own main() and</span></div><div class="line"><a name="l16061"></a><span class="lineno">16061</span>&#160;<span class="comment">// call AddGlobalTestEnvironment() there, as relying on initialization</span></div><div class="line"><a name="l16062"></a><span class="lineno">16062</span>&#160;<span class="comment">// of global variables makes the code harder to read and may cause</span></div><div class="line"><a name="l16063"></a><span class="lineno">16063</span>&#160;<span class="comment">// problems when you register multiple environments from different</span></div><div class="line"><a name="l16064"></a><span class="lineno">16064</span>&#160;<span class="comment">// translation units and the environments have dependencies among them</span></div><div class="line"><a name="l16065"></a><span class="lineno">16065</span>&#160;<span class="comment">// (remember that the compiler doesn&#39;t guarantee the order in which</span></div><div class="line"><a name="l16066"></a><span class="lineno">16066</span>&#160;<span class="comment">// global variables from different translation units are initialized).</span></div><div class="line"><a name="l16067"></a><span class="lineno"><a class="line" href="namespacetesting.html#a460d7b998622e332392c1e00be3a60d5">16067</a></span>&#160;inline <a class="code" href="classtesting_1_1_environment.html">Environment</a>* <a class="code" href="namespacetesting.html#a460d7b998622e332392c1e00be3a60d5">AddGlobalTestEnvironment</a>(<a class="code" href="classtesting_1_1_environment.html">Environment</a>* env) {</div><div class="line"><a name="l16068"></a><span class="lineno">16068</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classtesting_1_1_unit_test.html#af254e2e695471eb9f128bc556bae3668">UnitTest::GetInstance</a>()-&gt;AddEnvironment(env);</div><div class="line"><a name="l16069"></a><span class="lineno">16069</span>&#160;}</div><div class="line"><a name="l16070"></a><span class="lineno">16070</span>&#160;</div><div class="line"><a name="l16071"></a><span class="lineno">16071</span>&#160;<span class="comment">// Initializes Google Test. This must be called before calling</span></div><div class="line"><a name="l16072"></a><span class="lineno">16072</span>&#160;<span class="comment">// RUN_ALL_TESTS(). In particular, it parses a command line for the</span></div><div class="line"><a name="l16073"></a><span class="lineno">16073</span>&#160;<span class="comment">// flags that Google Test recognizes. Whenever a Google Test flag is</span></div><div class="line"><a name="l16074"></a><span class="lineno">16074</span>&#160;<span class="comment">// seen, it is removed from argv, and *argc is decremented.</span></div><div class="line"><a name="l16075"></a><span class="lineno">16075</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16076"></a><span class="lineno">16076</span>&#160;<span class="comment">// No value is returned. Instead, the Google Test flag variables are</span></div><div class="line"><a name="l16077"></a><span class="lineno">16077</span>&#160;<span class="comment">// updated.</span></div><div class="line"><a name="l16078"></a><span class="lineno">16078</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16079"></a><span class="lineno">16079</span>&#160;<span class="comment">// Calling the function for the second time has no user-visible effect.</span></div><div class="line"><a name="l16080"></a><span class="lineno">16080</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting.html#aee3f6f99df893f576f705f66c0559482">InitGoogleTest</a>(<span class="keywordtype">int</span>* argc, <span class="keywordtype">char</span>** argv);</div><div class="line"><a name="l16081"></a><span class="lineno">16081</span>&#160;</div><div class="line"><a name="l16082"></a><span class="lineno">16082</span>&#160;<span class="comment">// This overloaded version can be used in Windows programs compiled in</span></div><div class="line"><a name="l16083"></a><span class="lineno">16083</span>&#160;<span class="comment">// UNICODE mode.</span></div><div class="line"><a name="l16084"></a><span class="lineno">16084</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <span class="keywordtype">void</span> <a class="code" href="namespacetesting.html#aee3f6f99df893f576f705f66c0559482">InitGoogleTest</a>(<span class="keywordtype">int</span>* argc, <span class="keywordtype">wchar_t</span>** argv);</div><div class="line"><a name="l16085"></a><span class="lineno">16085</span>&#160;</div><div class="line"><a name="l16086"></a><span class="lineno">16086</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l16087"></a><span class="lineno">16087</span>&#160;</div><div class="line"><a name="l16088"></a><span class="lineno">16088</span>&#160;<span class="comment">// Separate the error generating code from the code path to reduce the stack</span></div><div class="line"><a name="l16089"></a><span class="lineno">16089</span>&#160;<span class="comment">// frame size of CmpHelperEQ. This helps reduce the overhead of some sanitizers</span></div><div class="line"><a name="l16090"></a><span class="lineno">16090</span>&#160;<span class="comment">// when calling EXPECT_* in a tight loop.</span></div><div class="line"><a name="l16091"></a><span class="lineno">16091</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16092"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a1def8ec9393360a1b34a20528703e7f7">16092</a></span>&#160;AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a1def8ec9393360a1b34a20528703e7f7">CmpHelperEQFailure</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16093"></a><span class="lineno">16093</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16094"></a><span class="lineno">16094</span>&#160; <span class="keyword">const</span> T1&amp; lhs, <span class="keyword">const</span> T2&amp; rhs) {</div><div class="line"><a name="l16095"></a><span class="lineno">16095</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#ac61e2ba2cbf259fd6ee5ffd4e49c9445">EqFailure</a>(lhs_expression,</div><div class="line"><a name="l16096"></a><span class="lineno">16096</span>&#160; rhs_expression,</div><div class="line"><a name="l16097"></a><span class="lineno">16097</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">FormatForComparisonFailureMessage</a>(lhs, rhs),</div><div class="line"><a name="l16098"></a><span class="lineno">16098</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">FormatForComparisonFailureMessage</a>(rhs, lhs),</div><div class="line"><a name="l16099"></a><span class="lineno">16099</span>&#160; <span class="keyword">false</span>);</div><div class="line"><a name="l16100"></a><span class="lineno">16100</span>&#160;}</div><div class="line"><a name="l16101"></a><span class="lineno">16101</span>&#160;</div><div class="line"><a name="l16102"></a><span class="lineno">16102</span>&#160;<span class="comment">// This block of code defines operator==/!=</span></div><div class="line"><a name="l16103"></a><span class="lineno">16103</span>&#160;<span class="comment">// to block lexical scope lookup.</span></div><div class="line"><a name="l16104"></a><span class="lineno">16104</span>&#160;<span class="comment">// It prevents using invalid operator==/!= defined at namespace scope.</span></div><div class="line"><a name="l16105"></a><span class="lineno"><a class="line" href="structtesting_1_1internal_1_1faketype.html">16105</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structtesting_1_1internal_1_1faketype.html">faketype</a> {};</div><div class="line"><a name="l16106"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a5e3e473798de3189e9343132bcfd4fea">16106</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#a5e3e473798de3189e9343132bcfd4fea">operator==</a>(<a class="code" href="structtesting_1_1internal_1_1faketype.html">faketype</a>, <a class="code" href="structtesting_1_1internal_1_1faketype.html">faketype</a>) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l16107"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#afa44fdec84edfc155ef63e4f0d4287cc">16107</a></span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespacetesting_1_1internal.html#afa44fdec84edfc155ef63e4f0d4287cc">operator!=</a>(<a class="code" href="structtesting_1_1internal_1_1faketype.html">faketype</a>, <a class="code" href="structtesting_1_1internal_1_1faketype.html">faketype</a>) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l16108"></a><span class="lineno">16108</span>&#160;</div><div class="line"><a name="l16109"></a><span class="lineno">16109</span>&#160;<span class="comment">// The helper function for {ASSERT|EXPECT}_EQ.</span></div><div class="line"><a name="l16110"></a><span class="lineno">16110</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16111"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a4638c74d9b32e971f9b321af6fafc2f1">16111</a></span>&#160;AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16112"></a><span class="lineno">16112</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16113"></a><span class="lineno">16113</span>&#160; <span class="keyword">const</span> T1&amp; lhs,</div><div class="line"><a name="l16114"></a><span class="lineno">16114</span>&#160; <span class="keyword">const</span> T2&amp; rhs) {</div><div class="line"><a name="l16115"></a><span class="lineno">16115</span>&#160; <span class="keywordflow">if</span> (lhs == rhs) {</div><div class="line"><a name="l16116"></a><span class="lineno">16116</span>&#160; <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l16117"></a><span class="lineno">16117</span>&#160; }</div><div class="line"><a name="l16118"></a><span class="lineno">16118</span>&#160;</div><div class="line"><a name="l16119"></a><span class="lineno">16119</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a1def8ec9393360a1b34a20528703e7f7">CmpHelperEQFailure</a>(lhs_expression, rhs_expression, lhs, rhs);</div><div class="line"><a name="l16120"></a><span class="lineno">16120</span>&#160;}</div><div class="line"><a name="l16121"></a><span class="lineno">16121</span>&#160;</div><div class="line"><a name="l16122"></a><span class="lineno">16122</span>&#160;<span class="comment">// With this overloaded version, we allow anonymous enums to be used</span></div><div class="line"><a name="l16123"></a><span class="lineno">16123</span>&#160;<span class="comment">// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums</span></div><div class="line"><a name="l16124"></a><span class="lineno">16124</span>&#160;<span class="comment">// can be implicitly cast to BiggestInt.</span></div><div class="line"><a name="l16125"></a><span class="lineno">16125</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16126"></a><span class="lineno">16126</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16127"></a><span class="lineno">16127</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a> lhs,</div><div class="line"><a name="l16128"></a><span class="lineno">16128</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a> rhs);</div><div class="line"><a name="l16129"></a><span class="lineno">16129</span>&#160;</div><div class="line"><a name="l16130"></a><span class="lineno">16130</span>&#160;<span class="comment">// The helper class for {ASSERT|EXPECT}_EQ. The template argument</span></div><div class="line"><a name="l16131"></a><span class="lineno">16131</span>&#160;<span class="comment">// lhs_is_null_literal is true iff the first argument to ASSERT_EQ()</span></div><div class="line"><a name="l16132"></a><span class="lineno">16132</span>&#160;<span class="comment">// is a null pointer literal. The following default implementation is</span></div><div class="line"><a name="l16133"></a><span class="lineno">16133</span>&#160;<span class="comment">// for lhs_is_null_literal being false.</span></div><div class="line"><a name="l16134"></a><span class="lineno">16134</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> lhs_is_null_literal&gt;</div><div class="line"><a name="l16135"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper.html">16135</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_eq_helper.html">EqHelper</a> {</div><div class="line"><a name="l16136"></a><span class="lineno">16136</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l16137"></a><span class="lineno">16137</span>&#160; <span class="comment">// This templatized version is for the general case.</span></div><div class="line"><a name="l16138"></a><span class="lineno">16138</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16139"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper.html#ae3572c7374534a916b9117efaa89f33f">16139</a></span>&#160; <span class="keyword">static</span> AssertionResult <a class="code" href="classtesting_1_1internal_1_1_eq_helper.html#ae3572c7374534a916b9117efaa89f33f">Compare</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16140"></a><span class="lineno">16140</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16141"></a><span class="lineno">16141</span>&#160; <span class="keyword">const</span> T1&amp; lhs,</div><div class="line"><a name="l16142"></a><span class="lineno">16142</span>&#160; <span class="keyword">const</span> T2&amp; rhs) {</div><div class="line"><a name="l16143"></a><span class="lineno">16143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(lhs_expression, rhs_expression, lhs, rhs);</div><div class="line"><a name="l16144"></a><span class="lineno">16144</span>&#160; }</div><div class="line"><a name="l16145"></a><span class="lineno">16145</span>&#160;</div><div class="line"><a name="l16146"></a><span class="lineno">16146</span>&#160; <span class="comment">// With this overloaded version, we allow anonymous enums to be used</span></div><div class="line"><a name="l16147"></a><span class="lineno">16147</span>&#160; <span class="comment">// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous</span></div><div class="line"><a name="l16148"></a><span class="lineno">16148</span>&#160; <span class="comment">// enums can be implicitly cast to BiggestInt.</span></div><div class="line"><a name="l16149"></a><span class="lineno">16149</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l16150"></a><span class="lineno">16150</span>&#160; <span class="comment">// Even though its body looks the same as the above version, we</span></div><div class="line"><a name="l16151"></a><span class="lineno">16151</span>&#160; <span class="comment">// cannot merge the two, as it will make anonymous enums unhappy.</span></div><div class="line"><a name="l16152"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper.html#aaa42c0059bb3dcc43d556243febb5f1c">16152</a></span>&#160; <span class="keyword">static</span> AssertionResult <a class="code" href="classtesting_1_1internal_1_1_eq_helper.html#aaa42c0059bb3dcc43d556243febb5f1c">Compare</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16153"></a><span class="lineno">16153</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16154"></a><span class="lineno">16154</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a> lhs,</div><div class="line"><a name="l16155"></a><span class="lineno">16155</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">BiggestInt</a> rhs) {</div><div class="line"><a name="l16156"></a><span class="lineno">16156</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(lhs_expression, rhs_expression, lhs, rhs);</div><div class="line"><a name="l16157"></a><span class="lineno">16157</span>&#160; }</div><div class="line"><a name="l16158"></a><span class="lineno">16158</span>&#160;};</div><div class="line"><a name="l16159"></a><span class="lineno">16159</span>&#160;</div><div class="line"><a name="l16160"></a><span class="lineno">16160</span>&#160;<span class="comment">// This specialization is used when the first argument to ASSERT_EQ()</span></div><div class="line"><a name="l16161"></a><span class="lineno">16161</span>&#160;<span class="comment">// is a null pointer literal, like NULL, false, or 0.</span></div><div class="line"><a name="l16162"></a><span class="lineno">16162</span>&#160;<span class="keyword">template</span> &lt;&gt;</div><div class="line"><a name="l16163"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html">16163</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_eq_helper.html">EqHelper</a>&lt;true&gt; {</div><div class="line"><a name="l16164"></a><span class="lineno">16164</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l16165"></a><span class="lineno">16165</span>&#160; <span class="comment">// We define two overloaded versions of Compare(). The first</span></div><div class="line"><a name="l16166"></a><span class="lineno">16166</span>&#160; <span class="comment">// version will be picked when the second argument to ASSERT_EQ() is</span></div><div class="line"><a name="l16167"></a><span class="lineno">16167</span>&#160; <span class="comment">// NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or</span></div><div class="line"><a name="l16168"></a><span class="lineno">16168</span>&#160; <span class="comment">// EXPECT_EQ(false, a_bool).</span></div><div class="line"><a name="l16169"></a><span class="lineno">16169</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16170"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a332e92bcca7a71c273e50d800f943fcf">16170</a></span>&#160; <span class="keyword">static</span> AssertionResult <a class="code" href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a332e92bcca7a71c273e50d800f943fcf">Compare</a>(</div><div class="line"><a name="l16171"></a><span class="lineno">16171</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression, <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression, <span class="keyword">const</span> T1&amp; lhs,</div><div class="line"><a name="l16172"></a><span class="lineno">16172</span>&#160; <span class="keyword">const</span> T2&amp; rhs,</div><div class="line"><a name="l16173"></a><span class="lineno">16173</span>&#160; <span class="comment">// The following line prevents this overload from being considered if T2</span></div><div class="line"><a name="l16174"></a><span class="lineno">16174</span>&#160; <span class="comment">// is not a pointer type. We need this because ASSERT_EQ(NULL, my_ptr)</span></div><div class="line"><a name="l16175"></a><span class="lineno">16175</span>&#160; <span class="comment">// expands to Compare(&quot;&quot;, &quot;&quot;, NULL, my_ptr), which requires a conversion</span></div><div class="line"><a name="l16176"></a><span class="lineno">16176</span>&#160; <span class="comment">// to match the Secret* in the other overload, which would otherwise make</span></div><div class="line"><a name="l16177"></a><span class="lineno">16177</span>&#160; <span class="comment">// this template match better.</span></div><div class="line"><a name="l16178"></a><span class="lineno">16178</span>&#160; <span class="keyword">typename</span> <a class="code" href="structtesting_1_1internal_1_1_enable_if.html">EnableIf</a>&lt;!std::is_pointer&lt;T2&gt;::value&gt;::type* = <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l16179"></a><span class="lineno">16179</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(lhs_expression, rhs_expression, lhs, rhs);</div><div class="line"><a name="l16180"></a><span class="lineno">16180</span>&#160; }</div><div class="line"><a name="l16181"></a><span class="lineno">16181</span>&#160;</div><div class="line"><a name="l16182"></a><span class="lineno">16182</span>&#160; <span class="comment">// This version will be picked when the second argument to ASSERT_EQ() is a</span></div><div class="line"><a name="l16183"></a><span class="lineno">16183</span>&#160; <span class="comment">// pointer, e.g. ASSERT_EQ(NULL, a_pointer).</span></div><div class="line"><a name="l16184"></a><span class="lineno">16184</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l16185"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a6f292601a68c8f0d49e6d48bd309b900">16185</a></span>&#160; <span class="keyword">static</span> AssertionResult <a class="code" href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a6f292601a68c8f0d49e6d48bd309b900">Compare</a>(</div><div class="line"><a name="l16186"></a><span class="lineno">16186</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16187"></a><span class="lineno">16187</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16188"></a><span class="lineno">16188</span>&#160; <span class="comment">// We used to have a second template parameter instead of Secret*. That</span></div><div class="line"><a name="l16189"></a><span class="lineno">16189</span>&#160; <span class="comment">// template parameter would deduce to &#39;long&#39;, making this a better match</span></div><div class="line"><a name="l16190"></a><span class="lineno">16190</span>&#160; <span class="comment">// than the first overload even without the first overload&#39;s EnableIf.</span></div><div class="line"><a name="l16191"></a><span class="lineno">16191</span>&#160; <span class="comment">// Unfortunately, gcc with -Wconversion-null warns when &quot;passing NULL to</span></div><div class="line"><a name="l16192"></a><span class="lineno">16192</span>&#160; <span class="comment">// non-pointer argument&quot; (even a deduced integral argument), so the old</span></div><div class="line"><a name="l16193"></a><span class="lineno">16193</span>&#160; <span class="comment">// implementation caused warnings in user code.</span></div><div class="line"><a name="l16194"></a><span class="lineno">16194</span>&#160; Secret* <span class="comment">/* lhs (NULL) */</span>,</div><div class="line"><a name="l16195"></a><span class="lineno">16195</span>&#160; T* rhs) {</div><div class="line"><a name="l16196"></a><span class="lineno">16196</span>&#160; <span class="comment">// We already know that &#39;lhs&#39; is a null pointer.</span></div><div class="line"><a name="l16197"></a><span class="lineno">16197</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">CmpHelperEQ</a>(lhs_expression, rhs_expression, static_cast&lt;T*&gt;(<span class="keyword">nullptr</span>),</div><div class="line"><a name="l16198"></a><span class="lineno">16198</span>&#160; rhs);</div><div class="line"><a name="l16199"></a><span class="lineno">16199</span>&#160; }</div><div class="line"><a name="l16200"></a><span class="lineno">16200</span>&#160;};</div><div class="line"><a name="l16201"></a><span class="lineno">16201</span>&#160;</div><div class="line"><a name="l16202"></a><span class="lineno">16202</span>&#160;<span class="comment">// Separate the error generating code from the code path to reduce the stack</span></div><div class="line"><a name="l16203"></a><span class="lineno">16203</span>&#160;<span class="comment">// frame size of CmpHelperOP. This helps reduce the overhead of some sanitizers</span></div><div class="line"><a name="l16204"></a><span class="lineno">16204</span>&#160;<span class="comment">// when calling EXPECT_OP in a tight loop.</span></div><div class="line"><a name="l16205"></a><span class="lineno">16205</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16206"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a894ffccd936d78fd555f490020c27f0a">16206</a></span>&#160;AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a894ffccd936d78fd555f490020c27f0a">CmpHelperOpFailure</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr1, <span class="keyword">const</span> <span class="keywordtype">char</span>* expr2,</div><div class="line"><a name="l16207"></a><span class="lineno">16207</span>&#160; <span class="keyword">const</span> T1&amp; val1, <span class="keyword">const</span> T2&amp; val2,</div><div class="line"><a name="l16208"></a><span class="lineno">16208</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* op) {</div><div class="line"><a name="l16209"></a><span class="lineno">16209</span>&#160; <span class="keywordflow">return</span> AssertionFailure()</div><div class="line"><a name="l16210"></a><span class="lineno">16210</span>&#160; &lt;&lt; <span class="stringliteral">&quot;Expected: (&quot;</span> &lt;&lt; expr1 &lt;&lt; <span class="stringliteral">&quot;) &quot;</span> &lt;&lt; op &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; expr2</div><div class="line"><a name="l16211"></a><span class="lineno">16211</span>&#160; &lt;&lt; <span class="stringliteral">&quot;), actual: &quot;</span> &lt;&lt; <a class="code" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">FormatForComparisonFailureMessage</a>(val1, val2)</div><div class="line"><a name="l16212"></a><span class="lineno">16212</span>&#160; &lt;&lt; <span class="stringliteral">&quot; vs &quot;</span> &lt;&lt; <a class="code" href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">FormatForComparisonFailureMessage</a>(val2, val1);</div><div class="line"><a name="l16213"></a><span class="lineno">16213</span>&#160;}</div><div class="line"><a name="l16214"></a><span class="lineno">16214</span>&#160;</div><div class="line"><a name="l16215"></a><span class="lineno">16215</span>&#160;<span class="comment">// A macro for implementing the helper functions needed to implement</span></div><div class="line"><a name="l16216"></a><span class="lineno">16216</span>&#160;<span class="comment">// ASSERT_?? and EXPECT_??. It is here just to avoid copy-and-paste</span></div><div class="line"><a name="l16217"></a><span class="lineno">16217</span>&#160;<span class="comment">// of similar code.</span></div><div class="line"><a name="l16218"></a><span class="lineno">16218</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16219"></a><span class="lineno">16219</span>&#160;<span class="comment">// For each templatized helper function, we also define an overloaded</span></div><div class="line"><a name="l16220"></a><span class="lineno">16220</span>&#160;<span class="comment">// version for BiggestInt in order to reduce code bloat and allow</span></div><div class="line"><a name="l16221"></a><span class="lineno">16221</span>&#160;<span class="comment">// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled</span></div><div class="line"><a name="l16222"></a><span class="lineno">16222</span>&#160;<span class="comment">// with gcc 4.</span></div><div class="line"><a name="l16223"></a><span class="lineno">16223</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16224"></a><span class="lineno">16224</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16225"></a><span class="lineno">16225</span>&#160;</div><div class="line"><a name="l16226"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">16226</a></span>&#160;<span class="preprocessor">#define GTEST_IMPL_CMP_HELPER_(op_name, op)\</span></div><div class="line"><a name="l16227"></a><span class="lineno">16227</span>&#160;<span class="preprocessor">template &lt;typename T1, typename T2&gt;\</span></div><div class="line"><a name="l16228"></a><span class="lineno">16228</span>&#160;<span class="preprocessor">AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \</span></div><div class="line"><a name="l16229"></a><span class="lineno">16229</span>&#160;<span class="preprocessor"> const T1&amp; val1, const T2&amp; val2) {\</span></div><div class="line"><a name="l16230"></a><span class="lineno">16230</span>&#160;<span class="preprocessor"> if (val1 op val2) {\</span></div><div class="line"><a name="l16231"></a><span class="lineno">16231</span>&#160;<span class="preprocessor"> return AssertionSuccess();\</span></div><div class="line"><a name="l16232"></a><span class="lineno">16232</span>&#160;<span class="preprocessor"> } else {\</span></div><div class="line"><a name="l16233"></a><span class="lineno">16233</span>&#160;<span class="preprocessor"> return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);\</span></div><div class="line"><a name="l16234"></a><span class="lineno">16234</span>&#160;<span class="preprocessor"> }\</span></div><div class="line"><a name="l16235"></a><span class="lineno">16235</span>&#160;<span class="preprocessor">}\</span></div><div class="line"><a name="l16236"></a><span class="lineno">16236</span>&#160;<span class="preprocessor">GTEST_API_ AssertionResult CmpHelper##op_name(\</span></div><div class="line"><a name="l16237"></a><span class="lineno">16237</span>&#160;<span class="preprocessor"> const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)</span></div><div class="line"><a name="l16238"></a><span class="lineno">16238</span>&#160;</div><div class="line"><a name="l16239"></a><span class="lineno">16239</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16240"></a><span class="lineno">16240</span>&#160;</div><div class="line"><a name="l16241"></a><span class="lineno">16241</span>&#160;<span class="comment">// Implements the helper function for {ASSERT|EXPECT}_NE</span></div><div class="line"><a name="l16242"></a><span class="lineno">16242</span>&#160;<a class="code" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a>(NE, !=);</div><div class="line"><a name="l16243"></a><span class="lineno">16243</span>&#160;<span class="comment">// Implements the helper function for {ASSERT|EXPECT}_LE</span></div><div class="line"><a name="l16244"></a><span class="lineno">16244</span>&#160;<a class="code" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a>(LE, &lt;=);</div><div class="line"><a name="l16245"></a><span class="lineno">16245</span>&#160;<span class="comment">// Implements the helper function for {ASSERT|EXPECT}_LT</span></div><div class="line"><a name="l16246"></a><span class="lineno">16246</span>&#160;<a class="code" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a>(LT, &lt;);</div><div class="line"><a name="l16247"></a><span class="lineno">16247</span>&#160;<span class="comment">// Implements the helper function for {ASSERT|EXPECT}_GE</span></div><div class="line"><a name="l16248"></a><span class="lineno">16248</span>&#160;<a class="code" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a>(GE, &gt;=);</div><div class="line"><a name="l16249"></a><span class="lineno">16249</span>&#160;<span class="comment">// Implements the helper function for {ASSERT|EXPECT}_GT</span></div><div class="line"><a name="l16250"></a><span class="lineno">16250</span>&#160;<a class="code" href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a>(GT, &gt;);</div><div class="line"><a name="l16251"></a><span class="lineno">16251</span>&#160;</div><div class="line"><a name="l16252"></a><span class="lineno">16252</span>&#160;<span class="preprocessor">#undef GTEST_IMPL_CMP_HELPER_</span></div><div class="line"><a name="l16253"></a><span class="lineno">16253</span>&#160;</div><div class="line"><a name="l16254"></a><span class="lineno">16254</span>&#160;<span class="comment">// The helper function for {ASSERT|EXPECT}_STREQ.</span></div><div class="line"><a name="l16255"></a><span class="lineno">16255</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16256"></a><span class="lineno">16256</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16257"></a><span class="lineno">16257</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#ad40d557f9c157790160d6e4f2b0d9bab">CmpHelperSTREQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16258"></a><span class="lineno">16258</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16259"></a><span class="lineno">16259</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s1,</div><div class="line"><a name="l16260"></a><span class="lineno">16260</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2);</div><div class="line"><a name="l16261"></a><span class="lineno">16261</span>&#160;</div><div class="line"><a name="l16262"></a><span class="lineno">16262</span>&#160;<span class="comment">// The helper function for {ASSERT|EXPECT}_STRCASEEQ.</span></div><div class="line"><a name="l16263"></a><span class="lineno">16263</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16264"></a><span class="lineno">16264</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16265"></a><span class="lineno">16265</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a00c3d012df6173622ef558a131bfb95d">CmpHelperSTRCASEEQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16266"></a><span class="lineno">16266</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16267"></a><span class="lineno">16267</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s1,</div><div class="line"><a name="l16268"></a><span class="lineno">16268</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2);</div><div class="line"><a name="l16269"></a><span class="lineno">16269</span>&#160;</div><div class="line"><a name="l16270"></a><span class="lineno">16270</span>&#160;<span class="comment">// The helper function for {ASSERT|EXPECT}_STRNE.</span></div><div class="line"><a name="l16271"></a><span class="lineno">16271</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16272"></a><span class="lineno">16272</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16273"></a><span class="lineno">16273</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a6e700804399b6694d8d6157e3a141b17">CmpHelperSTRNE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16274"></a><span class="lineno">16274</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16275"></a><span class="lineno">16275</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s1,</div><div class="line"><a name="l16276"></a><span class="lineno">16276</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2);</div><div class="line"><a name="l16277"></a><span class="lineno">16277</span>&#160;</div><div class="line"><a name="l16278"></a><span class="lineno">16278</span>&#160;<span class="comment">// The helper function for {ASSERT|EXPECT}_STRCASENE.</span></div><div class="line"><a name="l16279"></a><span class="lineno">16279</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16280"></a><span class="lineno">16280</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16281"></a><span class="lineno">16281</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a5f74b933606b0a742cd5a8ad2d7087e0">CmpHelperSTRCASENE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16282"></a><span class="lineno">16282</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16283"></a><span class="lineno">16283</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s1,</div><div class="line"><a name="l16284"></a><span class="lineno">16284</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2);</div><div class="line"><a name="l16285"></a><span class="lineno">16285</span>&#160;</div><div class="line"><a name="l16286"></a><span class="lineno">16286</span>&#160;</div><div class="line"><a name="l16287"></a><span class="lineno">16287</span>&#160;<span class="comment">// Helper function for *_STREQ on wide strings.</span></div><div class="line"><a name="l16288"></a><span class="lineno">16288</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16289"></a><span class="lineno">16289</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16290"></a><span class="lineno">16290</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#ad40d557f9c157790160d6e4f2b0d9bab">CmpHelperSTREQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16291"></a><span class="lineno">16291</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16292"></a><span class="lineno">16292</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s1,</div><div class="line"><a name="l16293"></a><span class="lineno">16293</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s2);</div><div class="line"><a name="l16294"></a><span class="lineno">16294</span>&#160;</div><div class="line"><a name="l16295"></a><span class="lineno">16295</span>&#160;<span class="comment">// Helper function for *_STRNE on wide strings.</span></div><div class="line"><a name="l16296"></a><span class="lineno">16296</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16297"></a><span class="lineno">16297</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16298"></a><span class="lineno">16298</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a6e700804399b6694d8d6157e3a141b17">CmpHelperSTRNE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* s1_expression,</div><div class="line"><a name="l16299"></a><span class="lineno">16299</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* s2_expression,</div><div class="line"><a name="l16300"></a><span class="lineno">16300</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s1,</div><div class="line"><a name="l16301"></a><span class="lineno">16301</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s2);</div><div class="line"><a name="l16302"></a><span class="lineno">16302</span>&#160;</div><div class="line"><a name="l16303"></a><span class="lineno">16303</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l16304"></a><span class="lineno">16304</span>&#160;</div><div class="line"><a name="l16305"></a><span class="lineno">16305</span>&#160;<span class="comment">// IsSubstring() and IsNotSubstring() are intended to be used as the</span></div><div class="line"><a name="l16306"></a><span class="lineno">16306</span>&#160;<span class="comment">// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by</span></div><div class="line"><a name="l16307"></a><span class="lineno">16307</span>&#160;<span class="comment">// themselves. They check whether needle is a substring of haystack</span></div><div class="line"><a name="l16308"></a><span class="lineno">16308</span>&#160;<span class="comment">// (NULL is considered a substring of itself only), and return an</span></div><div class="line"><a name="l16309"></a><span class="lineno">16309</span>&#160;<span class="comment">// appropriate error message when they fail.</span></div><div class="line"><a name="l16310"></a><span class="lineno">16310</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16311"></a><span class="lineno">16311</span>&#160;<span class="comment">// The {needle,haystack}_expr arguments are the stringified</span></div><div class="line"><a name="l16312"></a><span class="lineno">16312</span>&#160;<span class="comment">// expressions that generated the two real arguments.</span></div><div class="line"><a name="l16313"></a><span class="lineno">16313</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a5c90a86562b2470213c07742e0eeb0fe">IsSubstring</a>(</div><div class="line"><a name="l16314"></a><span class="lineno">16314</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16315"></a><span class="lineno">16315</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack);</div><div class="line"><a name="l16316"></a><span class="lineno">16316</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a5c90a86562b2470213c07742e0eeb0fe">IsSubstring</a>(</div><div class="line"><a name="l16317"></a><span class="lineno">16317</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16318"></a><span class="lineno">16318</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* needle, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* haystack);</div><div class="line"><a name="l16319"></a><span class="lineno">16319</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#ab553b649b06ef2339cbd90f8dfa119f0">IsNotSubstring</a>(</div><div class="line"><a name="l16320"></a><span class="lineno">16320</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16321"></a><span class="lineno">16321</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack);</div><div class="line"><a name="l16322"></a><span class="lineno">16322</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#ab553b649b06ef2339cbd90f8dfa119f0">IsNotSubstring</a>(</div><div class="line"><a name="l16323"></a><span class="lineno">16323</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16324"></a><span class="lineno">16324</span>&#160; <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* needle, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* haystack);</div><div class="line"><a name="l16325"></a><span class="lineno">16325</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a5c90a86562b2470213c07742e0eeb0fe">IsSubstring</a>(</div><div class="line"><a name="l16326"></a><span class="lineno">16326</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16327"></a><span class="lineno">16327</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; needle, <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; haystack);</div><div class="line"><a name="l16328"></a><span class="lineno">16328</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#ab553b649b06ef2339cbd90f8dfa119f0">IsNotSubstring</a>(</div><div class="line"><a name="l16329"></a><span class="lineno">16329</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16330"></a><span class="lineno">16330</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; needle, <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::std::string</a>&amp; haystack);</div><div class="line"><a name="l16331"></a><span class="lineno">16331</span>&#160;</div><div class="line"><a name="l16332"></a><span class="lineno">16332</span>&#160;<span class="preprocessor">#if GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l16333"></a><span class="lineno">16333</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a5c90a86562b2470213c07742e0eeb0fe">IsSubstring</a>(</div><div class="line"><a name="l16334"></a><span class="lineno">16334</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16335"></a><span class="lineno">16335</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; needle, <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; haystack);</div><div class="line"><a name="l16336"></a><span class="lineno">16336</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#ab553b649b06ef2339cbd90f8dfa119f0">IsNotSubstring</a>(</div><div class="line"><a name="l16337"></a><span class="lineno">16337</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* needle_expr, <span class="keyword">const</span> <span class="keywordtype">char</span>* haystack_expr,</div><div class="line"><a name="l16338"></a><span class="lineno">16338</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; needle, <a class="code" href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">const ::std::wstring</a>&amp; haystack);</div><div class="line"><a name="l16339"></a><span class="lineno">16339</span>&#160;<span class="preprocessor">#endif // GTEST_HAS_STD_WSTRING</span></div><div class="line"><a name="l16340"></a><span class="lineno">16340</span>&#160;</div><div class="line"><a name="l16341"></a><span class="lineno">16341</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l16342"></a><span class="lineno">16342</span>&#160;</div><div class="line"><a name="l16343"></a><span class="lineno">16343</span>&#160;<span class="comment">// Helper template function for comparing floating-points.</span></div><div class="line"><a name="l16344"></a><span class="lineno">16344</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16345"></a><span class="lineno">16345</span>&#160;<span class="comment">// Template parameter:</span></div><div class="line"><a name="l16346"></a><span class="lineno">16346</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16347"></a><span class="lineno">16347</span>&#160;<span class="comment">// RawType: the raw floating-point type (either float or double)</span></div><div class="line"><a name="l16348"></a><span class="lineno">16348</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16349"></a><span class="lineno">16349</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16350"></a><span class="lineno">16350</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> RawType&gt;</div><div class="line"><a name="l16351"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a98ce463e5dbe0c6120fa817e1f8f2944">16351</a></span>&#160;AssertionResult <a class="code" href="namespacetesting_1_1internal.html#a98ce463e5dbe0c6120fa817e1f8f2944">CmpHelperFloatingPointEQ</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* lhs_expression,</div><div class="line"><a name="l16352"></a><span class="lineno">16352</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* rhs_expression,</div><div class="line"><a name="l16353"></a><span class="lineno">16353</span>&#160; RawType lhs_value,</div><div class="line"><a name="l16354"></a><span class="lineno">16354</span>&#160; RawType rhs_value) {</div><div class="line"><a name="l16355"></a><span class="lineno">16355</span>&#160; <span class="keyword">const</span> <a class="code" href="classtesting_1_1internal_1_1_floating_point.html">FloatingPoint&lt;RawType&gt;</a> lhs(lhs_value), rhs(rhs_value);</div><div class="line"><a name="l16356"></a><span class="lineno">16356</span>&#160;</div><div class="line"><a name="l16357"></a><span class="lineno">16357</span>&#160; <span class="keywordflow">if</span> (lhs.AlmostEquals(rhs)) {</div><div class="line"><a name="l16358"></a><span class="lineno">16358</span>&#160; <span class="keywordflow">return</span> AssertionSuccess();</div><div class="line"><a name="l16359"></a><span class="lineno">16359</span>&#160; }</div><div class="line"><a name="l16360"></a><span class="lineno">16360</span>&#160;</div><div class="line"><a name="l16361"></a><span class="lineno">16361</span>&#160; ::std::stringstream lhs_ss;</div><div class="line"><a name="l16362"></a><span class="lineno">16362</span>&#160; lhs_ss &lt;&lt; std::setprecision(std::numeric_limits&lt;RawType&gt;::digits10 + 2)</div><div class="line"><a name="l16363"></a><span class="lineno">16363</span>&#160; &lt;&lt; lhs_value;</div><div class="line"><a name="l16364"></a><span class="lineno">16364</span>&#160;</div><div class="line"><a name="l16365"></a><span class="lineno">16365</span>&#160; ::std::stringstream rhs_ss;</div><div class="line"><a name="l16366"></a><span class="lineno">16366</span>&#160; rhs_ss &lt;&lt; std::setprecision(std::numeric_limits&lt;RawType&gt;::digits10 + 2)</div><div class="line"><a name="l16367"></a><span class="lineno">16367</span>&#160; &lt;&lt; rhs_value;</div><div class="line"><a name="l16368"></a><span class="lineno">16368</span>&#160;</div><div class="line"><a name="l16369"></a><span class="lineno">16369</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#ac61e2ba2cbf259fd6ee5ffd4e49c9445">EqFailure</a>(lhs_expression,</div><div class="line"><a name="l16370"></a><span class="lineno">16370</span>&#160; rhs_expression,</div><div class="line"><a name="l16371"></a><span class="lineno">16371</span>&#160; StringStreamToString(&amp;lhs_ss),</div><div class="line"><a name="l16372"></a><span class="lineno">16372</span>&#160; StringStreamToString(&amp;rhs_ss),</div><div class="line"><a name="l16373"></a><span class="lineno">16373</span>&#160; <span class="keyword">false</span>);</div><div class="line"><a name="l16374"></a><span class="lineno">16374</span>&#160;}</div><div class="line"><a name="l16375"></a><span class="lineno">16375</span>&#160;</div><div class="line"><a name="l16376"></a><span class="lineno">16376</span>&#160;<span class="comment">// Helper function for implementing ASSERT_NEAR.</span></div><div class="line"><a name="l16377"></a><span class="lineno">16377</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16378"></a><span class="lineno">16378</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.</span></div><div class="line"><a name="l16379"></a><span class="lineno">16379</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting_1_1internal.html#aea60207c4cedc8946a70ada62e38da8f">DoubleNearPredFormat</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr1,</div><div class="line"><a name="l16380"></a><span class="lineno">16380</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* expr2,</div><div class="line"><a name="l16381"></a><span class="lineno">16381</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* abs_error_expr,</div><div class="line"><a name="l16382"></a><span class="lineno">16382</span>&#160; <span class="keywordtype">double</span> val1,</div><div class="line"><a name="l16383"></a><span class="lineno">16383</span>&#160; <span class="keywordtype">double</span> val2,</div><div class="line"><a name="l16384"></a><span class="lineno">16384</span>&#160; <span class="keywordtype">double</span> abs_error);</div><div class="line"><a name="l16385"></a><span class="lineno">16385</span>&#160;</div><div class="line"><a name="l16386"></a><span class="lineno">16386</span>&#160;<span class="comment">// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.</span></div><div class="line"><a name="l16387"></a><span class="lineno">16387</span>&#160;<span class="comment">// A class that enables one to stream messages to assertion macros</span></div><div class="line"><a name="l16388"></a><span class="lineno"><a class="line" href="classtesting_1_1internal_1_1_assert_helper.html">16388</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1internal_1_1_assert_helper.html">AssertHelper</a> {</div><div class="line"><a name="l16389"></a><span class="lineno">16389</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l16390"></a><span class="lineno">16390</span>&#160; <span class="comment">// Constructor.</span></div><div class="line"><a name="l16391"></a><span class="lineno">16391</span>&#160; <a class="code" href="classtesting_1_1internal_1_1_assert_helper.html">AssertHelper</a>(TestPartResult::Type type,</div><div class="line"><a name="l16392"></a><span class="lineno">16392</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file,</div><div class="line"><a name="l16393"></a><span class="lineno">16393</span>&#160; <span class="keywordtype">int</span> line,</div><div class="line"><a name="l16394"></a><span class="lineno">16394</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div><div class="line"><a name="l16395"></a><span class="lineno">16395</span>&#160; ~<a class="code" href="classtesting_1_1internal_1_1_assert_helper.html">AssertHelper</a>();</div><div class="line"><a name="l16396"></a><span class="lineno">16396</span>&#160;</div><div class="line"><a name="l16397"></a><span class="lineno">16397</span>&#160; <span class="comment">// Message assignment is a semantic trick to enable assertion</span></div><div class="line"><a name="l16398"></a><span class="lineno">16398</span>&#160; <span class="comment">// streaming; see the GTEST_MESSAGE_ macro below.</span></div><div class="line"><a name="l16399"></a><span class="lineno">16399</span>&#160; <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classtesting_1_1_message.html">Message</a>&amp; message) <span class="keyword">const</span>;</div><div class="line"><a name="l16400"></a><span class="lineno">16400</span>&#160;</div><div class="line"><a name="l16401"></a><span class="lineno">16401</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l16402"></a><span class="lineno">16402</span>&#160; <span class="comment">// We put our data in a struct so that the size of the AssertHelper class can</span></div><div class="line"><a name="l16403"></a><span class="lineno">16403</span>&#160; <span class="comment">// be as small as possible. This is important because gcc is incapable of</span></div><div class="line"><a name="l16404"></a><span class="lineno">16404</span>&#160; <span class="comment">// re-using stack space even for temporary variables, so every EXPECT_EQ</span></div><div class="line"><a name="l16405"></a><span class="lineno">16405</span>&#160; <span class="comment">// reserves stack space for another AssertHelper.</span></div><div class="line"><a name="l16406"></a><span class="lineno">16406</span>&#160; <span class="keyword">struct </span>AssertHelperData {</div><div class="line"><a name="l16407"></a><span class="lineno">16407</span>&#160; AssertHelperData(TestPartResult::Type t,</div><div class="line"><a name="l16408"></a><span class="lineno">16408</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* srcfile,</div><div class="line"><a name="l16409"></a><span class="lineno">16409</span>&#160; <span class="keywordtype">int</span> line_num,</div><div class="line"><a name="l16410"></a><span class="lineno">16410</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* msg)</div><div class="line"><a name="l16411"></a><span class="lineno">16411</span>&#160; : type(t), file(srcfile), line(line_num), message(msg) { }</div><div class="line"><a name="l16412"></a><span class="lineno">16412</span>&#160;</div><div class="line"><a name="l16413"></a><span class="lineno">16413</span>&#160; TestPartResult::Type <span class="keyword">const</span> type;</div><div class="line"><a name="l16414"></a><span class="lineno">16414</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> file;</div><div class="line"><a name="l16415"></a><span class="lineno">16415</span>&#160; <span class="keywordtype">int</span> <span class="keyword">const</span> line;</div><div class="line"><a name="l16416"></a><span class="lineno">16416</span>&#160; <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <span class="keyword">const</span> message;</div><div class="line"><a name="l16417"></a><span class="lineno">16417</span>&#160;</div><div class="line"><a name="l16418"></a><span class="lineno">16418</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l16419"></a><span class="lineno">16419</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(AssertHelperData);</div><div class="line"><a name="l16420"></a><span class="lineno">16420</span>&#160; };</div><div class="line"><a name="l16421"></a><span class="lineno">16421</span>&#160;</div><div class="line"><a name="l16422"></a><span class="lineno">16422</span>&#160; AssertHelperData* <span class="keyword">const</span> data_;</div><div class="line"><a name="l16423"></a><span class="lineno">16423</span>&#160;</div><div class="line"><a name="l16424"></a><span class="lineno">16424</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1internal_1_1_assert_helper.html">AssertHelper</a>);</div><div class="line"><a name="l16425"></a><span class="lineno">16425</span>&#160;};</div><div class="line"><a name="l16426"></a><span class="lineno">16426</span>&#160;</div><div class="line"><a name="l16427"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4e">16427</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4e">GTestColor</a> { <a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4eafcd8803dc9e37e374d5a4486afc230b7">COLOR_DEFAULT</a>, <a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea9ebb3ddab9391781f6ee5021e1e443c3">COLOR_RED</a>, <a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea3b1e81f5b14a17b35a8672d57d166507">COLOR_GREEN</a>, <a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea2cca441161aca75a208ff08d07f5b1a5">COLOR_YELLOW</a> };</div><div class="line"><a name="l16428"></a><span class="lineno">16428</span>&#160;</div><div class="line"><a name="l16429"></a><span class="lineno">16429</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="gtest_8h.html#ae29b00ca46783509cc900cd03d61ef37">GTEST_ATTRIBUTE_PRINTF_</a>(2, 3) void ColoredPrintf(<a class="code" href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4e">GTestColor</a> color,</div><div class="line"><a name="l16430"></a><span class="lineno"><a class="line" href="namespacetesting_1_1internal.html#a40b2a93ff318f5975eb8246b01221ce8">16430</a></span>&#160; const <span class="keywordtype">char</span>* <a class="code" href="namespacetesting_1_1internal.html#a40b2a93ff318f5975eb8246b01221ce8">fmt</a>,</div><div class="line"><a name="l16431"></a><span class="lineno">16431</span>&#160; ...);</div><div class="line"><a name="l16432"></a><span class="lineno">16432</span>&#160;</div><div class="line"><a name="l16433"></a><span class="lineno">16433</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l16434"></a><span class="lineno">16434</span>&#160;</div><div class="line"><a name="l16435"></a><span class="lineno">16435</span>&#160;<span class="comment">// The pure interface class that all value-parameterized tests inherit from.</span></div><div class="line"><a name="l16436"></a><span class="lineno">16436</span>&#160;<span class="comment">// A value-parameterized class must inherit from both ::testing::Test and</span></div><div class="line"><a name="l16437"></a><span class="lineno">16437</span>&#160;<span class="comment">// ::testing::WithParamInterface. In most cases that just means inheriting</span></div><div class="line"><a name="l16438"></a><span class="lineno">16438</span>&#160;<span class="comment">// from ::testing::TestWithParam, but more complicated test hierarchies</span></div><div class="line"><a name="l16439"></a><span class="lineno">16439</span>&#160;<span class="comment">// may need to inherit from Test and WithParamInterface at different levels.</span></div><div class="line"><a name="l16440"></a><span class="lineno">16440</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16441"></a><span class="lineno">16441</span>&#160;<span class="comment">// This interface has support for accessing the test parameter value via</span></div><div class="line"><a name="l16442"></a><span class="lineno">16442</span>&#160;<span class="comment">// the GetParam() method.</span></div><div class="line"><a name="l16443"></a><span class="lineno">16443</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16444"></a><span class="lineno">16444</span>&#160;<span class="comment">// Use it with one of the parameter generator defining functions, like Range(),</span></div><div class="line"><a name="l16445"></a><span class="lineno">16445</span>&#160;<span class="comment">// Values(), ValuesIn(), Bool(), and Combine().</span></div><div class="line"><a name="l16446"></a><span class="lineno">16446</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16447"></a><span class="lineno">16447</span>&#160;<span class="comment">// class FooTest : public ::testing::TestWithParam&lt;int&gt; {</span></div><div class="line"><a name="l16448"></a><span class="lineno">16448</span>&#160;<span class="comment">// protected:</span></div><div class="line"><a name="l16449"></a><span class="lineno">16449</span>&#160;<span class="comment">// FooTest() {</span></div><div class="line"><a name="l16450"></a><span class="lineno">16450</span>&#160;<span class="comment">// // Can use GetParam() here.</span></div><div class="line"><a name="l16451"></a><span class="lineno">16451</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16452"></a><span class="lineno">16452</span>&#160;<span class="comment">// virtual ~FooTest() {</span></div><div class="line"><a name="l16453"></a><span class="lineno">16453</span>&#160;<span class="comment">// // Can use GetParam() here.</span></div><div class="line"><a name="l16454"></a><span class="lineno">16454</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16455"></a><span class="lineno">16455</span>&#160;<span class="comment">// virtual void SetUp() {</span></div><div class="line"><a name="l16456"></a><span class="lineno">16456</span>&#160;<span class="comment">// // Can use GetParam() here.</span></div><div class="line"><a name="l16457"></a><span class="lineno">16457</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16458"></a><span class="lineno">16458</span>&#160;<span class="comment">// virtual void TearDown {</span></div><div class="line"><a name="l16459"></a><span class="lineno">16459</span>&#160;<span class="comment">// // Can use GetParam() here.</span></div><div class="line"><a name="l16460"></a><span class="lineno">16460</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16461"></a><span class="lineno">16461</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l16462"></a><span class="lineno">16462</span>&#160;<span class="comment">// TEST_P(FooTest, DoesBar) {</span></div><div class="line"><a name="l16463"></a><span class="lineno">16463</span>&#160;<span class="comment">// // Can use GetParam() method here.</span></div><div class="line"><a name="l16464"></a><span class="lineno">16464</span>&#160;<span class="comment">// Foo foo;</span></div><div class="line"><a name="l16465"></a><span class="lineno">16465</span>&#160;<span class="comment">// ASSERT_TRUE(foo.DoesBar(GetParam()));</span></div><div class="line"><a name="l16466"></a><span class="lineno">16466</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16467"></a><span class="lineno">16467</span>&#160;<span class="comment">// INSTANTIATE_TEST_SUITE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));</span></div><div class="line"><a name="l16468"></a><span class="lineno">16468</span>&#160;</div><div class="line"><a name="l16469"></a><span class="lineno">16469</span>&#160;template &lt;typename T&gt;</div><div class="line"><a name="l16470"></a><span class="lineno"><a class="line" href="classtesting_1_1_with_param_interface.html">16470</a></span>&#160;class <a class="code" href="classtesting_1_1_with_param_interface.html">WithParamInterface</a> {</div><div class="line"><a name="l16471"></a><span class="lineno">16471</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l16472"></a><span class="lineno"><a class="line" href="classtesting_1_1_with_param_interface.html#a343febaaebf1f025bda484f841d4fec1">16472</a></span>&#160; <span class="keyword">typedef</span> T <a class="code" href="classtesting_1_1_with_param_interface.html#a343febaaebf1f025bda484f841d4fec1">ParamType</a>;</div><div class="line"><a name="l16473"></a><span class="lineno"><a class="line" href="classtesting_1_1_with_param_interface.html#a4e170bd42fa5e8ce48b80cee6bb52e26">16473</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classtesting_1_1_with_param_interface.html#a4e170bd42fa5e8ce48b80cee6bb52e26">~WithParamInterface</a>() {}</div><div class="line"><a name="l16474"></a><span class="lineno">16474</span>&#160;</div><div class="line"><a name="l16475"></a><span class="lineno">16475</span>&#160; <span class="comment">// The current parameter value. Is also available in the test fixture&#39;s</span></div><div class="line"><a name="l16476"></a><span class="lineno">16476</span>&#160; <span class="comment">// constructor.</span></div><div class="line"><a name="l16477"></a><span class="lineno"><a class="line" href="classtesting_1_1_with_param_interface.html#a1078d4493d7aa4d3e50d1d6c661bee4d">16477</a></span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classtesting_1_1_with_param_interface.html#a343febaaebf1f025bda484f841d4fec1">ParamType</a>&amp; <a class="code" href="classtesting_1_1_with_param_interface.html#a1078d4493d7aa4d3e50d1d6c661bee4d">GetParam</a>() {</div><div class="line"><a name="l16478"></a><span class="lineno">16478</span>&#160; <a class="code" href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a>(parameter_ != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l16479"></a><span class="lineno">16479</span>&#160; &lt;&lt; <span class="stringliteral">&quot;GetParam() can only be called inside a value-parameterized test &quot;</span></div><div class="line"><a name="l16480"></a><span class="lineno">16480</span>&#160; &lt;&lt; <span class="stringliteral">&quot;-- did you intend to write TEST_P instead of TEST_F?&quot;</span>;</div><div class="line"><a name="l16481"></a><span class="lineno">16481</span>&#160; <span class="keywordflow">return</span> *parameter_;</div><div class="line"><a name="l16482"></a><span class="lineno">16482</span>&#160; }</div><div class="line"><a name="l16483"></a><span class="lineno">16483</span>&#160;</div><div class="line"><a name="l16484"></a><span class="lineno">16484</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l16485"></a><span class="lineno">16485</span>&#160; <span class="comment">// Sets parameter value. The caller is responsible for making sure the value</span></div><div class="line"><a name="l16486"></a><span class="lineno">16486</span>&#160; <span class="comment">// remains alive and unchanged throughout the current test.</span></div><div class="line"><a name="l16487"></a><span class="lineno">16487</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> SetParam(<span class="keyword">const</span> ParamType* parameter) {</div><div class="line"><a name="l16488"></a><span class="lineno">16488</span>&#160; parameter_ = parameter;</div><div class="line"><a name="l16489"></a><span class="lineno">16489</span>&#160; }</div><div class="line"><a name="l16490"></a><span class="lineno">16490</span>&#160;</div><div class="line"><a name="l16491"></a><span class="lineno">16491</span>&#160; <span class="comment">// Static value used for accessing parameter during a test lifetime.</span></div><div class="line"><a name="l16492"></a><span class="lineno">16492</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> ParamType* parameter_;</div><div class="line"><a name="l16493"></a><span class="lineno">16493</span>&#160;</div><div class="line"><a name="l16494"></a><span class="lineno">16494</span>&#160; <span class="comment">// TestClass must be a subclass of WithParamInterface&lt;T&gt; and Test.</span></div><div class="line"><a name="l16495"></a><span class="lineno"><a class="line" href="classtesting_1_1_with_param_interface.html#a7543eb7df89f00fff517dba24bc11dd5">16495</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span> TestClass&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classtesting_1_1internal_1_1_parameterized_test_factory.html">internal::ParameterizedTestFactory</a>;</div><div class="line"><a name="l16496"></a><span class="lineno">16496</span>&#160;};</div><div class="line"><a name="l16497"></a><span class="lineno">16497</span>&#160;</div><div class="line"><a name="l16498"></a><span class="lineno">16498</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l16499"></a><span class="lineno">16499</span>&#160;<span class="keyword">const</span> T* <a class="code" href="classtesting_1_1_with_param_interface.html">WithParamInterface&lt;T&gt;::parameter_</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l16500"></a><span class="lineno">16500</span>&#160;</div><div class="line"><a name="l16501"></a><span class="lineno">16501</span>&#160;<span class="comment">// Most value-parameterized classes can ignore the existence of</span></div><div class="line"><a name="l16502"></a><span class="lineno">16502</span>&#160;<span class="comment">// WithParamInterface, and can just inherit from ::testing::TestWithParam.</span></div><div class="line"><a name="l16503"></a><span class="lineno">16503</span>&#160;</div><div class="line"><a name="l16504"></a><span class="lineno">16504</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l16505"></a><span class="lineno"><a class="line" href="classtesting_1_1_test_with_param.html">16505</a></span>&#160;<span class="keyword">class </span><a class="code" href="classtesting_1_1_test_with_param.html">TestWithParam</a> : <span class="keyword">public</span> <a class="code" href="classtesting_1_1_test.html">Test</a>, <span class="keyword">public</span> <a class="code" href="classtesting_1_1_with_param_interface.html">WithParamInterface</a>&lt;T&gt; {</div><div class="line"><a name="l16506"></a><span class="lineno">16506</span>&#160;};</div><div class="line"><a name="l16507"></a><span class="lineno">16507</span>&#160;</div><div class="line"><a name="l16508"></a><span class="lineno">16508</span>&#160;<span class="comment">// Macros for indicating success/failure in test code.</span></div><div class="line"><a name="l16509"></a><span class="lineno">16509</span>&#160;</div><div class="line"><a name="l16510"></a><span class="lineno">16510</span>&#160;<span class="comment">// Skips test in runtime.</span></div><div class="line"><a name="l16511"></a><span class="lineno">16511</span>&#160;<span class="comment">// Skipping test aborts current function.</span></div><div class="line"><a name="l16512"></a><span class="lineno">16512</span>&#160;<span class="comment">// Skipped tests are neither successful nor failed.</span></div><div class="line"><a name="l16513"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3c0bbb980d533108ecc23c3534527d3c">16513</a></span>&#160;<span class="preprocessor">#define GTEST_SKIP() GTEST_SKIP_(&quot;Skipped&quot;)</span></div><div class="line"><a name="l16514"></a><span class="lineno">16514</span>&#160;</div><div class="line"><a name="l16515"></a><span class="lineno">16515</span>&#160;<span class="comment">// ADD_FAILURE unconditionally adds a failure to the current test.</span></div><div class="line"><a name="l16516"></a><span class="lineno">16516</span>&#160;<span class="comment">// SUCCEED generates a success - it doesn&#39;t automatically make the</span></div><div class="line"><a name="l16517"></a><span class="lineno">16517</span>&#160;<span class="comment">// current test successful, as a test is only successful when it has</span></div><div class="line"><a name="l16518"></a><span class="lineno">16518</span>&#160;<span class="comment">// no failure.</span></div><div class="line"><a name="l16519"></a><span class="lineno">16519</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16520"></a><span class="lineno">16520</span>&#160;<span class="comment">// EXPECT_* verifies that a certain condition is satisfied. If not,</span></div><div class="line"><a name="l16521"></a><span class="lineno">16521</span>&#160;<span class="comment">// it behaves like ADD_FAILURE. In particular:</span></div><div class="line"><a name="l16522"></a><span class="lineno">16522</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16523"></a><span class="lineno">16523</span>&#160;<span class="comment">// EXPECT_TRUE verifies that a Boolean condition is true.</span></div><div class="line"><a name="l16524"></a><span class="lineno">16524</span>&#160;<span class="comment">// EXPECT_FALSE verifies that a Boolean condition is false.</span></div><div class="line"><a name="l16525"></a><span class="lineno">16525</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16526"></a><span class="lineno">16526</span>&#160;<span class="comment">// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except</span></div><div class="line"><a name="l16527"></a><span class="lineno">16527</span>&#160;<span class="comment">// that they will also abort the current function on failure. People</span></div><div class="line"><a name="l16528"></a><span class="lineno">16528</span>&#160;<span class="comment">// usually want the fail-fast behavior of FAIL and ASSERT_*, but those</span></div><div class="line"><a name="l16529"></a><span class="lineno">16529</span>&#160;<span class="comment">// writing data-driven tests often find themselves using ADD_FAILURE</span></div><div class="line"><a name="l16530"></a><span class="lineno">16530</span>&#160;<span class="comment">// and EXPECT_* more.</span></div><div class="line"><a name="l16531"></a><span class="lineno">16531</span>&#160;</div><div class="line"><a name="l16532"></a><span class="lineno">16532</span>&#160;<span class="comment">// Generates a nonfatal failure with a generic message.</span></div><div class="line"><a name="l16533"></a><span class="lineno"><a class="line" href="gtest_8h.html#adc16b5b0a740c39084ea5c9e960e3063">16533</a></span>&#160;<span class="preprocessor">#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_(&quot;Failed&quot;)</span></div><div class="line"><a name="l16534"></a><span class="lineno">16534</span>&#160;</div><div class="line"><a name="l16535"></a><span class="lineno">16535</span>&#160;<span class="comment">// Generates a nonfatal failure at the given source file location with</span></div><div class="line"><a name="l16536"></a><span class="lineno">16536</span>&#160;<span class="comment">// a generic message.</span></div><div class="line"><a name="l16537"></a><span class="lineno"><a class="line" href="gtest_8h.html#a448d7e5105b640e892fd8153fbee0b7f">16537</a></span>&#160;<span class="preprocessor">#define ADD_FAILURE_AT(file, line) \</span></div><div class="line"><a name="l16538"></a><span class="lineno">16538</span>&#160;<span class="preprocessor"> GTEST_MESSAGE_AT_(file, line, &quot;Failed&quot;, \</span></div><div class="line"><a name="l16539"></a><span class="lineno">16539</span>&#160;<span class="preprocessor"> ::testing::TestPartResult::kNonFatalFailure)</span></div><div class="line"><a name="l16540"></a><span class="lineno">16540</span>&#160;</div><div class="line"><a name="l16541"></a><span class="lineno">16541</span>&#160;<span class="comment">// Generates a fatal failure with a generic message.</span></div><div class="line"><a name="l16542"></a><span class="lineno"><a class="line" href="gtest_8h.html#a636231436707c30d6778f79ae96f5dc6">16542</a></span>&#160;<span class="preprocessor">#define GTEST_FAIL() GTEST_FATAL_FAILURE_(&quot;Failed&quot;)</span></div><div class="line"><a name="l16543"></a><span class="lineno">16543</span>&#160;</div><div class="line"><a name="l16544"></a><span class="lineno">16544</span>&#160;<span class="comment">// Define this macro to 1 to omit the definition of FAIL(), which is a</span></div><div class="line"><a name="l16545"></a><span class="lineno">16545</span>&#160;<span class="comment">// generic name and clashes with some other libraries.</span></div><div class="line"><a name="l16546"></a><span class="lineno">16546</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_FAIL</span></div><div class="line"><a name="l16547"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3e26a8d27caa386ed0ea7ce9d5b7c4ed">16547</a></span>&#160;<span class="preprocessor"># define FAIL() GTEST_FAIL()</span></div><div class="line"><a name="l16548"></a><span class="lineno">16548</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16549"></a><span class="lineno">16549</span>&#160;</div><div class="line"><a name="l16550"></a><span class="lineno">16550</span>&#160;<span class="comment">// Generates a success with a generic message.</span></div><div class="line"><a name="l16551"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2690441c38202728f4159ac2462d9720">16551</a></span>&#160;<span class="preprocessor">#define GTEST_SUCCEED() GTEST_SUCCESS_(&quot;Succeeded&quot;)</span></div><div class="line"><a name="l16552"></a><span class="lineno">16552</span>&#160;</div><div class="line"><a name="l16553"></a><span class="lineno">16553</span>&#160;<span class="comment">// Define this macro to 1 to omit the definition of SUCCEED(), which</span></div><div class="line"><a name="l16554"></a><span class="lineno">16554</span>&#160;<span class="comment">// is a generic name and clashes with some other libraries.</span></div><div class="line"><a name="l16555"></a><span class="lineno">16555</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_SUCCEED</span></div><div class="line"><a name="l16556"></a><span class="lineno"><a class="line" href="gtest_8h.html#a75adcdf89f69b0b615e395daafc315af">16556</a></span>&#160;<span class="preprocessor"># define SUCCEED() GTEST_SUCCEED()</span></div><div class="line"><a name="l16557"></a><span class="lineno">16557</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16558"></a><span class="lineno">16558</span>&#160;</div><div class="line"><a name="l16559"></a><span class="lineno">16559</span>&#160;<span class="comment">// Macros for testing exceptions.</span></div><div class="line"><a name="l16560"></a><span class="lineno">16560</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16561"></a><span class="lineno">16561</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_THROW(statement, expected_exception):</span></div><div class="line"><a name="l16562"></a><span class="lineno">16562</span>&#160;<span class="comment">// Tests that the statement throws the expected exception.</span></div><div class="line"><a name="l16563"></a><span class="lineno">16563</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_NO_THROW(statement):</span></div><div class="line"><a name="l16564"></a><span class="lineno">16564</span>&#160;<span class="comment">// Tests that the statement doesn&#39;t throw any exception.</span></div><div class="line"><a name="l16565"></a><span class="lineno">16565</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_ANY_THROW(statement):</span></div><div class="line"><a name="l16566"></a><span class="lineno">16566</span>&#160;<span class="comment">// Tests that the statement throws an exception.</span></div><div class="line"><a name="l16567"></a><span class="lineno">16567</span>&#160;</div><div class="line"><a name="l16568"></a><span class="lineno"><a class="line" href="gtest_8h.html#a789842b4475eed948e6fd18390d5a859">16568</a></span>&#160;<span class="preprocessor">#define EXPECT_THROW(statement, expected_exception) \</span></div><div class="line"><a name="l16569"></a><span class="lineno">16569</span>&#160;<span class="preprocessor"> GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16570"></a><span class="lineno"><a class="line" href="gtest_8h.html#a2743a1438137ad857aa3f9fec3ff67ec">16570</a></span>&#160;<span class="preprocessor">#define EXPECT_NO_THROW(statement) \</span></div><div class="line"><a name="l16571"></a><span class="lineno">16571</span>&#160;<span class="preprocessor"> GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16572"></a><span class="lineno"><a class="line" href="gtest_8h.html#a9be43f44d148e8a8d6a89c864bf4e461">16572</a></span>&#160;<span class="preprocessor">#define EXPECT_ANY_THROW(statement) \</span></div><div class="line"><a name="l16573"></a><span class="lineno">16573</span>&#160;<span class="preprocessor"> GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16574"></a><span class="lineno"><a class="line" href="gtest_8h.html#aedb1eddae6c2a2430b0e7b7e03b4f052">16574</a></span>&#160;<span class="preprocessor">#define ASSERT_THROW(statement, expected_exception) \</span></div><div class="line"><a name="l16575"></a><span class="lineno">16575</span>&#160;<span class="preprocessor"> GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16576"></a><span class="lineno"><a class="line" href="gtest_8h.html#a895c34d9b192cdc2ba46d2680623485d">16576</a></span>&#160;<span class="preprocessor">#define ASSERT_NO_THROW(statement) \</span></div><div class="line"><a name="l16577"></a><span class="lineno">16577</span>&#160;<span class="preprocessor"> GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16578"></a><span class="lineno"><a class="line" href="gtest_8h.html#affadeef9379fe5aabf6f28d9eab9d3c0">16578</a></span>&#160;<span class="preprocessor">#define ASSERT_ANY_THROW(statement) \</span></div><div class="line"><a name="l16579"></a><span class="lineno">16579</span>&#160;<span class="preprocessor"> GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16580"></a><span class="lineno">16580</span>&#160;</div><div class="line"><a name="l16581"></a><span class="lineno">16581</span>&#160;<span class="comment">// Boolean assertions. Condition can be either a Boolean expression or an</span></div><div class="line"><a name="l16582"></a><span class="lineno">16582</span>&#160;<span class="comment">// AssertionResult. For more information on how to use AssertionResult with</span></div><div class="line"><a name="l16583"></a><span class="lineno">16583</span>&#160;<span class="comment">// these macros see comments on that class.</span></div><div class="line"><a name="l16584"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac33e7cdfb5d44a7a0f0ab552eb5c3c6a">16584</a></span>&#160;<span class="preprocessor">#define EXPECT_TRUE(condition) \</span></div><div class="line"><a name="l16585"></a><span class="lineno">16585</span>&#160;<span class="preprocessor"> GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \</span></div><div class="line"><a name="l16586"></a><span class="lineno">16586</span>&#160;<span class="preprocessor"> GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16587"></a><span class="lineno"><a class="line" href="gtest_8h.html#aeb6c7ae89f440c90c1a1815951c836da">16587</a></span>&#160;<span class="preprocessor">#define EXPECT_FALSE(condition) \</span></div><div class="line"><a name="l16588"></a><span class="lineno">16588</span>&#160;<span class="preprocessor"> GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \</span></div><div class="line"><a name="l16589"></a><span class="lineno">16589</span>&#160;<span class="preprocessor"> GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16590"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae9244bfbda562e8b798789b001993fa5">16590</a></span>&#160;<span class="preprocessor">#define ASSERT_TRUE(condition) \</span></div><div class="line"><a name="l16591"></a><span class="lineno">16591</span>&#160;<span class="preprocessor"> GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \</span></div><div class="line"><a name="l16592"></a><span class="lineno">16592</span>&#160;<span class="preprocessor"> GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16593"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8197fa52f3538588d20d8af4834c9003">16593</a></span>&#160;<span class="preprocessor">#define ASSERT_FALSE(condition) \</span></div><div class="line"><a name="l16594"></a><span class="lineno">16594</span>&#160;<span class="preprocessor"> GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \</span></div><div class="line"><a name="l16595"></a><span class="lineno">16595</span>&#160;<span class="preprocessor"> GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16596"></a><span class="lineno">16596</span>&#160;</div><div class="line"><a name="l16597"></a><span class="lineno">16597</span>&#160;<span class="comment">// Macros for testing equalities and inequalities.</span></div><div class="line"><a name="l16598"></a><span class="lineno">16598</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16599"></a><span class="lineno">16599</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2</span></div><div class="line"><a name="l16600"></a><span class="lineno">16600</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2</span></div><div class="line"><a name="l16601"></a><span class="lineno">16601</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 &lt; v2</span></div><div class="line"><a name="l16602"></a><span class="lineno">16602</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 &lt;= v2</span></div><div class="line"><a name="l16603"></a><span class="lineno">16603</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 &gt; v2</span></div><div class="line"><a name="l16604"></a><span class="lineno">16604</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 &gt;= v2</span></div><div class="line"><a name="l16605"></a><span class="lineno">16605</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16606"></a><span class="lineno">16606</span>&#160;<span class="comment">// When they are not, Google Test prints both the tested expressions and</span></div><div class="line"><a name="l16607"></a><span class="lineno">16607</span>&#160;<span class="comment">// their actual values. The values must be compatible built-in types,</span></div><div class="line"><a name="l16608"></a><span class="lineno">16608</span>&#160;<span class="comment">// or you will get a compiler error. By &quot;compatible&quot; we mean that the</span></div><div class="line"><a name="l16609"></a><span class="lineno">16609</span>&#160;<span class="comment">// values can be compared by the respective operator.</span></div><div class="line"><a name="l16610"></a><span class="lineno">16610</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16611"></a><span class="lineno">16611</span>&#160;<span class="comment">// Note:</span></div><div class="line"><a name="l16612"></a><span class="lineno">16612</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16613"></a><span class="lineno">16613</span>&#160;<span class="comment">// 1. It is possible to make a user-defined type work with</span></div><div class="line"><a name="l16614"></a><span class="lineno">16614</span>&#160;<span class="comment">// {ASSERT|EXPECT}_??(), but that requires overloading the</span></div><div class="line"><a name="l16615"></a><span class="lineno">16615</span>&#160;<span class="comment">// comparison operators and is thus discouraged by the Google C++</span></div><div class="line"><a name="l16616"></a><span class="lineno">16616</span>&#160;<span class="comment">// Usage Guide. Therefore, you are advised to use the</span></div><div class="line"><a name="l16617"></a><span class="lineno">16617</span>&#160;<span class="comment">// {ASSERT|EXPECT}_TRUE() macro to assert that two objects are</span></div><div class="line"><a name="l16618"></a><span class="lineno">16618</span>&#160;<span class="comment">// equal.</span></div><div class="line"><a name="l16619"></a><span class="lineno">16619</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16620"></a><span class="lineno">16620</span>&#160;<span class="comment">// 2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on</span></div><div class="line"><a name="l16621"></a><span class="lineno">16621</span>&#160;<span class="comment">// pointers (in particular, C strings). Therefore, if you use it</span></div><div class="line"><a name="l16622"></a><span class="lineno">16622</span>&#160;<span class="comment">// with two C strings, you are testing how their locations in memory</span></div><div class="line"><a name="l16623"></a><span class="lineno">16623</span>&#160;<span class="comment">// are related, not how their content is related. To compare two C</span></div><div class="line"><a name="l16624"></a><span class="lineno">16624</span>&#160;<span class="comment">// strings by content, use {ASSERT|EXPECT}_STR*().</span></div><div class="line"><a name="l16625"></a><span class="lineno">16625</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16626"></a><span class="lineno">16626</span>&#160;<span class="comment">// 3. {ASSERT|EXPECT}_EQ(v1, v2) is preferred to</span></div><div class="line"><a name="l16627"></a><span class="lineno">16627</span>&#160;<span class="comment">// {ASSERT|EXPECT}_TRUE(v1 == v2), as the former tells you</span></div><div class="line"><a name="l16628"></a><span class="lineno">16628</span>&#160;<span class="comment">// what the actual value is when it fails, and similarly for the</span></div><div class="line"><a name="l16629"></a><span class="lineno">16629</span>&#160;<span class="comment">// other comparisons.</span></div><div class="line"><a name="l16630"></a><span class="lineno">16630</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16631"></a><span class="lineno">16631</span>&#160;<span class="comment">// 4. Do not depend on the order in which {ASSERT|EXPECT}_??()</span></div><div class="line"><a name="l16632"></a><span class="lineno">16632</span>&#160;<span class="comment">// evaluate their arguments, which is undefined.</span></div><div class="line"><a name="l16633"></a><span class="lineno">16633</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16634"></a><span class="lineno">16634</span>&#160;<span class="comment">// 5. These macros evaluate their arguments exactly once.</span></div><div class="line"><a name="l16635"></a><span class="lineno">16635</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16636"></a><span class="lineno">16636</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l16637"></a><span class="lineno">16637</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16638"></a><span class="lineno">16638</span>&#160;<span class="comment">// EXPECT_NE(Foo(), 5);</span></div><div class="line"><a name="l16639"></a><span class="lineno">16639</span>&#160;<span class="comment">// EXPECT_EQ(a_pointer, NULL);</span></div><div class="line"><a name="l16640"></a><span class="lineno">16640</span>&#160;<span class="comment">// ASSERT_LT(i, array_size);</span></div><div class="line"><a name="l16641"></a><span class="lineno">16641</span>&#160;<span class="comment">// ASSERT_GT(records.size(), 0) &lt;&lt; &quot;There is no record left.&quot;;</span></div><div class="line"><a name="l16642"></a><span class="lineno">16642</span>&#160;</div><div class="line"><a name="l16643"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4159019abda84f5366acdb7604ff220a">16643</a></span>&#160;<span class="preprocessor">#define EXPECT_EQ(val1, val2) \</span></div><div class="line"><a name="l16644"></a><span class="lineno">16644</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal:: \</span></div><div class="line"><a name="l16645"></a><span class="lineno">16645</span>&#160;<span class="preprocessor"> EqHelper&lt;GTEST_IS_NULL_LITERAL_(val1)&gt;::Compare, \</span></div><div class="line"><a name="l16646"></a><span class="lineno">16646</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16647"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6ae7443947f25abc58bfcfcfc56b0d75">16647</a></span>&#160;<span class="preprocessor">#define EXPECT_NE(val1, val2) \</span></div><div class="line"><a name="l16648"></a><span class="lineno">16648</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)</span></div><div class="line"><a name="l16649"></a><span class="lineno"><a class="line" href="gtest_8h.html#ae0f265632323b4a07b585dcfde10f60a">16649</a></span>&#160;<span class="preprocessor">#define EXPECT_LE(val1, val2) \</span></div><div class="line"><a name="l16650"></a><span class="lineno">16650</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)</span></div><div class="line"><a name="l16651"></a><span class="lineno"><a class="line" href="gtest_8h.html#af28c06b2b5e8dee151896f299f6610cf">16651</a></span>&#160;<span class="preprocessor">#define EXPECT_LT(val1, val2) \</span></div><div class="line"><a name="l16652"></a><span class="lineno">16652</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)</span></div><div class="line"><a name="l16653"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab7a0ff4bfa4d9b27baa118d8b0756ca0">16653</a></span>&#160;<span class="preprocessor">#define EXPECT_GE(val1, val2) \</span></div><div class="line"><a name="l16654"></a><span class="lineno">16654</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)</span></div><div class="line"><a name="l16655"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa8bc8320813e1abb0016129b636e3b27">16655</a></span>&#160;<span class="preprocessor">#define EXPECT_GT(val1, val2) \</span></div><div class="line"><a name="l16656"></a><span class="lineno">16656</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)</span></div><div class="line"><a name="l16657"></a><span class="lineno">16657</span>&#160;</div><div class="line"><a name="l16658"></a><span class="lineno"><a class="line" href="gtest_8h.html#a8a7a47387090810cdfe78933d348182d">16658</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_EQ(val1, val2) \</span></div><div class="line"><a name="l16659"></a><span class="lineno">16659</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal:: \</span></div><div class="line"><a name="l16660"></a><span class="lineno">16660</span>&#160;<span class="preprocessor"> EqHelper&lt;GTEST_IS_NULL_LITERAL_(val1)&gt;::Compare, \</span></div><div class="line"><a name="l16661"></a><span class="lineno">16661</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16662"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6fa9bb2b6731eba8f481e40e9e4931b3">16662</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_NE(val1, val2) \</span></div><div class="line"><a name="l16663"></a><span class="lineno">16663</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)</span></div><div class="line"><a name="l16664"></a><span class="lineno"><a class="line" href="gtest_8h.html#abef04dcd4a0259d378de7b3b3ffb6730">16664</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_LE(val1, val2) \</span></div><div class="line"><a name="l16665"></a><span class="lineno">16665</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)</span></div><div class="line"><a name="l16666"></a><span class="lineno"><a class="line" href="gtest_8h.html#a5a75667e637febd18e5f7d4f3abf55e8">16666</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_LT(val1, val2) \</span></div><div class="line"><a name="l16667"></a><span class="lineno">16667</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)</span></div><div class="line"><a name="l16668"></a><span class="lineno"><a class="line" href="gtest_8h.html#a55373d99c079ff1b894e2eb5bcd15c5a">16668</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_GE(val1, val2) \</span></div><div class="line"><a name="l16669"></a><span class="lineno">16669</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)</span></div><div class="line"><a name="l16670"></a><span class="lineno"><a class="line" href="gtest_8h.html#a088b9056fd1c1f316b41c22f64deb33a">16670</a></span>&#160;<span class="preprocessor">#define GTEST_ASSERT_GT(val1, val2) \</span></div><div class="line"><a name="l16671"></a><span class="lineno">16671</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)</span></div><div class="line"><a name="l16672"></a><span class="lineno">16672</span>&#160;</div><div class="line"><a name="l16673"></a><span class="lineno">16673</span>&#160;<span class="comment">// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of</span></div><div class="line"><a name="l16674"></a><span class="lineno">16674</span>&#160;<span class="comment">// ASSERT_XY(), which clashes with some users&#39; own code.</span></div><div class="line"><a name="l16675"></a><span class="lineno">16675</span>&#160;</div><div class="line"><a name="l16676"></a><span class="lineno">16676</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_EQ</span></div><div class="line"><a name="l16677"></a><span class="lineno"><a class="line" href="gtest_8h.html#a1a6db8b1338ee7040329322b77779086">16677</a></span>&#160;<span class="preprocessor"># define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)</span></div><div class="line"><a name="l16678"></a><span class="lineno">16678</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16679"></a><span class="lineno">16679</span>&#160;</div><div class="line"><a name="l16680"></a><span class="lineno">16680</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_NE</span></div><div class="line"><a name="l16681"></a><span class="lineno"><a class="line" href="gtest_8h.html#aa866c8dece57912e6f51495ed3e8d8d5">16681</a></span>&#160;<span class="preprocessor"># define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)</span></div><div class="line"><a name="l16682"></a><span class="lineno">16682</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16683"></a><span class="lineno">16683</span>&#160;</div><div class="line"><a name="l16684"></a><span class="lineno">16684</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_LE</span></div><div class="line"><a name="l16685"></a><span class="lineno"><a class="line" href="gtest_8h.html#a775643748feff0b490aae651d041e971">16685</a></span>&#160;<span class="preprocessor"># define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)</span></div><div class="line"><a name="l16686"></a><span class="lineno">16686</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16687"></a><span class="lineno">16687</span>&#160;</div><div class="line"><a name="l16688"></a><span class="lineno">16688</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_LT</span></div><div class="line"><a name="l16689"></a><span class="lineno"><a class="line" href="gtest_8h.html#affc4f9cae4c3aabfe60fced83737b42c">16689</a></span>&#160;<span class="preprocessor"># define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)</span></div><div class="line"><a name="l16690"></a><span class="lineno">16690</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16691"></a><span class="lineno">16691</span>&#160;</div><div class="line"><a name="l16692"></a><span class="lineno">16692</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_GE</span></div><div class="line"><a name="l16693"></a><span class="lineno"><a class="line" href="gtest_8h.html#af4ff5dc71479fcb374b6bc2ed195bcc4">16693</a></span>&#160;<span class="preprocessor"># define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)</span></div><div class="line"><a name="l16694"></a><span class="lineno">16694</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16695"></a><span class="lineno">16695</span>&#160;</div><div class="line"><a name="l16696"></a><span class="lineno">16696</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_ASSERT_GT</span></div><div class="line"><a name="l16697"></a><span class="lineno"><a class="line" href="gtest_8h.html#a16a882d4eafc9f8643867aea40879140">16697</a></span>&#160;<span class="preprocessor"># define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)</span></div><div class="line"><a name="l16698"></a><span class="lineno">16698</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16699"></a><span class="lineno">16699</span>&#160;</div><div class="line"><a name="l16700"></a><span class="lineno">16700</span>&#160;<span class="comment">// C-string Comparisons. All tests treat NULL and any non-NULL string</span></div><div class="line"><a name="l16701"></a><span class="lineno">16701</span>&#160;<span class="comment">// as different. Two NULLs are equal.</span></div><div class="line"><a name="l16702"></a><span class="lineno">16702</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16703"></a><span class="lineno">16703</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_STREQ(s1, s2): Tests that s1 == s2</span></div><div class="line"><a name="l16704"></a><span class="lineno">16704</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_STRNE(s1, s2): Tests that s1 != s2</span></div><div class="line"><a name="l16705"></a><span class="lineno">16705</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case</span></div><div class="line"><a name="l16706"></a><span class="lineno">16706</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case</span></div><div class="line"><a name="l16707"></a><span class="lineno">16707</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16708"></a><span class="lineno">16708</span>&#160;<span class="comment">// For wide or narrow string objects, you can use the</span></div><div class="line"><a name="l16709"></a><span class="lineno">16709</span>&#160;<span class="comment">// {ASSERT|EXPECT}_??() macros.</span></div><div class="line"><a name="l16710"></a><span class="lineno">16710</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16711"></a><span class="lineno">16711</span>&#160;<span class="comment">// Don&#39;t depend on the order in which the arguments are evaluated,</span></div><div class="line"><a name="l16712"></a><span class="lineno">16712</span>&#160;<span class="comment">// which is undefined.</span></div><div class="line"><a name="l16713"></a><span class="lineno">16713</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16714"></a><span class="lineno">16714</span>&#160;<span class="comment">// These macros evaluate their arguments exactly once.</span></div><div class="line"><a name="l16715"></a><span class="lineno">16715</span>&#160;</div><div class="line"><a name="l16716"></a><span class="lineno"><a class="line" href="gtest_8h.html#ad20f7b94ac5081e16f0005b94e95f0c6">16716</a></span>&#160;<span class="preprocessor">#define EXPECT_STREQ(s1, s2) \</span></div><div class="line"><a name="l16717"></a><span class="lineno">16717</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)</span></div><div class="line"><a name="l16718"></a><span class="lineno"><a class="line" href="gtest_8h.html#aee7e9c42f55549dbc0dfc42391eb9775">16718</a></span>&#160;<span class="preprocessor">#define EXPECT_STRNE(s1, s2) \</span></div><div class="line"><a name="l16719"></a><span class="lineno">16719</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)</span></div><div class="line"><a name="l16720"></a><span class="lineno"><a class="line" href="gtest_8h.html#a740cab7e3eec5c178a64b4f558bde66e">16720</a></span>&#160;<span class="preprocessor">#define EXPECT_STRCASEEQ(s1, s2) \</span></div><div class="line"><a name="l16721"></a><span class="lineno">16721</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)</span></div><div class="line"><a name="l16722"></a><span class="lineno"><a class="line" href="gtest_8h.html#a07d0b5cbd3b5f7c8b6f44c609046ff07">16722</a></span>&#160;<span class="preprocessor">#define EXPECT_STRCASENE(s1, s2)\</span></div><div class="line"><a name="l16723"></a><span class="lineno">16723</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)</span></div><div class="line"><a name="l16724"></a><span class="lineno">16724</span>&#160;</div><div class="line"><a name="l16725"></a><span class="lineno"><a class="line" href="gtest_8h.html#a74f4189ea570bab9a65d47104659ef9c">16725</a></span>&#160;<span class="preprocessor">#define ASSERT_STREQ(s1, s2) \</span></div><div class="line"><a name="l16726"></a><span class="lineno">16726</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)</span></div><div class="line"><a name="l16727"></a><span class="lineno"><a class="line" href="gtest_8h.html#a3d679660ac1b2f9f6e6c7608452af923">16727</a></span>&#160;<span class="preprocessor">#define ASSERT_STRNE(s1, s2) \</span></div><div class="line"><a name="l16728"></a><span class="lineno">16728</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)</span></div><div class="line"><a name="l16729"></a><span class="lineno"><a class="line" href="gtest_8h.html#a58847dd696200a3268361401dfcd0fa0">16729</a></span>&#160;<span class="preprocessor">#define ASSERT_STRCASEEQ(s1, s2) \</span></div><div class="line"><a name="l16730"></a><span class="lineno">16730</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)</span></div><div class="line"><a name="l16731"></a><span class="lineno"><a class="line" href="gtest_8h.html#ac3d2c3836b103068a050f32585b2aaad">16731</a></span>&#160;<span class="preprocessor">#define ASSERT_STRCASENE(s1, s2)\</span></div><div class="line"><a name="l16732"></a><span class="lineno">16732</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)</span></div><div class="line"><a name="l16733"></a><span class="lineno">16733</span>&#160;</div><div class="line"><a name="l16734"></a><span class="lineno">16734</span>&#160;<span class="comment">// Macros for comparing floating-point numbers.</span></div><div class="line"><a name="l16735"></a><span class="lineno">16735</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16736"></a><span class="lineno">16736</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_FLOAT_EQ(val1, val2):</span></div><div class="line"><a name="l16737"></a><span class="lineno">16737</span>&#160;<span class="comment">// Tests that two float values are almost equal.</span></div><div class="line"><a name="l16738"></a><span class="lineno">16738</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_DOUBLE_EQ(val1, val2):</span></div><div class="line"><a name="l16739"></a><span class="lineno">16739</span>&#160;<span class="comment">// Tests that two double values are almost equal.</span></div><div class="line"><a name="l16740"></a><span class="lineno">16740</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):</span></div><div class="line"><a name="l16741"></a><span class="lineno">16741</span>&#160;<span class="comment">// Tests that v1 and v2 are within the given distance to each other.</span></div><div class="line"><a name="l16742"></a><span class="lineno">16742</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16743"></a><span class="lineno">16743</span>&#160;<span class="comment">// Google Test uses ULP-based comparison to automatically pick a default</span></div><div class="line"><a name="l16744"></a><span class="lineno">16744</span>&#160;<span class="comment">// error bound that is appropriate for the operands. See the</span></div><div class="line"><a name="l16745"></a><span class="lineno">16745</span>&#160;<span class="comment">// FloatingPoint template class in gtest-internal.h if you are</span></div><div class="line"><a name="l16746"></a><span class="lineno">16746</span>&#160;<span class="comment">// interested in the implementation details.</span></div><div class="line"><a name="l16747"></a><span class="lineno">16747</span>&#160;</div><div class="line"><a name="l16748"></a><span class="lineno"><a class="line" href="gtest_8h.html#a981e552322fb084042d02d6dfa9860ca">16748</a></span>&#160;<span class="preprocessor">#define EXPECT_FLOAT_EQ(val1, val2)\</span></div><div class="line"><a name="l16749"></a><span class="lineno">16749</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ&lt;float&gt;, \</span></div><div class="line"><a name="l16750"></a><span class="lineno">16750</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16751"></a><span class="lineno">16751</span>&#160;</div><div class="line"><a name="l16752"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab4852f9430cf656690256ea7fe6323b8">16752</a></span>&#160;<span class="preprocessor">#define EXPECT_DOUBLE_EQ(val1, val2)\</span></div><div class="line"><a name="l16753"></a><span class="lineno">16753</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ&lt;double&gt;, \</span></div><div class="line"><a name="l16754"></a><span class="lineno">16754</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16755"></a><span class="lineno">16755</span>&#160;</div><div class="line"><a name="l16756"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4663ffbf844baa54bdb29f9148fd0f96">16756</a></span>&#160;<span class="preprocessor">#define ASSERT_FLOAT_EQ(val1, val2)\</span></div><div class="line"><a name="l16757"></a><span class="lineno">16757</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ&lt;float&gt;, \</span></div><div class="line"><a name="l16758"></a><span class="lineno">16758</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16759"></a><span class="lineno">16759</span>&#160;</div><div class="line"><a name="l16760"></a><span class="lineno"><a class="line" href="gtest_8h.html#a6617da62e5ae5490995a3bfca1f331a9">16760</a></span>&#160;<span class="preprocessor">#define ASSERT_DOUBLE_EQ(val1, val2)\</span></div><div class="line"><a name="l16761"></a><span class="lineno">16761</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ&lt;double&gt;, \</span></div><div class="line"><a name="l16762"></a><span class="lineno">16762</span>&#160;<span class="preprocessor"> val1, val2)</span></div><div class="line"><a name="l16763"></a><span class="lineno">16763</span>&#160;</div><div class="line"><a name="l16764"></a><span class="lineno"><a class="line" href="gtest_8h.html#a88cd7978af0e7dbd42cd606dfabdcc6f">16764</a></span>&#160;<span class="preprocessor">#define EXPECT_NEAR(val1, val2, abs_error)\</span></div><div class="line"><a name="l16765"></a><span class="lineno">16765</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \</span></div><div class="line"><a name="l16766"></a><span class="lineno">16766</span>&#160;<span class="preprocessor"> val1, val2, abs_error)</span></div><div class="line"><a name="l16767"></a><span class="lineno">16767</span>&#160;</div><div class="line"><a name="l16768"></a><span class="lineno"><a class="line" href="gtest_8h.html#a73cce6b752d204f91a36bef2f8e663b3">16768</a></span>&#160;<span class="preprocessor">#define ASSERT_NEAR(val1, val2, abs_error)\</span></div><div class="line"><a name="l16769"></a><span class="lineno">16769</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \</span></div><div class="line"><a name="l16770"></a><span class="lineno">16770</span>&#160;<span class="preprocessor"> val1, val2, abs_error)</span></div><div class="line"><a name="l16771"></a><span class="lineno">16771</span>&#160;</div><div class="line"><a name="l16772"></a><span class="lineno">16772</span>&#160;<span class="comment">// These predicate format functions work on floating-point values, and</span></div><div class="line"><a name="l16773"></a><span class="lineno">16773</span>&#160;<span class="comment">// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g.</span></div><div class="line"><a name="l16774"></a><span class="lineno">16774</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16775"></a><span class="lineno">16775</span>&#160;<span class="comment">// EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0);</span></div><div class="line"><a name="l16776"></a><span class="lineno">16776</span>&#160;</div><div class="line"><a name="l16777"></a><span class="lineno">16777</span>&#160;<span class="comment">// Asserts that val1 is less than, or almost equal to, val2. Fails</span></div><div class="line"><a name="l16778"></a><span class="lineno">16778</span>&#160;<span class="comment">// otherwise. In particular, it fails if either val1 or val2 is NaN.</span></div><div class="line"><a name="l16779"></a><span class="lineno">16779</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a69106491c2e7f50e50da0ce5e8ae4374">FloatLE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr1, <span class="keyword">const</span> <span class="keywordtype">char</span>* expr2,</div><div class="line"><a name="l16780"></a><span class="lineno">16780</span>&#160; <span class="keywordtype">float</span> val1, <span class="keywordtype">float</span> val2);</div><div class="line"><a name="l16781"></a><span class="lineno">16781</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> AssertionResult <a class="code" href="namespacetesting.html#a84c020b981d0eb4eabfb0feda155aaaf">DoubleLE</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* expr1, <span class="keyword">const</span> <span class="keywordtype">char</span>* expr2,</div><div class="line"><a name="l16782"></a><span class="lineno">16782</span>&#160; <span class="keywordtype">double</span> val1, <span class="keywordtype">double</span> val2);</div><div class="line"><a name="l16783"></a><span class="lineno">16783</span>&#160;</div><div class="line"><a name="l16784"></a><span class="lineno">16784</span>&#160;</div><div class="line"><a name="l16785"></a><span class="lineno">16785</span>&#160;<span class="preprocessor">#if GTEST_OS_WINDOWS</span></div><div class="line"><a name="l16786"></a><span class="lineno">16786</span>&#160;</div><div class="line"><a name="l16787"></a><span class="lineno">16787</span>&#160;<span class="comment">// Macros that test for HRESULT failure and success, these are only useful</span></div><div class="line"><a name="l16788"></a><span class="lineno">16788</span>&#160;<span class="comment">// on Windows, and rely on Windows SDK macros and APIs to compile.</span></div><div class="line"><a name="l16789"></a><span class="lineno">16789</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16790"></a><span class="lineno">16790</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr)</span></div><div class="line"><a name="l16791"></a><span class="lineno">16791</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16792"></a><span class="lineno">16792</span>&#160;<span class="comment">// When expr unexpectedly fails or succeeds, Google Test prints the</span></div><div class="line"><a name="l16793"></a><span class="lineno">16793</span>&#160;<span class="comment">// expected result and the actual result with both a human-readable</span></div><div class="line"><a name="l16794"></a><span class="lineno">16794</span>&#160;<span class="comment">// string representation of the error, if available, as well as the</span></div><div class="line"><a name="l16795"></a><span class="lineno">16795</span>&#160;<span class="comment">// hex result code.</span></div><div class="line"><a name="l16796"></a><span class="lineno">16796</span>&#160;<span class="preprocessor"># define EXPECT_HRESULT_SUCCEEDED(expr) \</span></div><div class="line"><a name="l16797"></a><span class="lineno">16797</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))</span></div><div class="line"><a name="l16798"></a><span class="lineno">16798</span>&#160;</div><div class="line"><a name="l16799"></a><span class="lineno">16799</span>&#160;<span class="preprocessor"># define ASSERT_HRESULT_SUCCEEDED(expr) \</span></div><div class="line"><a name="l16800"></a><span class="lineno">16800</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))</span></div><div class="line"><a name="l16801"></a><span class="lineno">16801</span>&#160;</div><div class="line"><a name="l16802"></a><span class="lineno">16802</span>&#160;<span class="preprocessor"># define EXPECT_HRESULT_FAILED(expr) \</span></div><div class="line"><a name="l16803"></a><span class="lineno">16803</span>&#160;<span class="preprocessor"> EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))</span></div><div class="line"><a name="l16804"></a><span class="lineno">16804</span>&#160;</div><div class="line"><a name="l16805"></a><span class="lineno">16805</span>&#160;<span class="preprocessor"># define ASSERT_HRESULT_FAILED(expr) \</span></div><div class="line"><a name="l16806"></a><span class="lineno">16806</span>&#160;<span class="preprocessor"> ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))</span></div><div class="line"><a name="l16807"></a><span class="lineno">16807</span>&#160;</div><div class="line"><a name="l16808"></a><span class="lineno">16808</span>&#160;<span class="preprocessor">#endif // GTEST_OS_WINDOWS</span></div><div class="line"><a name="l16809"></a><span class="lineno">16809</span>&#160;</div><div class="line"><a name="l16810"></a><span class="lineno">16810</span>&#160;<span class="comment">// Macros that execute statement and check that it doesn&#39;t generate new fatal</span></div><div class="line"><a name="l16811"></a><span class="lineno">16811</span>&#160;<span class="comment">// failures in the current thread.</span></div><div class="line"><a name="l16812"></a><span class="lineno">16812</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16813"></a><span class="lineno">16813</span>&#160;<span class="comment">// * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement);</span></div><div class="line"><a name="l16814"></a><span class="lineno">16814</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16815"></a><span class="lineno">16815</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l16816"></a><span class="lineno">16816</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16817"></a><span class="lineno">16817</span>&#160;<span class="comment">// EXPECT_NO_FATAL_FAILURE(Process());</span></div><div class="line"><a name="l16818"></a><span class="lineno">16818</span>&#160;<span class="comment">// ASSERT_NO_FATAL_FAILURE(Process()) &lt;&lt; &quot;Process() failed&quot;;</span></div><div class="line"><a name="l16819"></a><span class="lineno">16819</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16820"></a><span class="lineno"><a class="line" href="gtest_8h.html#a5034fda3490aad5a93942ac83f4cea49">16820</a></span>&#160;<span class="preprocessor">#define ASSERT_NO_FATAL_FAILURE(statement) \</span></div><div class="line"><a name="l16821"></a><span class="lineno">16821</span>&#160;<span class="preprocessor"> GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)</span></div><div class="line"><a name="l16822"></a><span class="lineno"><a class="line" href="gtest_8h.html#a067c02ccaf3171d6e1781cd0f8cdcf74">16822</a></span>&#160;<span class="preprocessor">#define EXPECT_NO_FATAL_FAILURE(statement) \</span></div><div class="line"><a name="l16823"></a><span class="lineno">16823</span>&#160;<span class="preprocessor"> GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)</span></div><div class="line"><a name="l16824"></a><span class="lineno">16824</span>&#160;</div><div class="line"><a name="l16825"></a><span class="lineno">16825</span>&#160;<span class="comment">// Causes a trace (including the given source file path and line number,</span></div><div class="line"><a name="l16826"></a><span class="lineno">16826</span>&#160;<span class="comment">// and the given message) to be included in every test failure message generated</span></div><div class="line"><a name="l16827"></a><span class="lineno">16827</span>&#160;<span class="comment">// by code in the scope of the lifetime of an instance of this class. The effect</span></div><div class="line"><a name="l16828"></a><span class="lineno">16828</span>&#160;<span class="comment">// is undone with the destruction of the instance.</span></div><div class="line"><a name="l16829"></a><span class="lineno">16829</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16830"></a><span class="lineno">16830</span>&#160;<span class="comment">// The message argument can be anything streamable to std::ostream.</span></div><div class="line"><a name="l16831"></a><span class="lineno">16831</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16832"></a><span class="lineno">16832</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l16833"></a><span class="lineno">16833</span>&#160;<span class="comment">// testing::ScopedTrace trace(&quot;file.cc&quot;, 123, &quot;message&quot;);</span></div><div class="line"><a name="l16834"></a><span class="lineno">16834</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16835"></a><span class="lineno"><a class="line" href="classtesting_1_1_scoped_trace.html">16835</a></span>&#160;<span class="keyword">class </span><a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="classtesting_1_1_scoped_trace.html">ScopedTrace</a> {</div><div class="line"><a name="l16836"></a><span class="lineno">16836</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l16837"></a><span class="lineno">16837</span>&#160; <span class="comment">// The c&#39;tor pushes the given source file location and message onto</span></div><div class="line"><a name="l16838"></a><span class="lineno">16838</span>&#160; <span class="comment">// a trace stack maintained by Google Test.</span></div><div class="line"><a name="l16839"></a><span class="lineno">16839</span>&#160;</div><div class="line"><a name="l16840"></a><span class="lineno">16840</span>&#160; <span class="comment">// Template version. Uses Message() to convert the values into strings.</span></div><div class="line"><a name="l16841"></a><span class="lineno">16841</span>&#160; <span class="comment">// Slow, but flexible.</span></div><div class="line"><a name="l16842"></a><span class="lineno">16842</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l16843"></a><span class="lineno"><a class="line" href="classtesting_1_1_scoped_trace.html#a2da90b95d682d518cca472934d53c59c">16843</a></span>&#160; <a class="code" href="classtesting_1_1_scoped_trace.html#a2da90b95d682d518cca472934d53c59c">ScopedTrace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <span class="keyword">const</span> T&amp; message) {</div><div class="line"><a name="l16844"></a><span class="lineno">16844</span>&#160; PushTrace(file, line, (<a class="code" href="classtesting_1_1_message.html">Message</a>() &lt;&lt; message).GetString());</div><div class="line"><a name="l16845"></a><span class="lineno">16845</span>&#160; }</div><div class="line"><a name="l16846"></a><span class="lineno">16846</span>&#160;</div><div class="line"><a name="l16847"></a><span class="lineno">16847</span>&#160; <span class="comment">// Optimize for some known types.</span></div><div class="line"><a name="l16848"></a><span class="lineno"><a class="line" href="classtesting_1_1_scoped_trace.html#accd2a06cc941ffd7d6fe109adfdb4f19">16848</a></span>&#160; <a class="code" href="classtesting_1_1_scoped_trace.html#accd2a06cc941ffd7d6fe109adfdb4f19">ScopedTrace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* message) {</div><div class="line"><a name="l16849"></a><span class="lineno">16849</span>&#160; PushTrace(file, line, message ? message : <span class="stringliteral">&quot;(null)&quot;</span>);</div><div class="line"><a name="l16850"></a><span class="lineno">16850</span>&#160; }</div><div class="line"><a name="l16851"></a><span class="lineno">16851</span>&#160;</div><div class="line"><a name="l16852"></a><span class="lineno">16852</span>&#160;<span class="preprocessor">#if GTEST_HAS_GLOBAL_STRING</span></div><div class="line"><a name="l16853"></a><span class="lineno">16853</span>&#160; <a class="code" href="classtesting_1_1_scoped_trace.html">ScopedTrace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">const ::string</a>&amp; message) {</div><div class="line"><a name="l16854"></a><span class="lineno">16854</span>&#160; PushTrace(file, line, message);</div><div class="line"><a name="l16855"></a><span class="lineno">16855</span>&#160; }</div><div class="line"><a name="l16856"></a><span class="lineno">16856</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16857"></a><span class="lineno">16857</span>&#160;</div><div class="line"><a name="l16858"></a><span class="lineno"><a class="line" href="classtesting_1_1_scoped_trace.html#a1f453a2aade0db6955a111a7cb329615">16858</a></span>&#160; <a class="code" href="classtesting_1_1_scoped_trace.html#a1f453a2aade0db6955a111a7cb329615">ScopedTrace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <span class="keyword">const</span> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a>&amp; message) {</div><div class="line"><a name="l16859"></a><span class="lineno">16859</span>&#160; PushTrace(file, line, message);</div><div class="line"><a name="l16860"></a><span class="lineno">16860</span>&#160; }</div><div class="line"><a name="l16861"></a><span class="lineno">16861</span>&#160;</div><div class="line"><a name="l16862"></a><span class="lineno">16862</span>&#160; <span class="comment">// The d&#39;tor pops the info pushed by the c&#39;tor.</span></div><div class="line"><a name="l16863"></a><span class="lineno">16863</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l16864"></a><span class="lineno">16864</span>&#160; <span class="comment">// Note that the d&#39;tor is not virtual in order to be efficient.</span></div><div class="line"><a name="l16865"></a><span class="lineno">16865</span>&#160; <span class="comment">// Don&#39;t inherit from ScopedTrace!</span></div><div class="line"><a name="l16866"></a><span class="lineno">16866</span>&#160; ~<a class="code" href="classtesting_1_1_scoped_trace.html">ScopedTrace</a>();</div><div class="line"><a name="l16867"></a><span class="lineno">16867</span>&#160;</div><div class="line"><a name="l16868"></a><span class="lineno">16868</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l16869"></a><span class="lineno">16869</span>&#160; <span class="keywordtype">void</span> PushTrace(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> message);</div><div class="line"><a name="l16870"></a><span class="lineno">16870</span>&#160;</div><div class="line"><a name="l16871"></a><span class="lineno">16871</span>&#160; <a class="code" href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a>(<a class="code" href="classtesting_1_1_scoped_trace.html">ScopedTrace</a>);</div><div class="line"><a name="l16872"></a><span class="lineno">16872</span>&#160;} <a class="code" href="namespacetesting.html#aa09221196f0a830d5bf1c63ffce69dc3">GTEST_ATTRIBUTE_UNUSED_</a>; <span class="comment">// A ScopedTrace object does its job in its</span></div><div class="line"><a name="l16873"></a><span class="lineno">16873</span>&#160; <span class="comment">// c&#39;tor and d&#39;tor. Therefore it doesn&#39;t</span></div><div class="line"><a name="l16874"></a><span class="lineno">16874</span>&#160; <span class="comment">// need to be used otherwise.</span></div><div class="line"><a name="l16875"></a><span class="lineno">16875</span>&#160;</div><div class="line"><a name="l16876"></a><span class="lineno">16876</span>&#160;<span class="comment">// Causes a trace (including the source file path, the current line</span></div><div class="line"><a name="l16877"></a><span class="lineno">16877</span>&#160;<span class="comment">// number, and the given message) to be included in every test failure</span></div><div class="line"><a name="l16878"></a><span class="lineno">16878</span>&#160;<span class="comment">// message generated by code in the current scope. The effect is</span></div><div class="line"><a name="l16879"></a><span class="lineno">16879</span>&#160;<span class="comment">// undone when the control leaves the current scope.</span></div><div class="line"><a name="l16880"></a><span class="lineno">16880</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16881"></a><span class="lineno">16881</span>&#160;<span class="comment">// The message argument can be anything streamable to std::ostream.</span></div><div class="line"><a name="l16882"></a><span class="lineno">16882</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16883"></a><span class="lineno">16883</span>&#160;<span class="comment">// In the implementation, we include the current line number as part</span></div><div class="line"><a name="l16884"></a><span class="lineno">16884</span>&#160;<span class="comment">// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s</span></div><div class="line"><a name="l16885"></a><span class="lineno">16885</span>&#160;<span class="comment">// to appear in the same block - as long as they are on different</span></div><div class="line"><a name="l16886"></a><span class="lineno">16886</span>&#160;<span class="comment">// lines.</span></div><div class="line"><a name="l16887"></a><span class="lineno">16887</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16888"></a><span class="lineno">16888</span>&#160;<span class="comment">// Assuming that each thread maintains its own stack of traces.</span></div><div class="line"><a name="l16889"></a><span class="lineno">16889</span>&#160;<span class="comment">// Therefore, a SCOPED_TRACE() would (correctly) only affect the</span></div><div class="line"><a name="l16890"></a><span class="lineno">16890</span>&#160;<span class="comment">// assertions in its own thread.</span></div><div class="line"><a name="l16891"></a><span class="lineno"><a class="line" href="gtest_8h.html#a4dac08f15adc8cb1ee0e5c1bfb0f440d">16891</a></span>&#160;<span class="preprocessor">#define SCOPED_TRACE(message) \</span></div><div class="line"><a name="l16892"></a><span class="lineno">16892</span>&#160;<span class="preprocessor"> ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\</span></div><div class="line"><a name="l16893"></a><span class="lineno">16893</span>&#160;<span class="preprocessor"> __FILE__, __LINE__, (message))</span></div><div class="line"><a name="l16894"></a><span class="lineno">16894</span>&#160;</div><div class="line"><a name="l16895"></a><span class="lineno">16895</span>&#160;</div><div class="line"><a name="l16896"></a><span class="lineno">16896</span>&#160;<span class="comment">// Compile-time assertion for type equality.</span></div><div class="line"><a name="l16897"></a><span class="lineno">16897</span>&#160;<span class="comment">// StaticAssertTypeEq&lt;type1, type2&gt;() compiles iff type1 and type2 are</span></div><div class="line"><a name="l16898"></a><span class="lineno">16898</span>&#160;<span class="comment">// the same type. The value it returns is not interesting.</span></div><div class="line"><a name="l16899"></a><span class="lineno">16899</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16900"></a><span class="lineno">16900</span>&#160;<span class="comment">// Instead of making StaticAssertTypeEq a class template, we make it a</span></div><div class="line"><a name="l16901"></a><span class="lineno">16901</span>&#160;<span class="comment">// function template that invokes a helper class template. This</span></div><div class="line"><a name="l16902"></a><span class="lineno">16902</span>&#160;<span class="comment">// prevents a user from misusing StaticAssertTypeEq&lt;T1, T2&gt; by</span></div><div class="line"><a name="l16903"></a><span class="lineno">16903</span>&#160;<span class="comment">// defining objects of that type.</span></div><div class="line"><a name="l16904"></a><span class="lineno">16904</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16905"></a><span class="lineno">16905</span>&#160;<span class="comment">// CAVEAT:</span></div><div class="line"><a name="l16906"></a><span class="lineno">16906</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16907"></a><span class="lineno">16907</span>&#160;<span class="comment">// When used inside a method of a class template,</span></div><div class="line"><a name="l16908"></a><span class="lineno">16908</span>&#160;<span class="comment">// StaticAssertTypeEq&lt;T1, T2&gt;() is effective ONLY IF the method is</span></div><div class="line"><a name="l16909"></a><span class="lineno">16909</span>&#160;<span class="comment">// instantiated. For example, given:</span></div><div class="line"><a name="l16910"></a><span class="lineno">16910</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16911"></a><span class="lineno">16911</span>&#160;<span class="comment">// template &lt;typename T&gt; class Foo {</span></div><div class="line"><a name="l16912"></a><span class="lineno">16912</span>&#160;<span class="comment">// public:</span></div><div class="line"><a name="l16913"></a><span class="lineno">16913</span>&#160;<span class="comment">// void Bar() { testing::StaticAssertTypeEq&lt;int, T&gt;(); }</span></div><div class="line"><a name="l16914"></a><span class="lineno">16914</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l16915"></a><span class="lineno">16915</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16916"></a><span class="lineno">16916</span>&#160;<span class="comment">// the code:</span></div><div class="line"><a name="l16917"></a><span class="lineno">16917</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16918"></a><span class="lineno">16918</span>&#160;<span class="comment">// void Test1() { Foo&lt;bool&gt; foo; }</span></div><div class="line"><a name="l16919"></a><span class="lineno">16919</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16920"></a><span class="lineno">16920</span>&#160;<span class="comment">// will NOT generate a compiler error, as Foo&lt;bool&gt;::Bar() is never</span></div><div class="line"><a name="l16921"></a><span class="lineno">16921</span>&#160;<span class="comment">// actually instantiated. Instead, you need:</span></div><div class="line"><a name="l16922"></a><span class="lineno">16922</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16923"></a><span class="lineno">16923</span>&#160;<span class="comment">// void Test2() { Foo&lt;bool&gt; foo; foo.Bar(); }</span></div><div class="line"><a name="l16924"></a><span class="lineno">16924</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16925"></a><span class="lineno">16925</span>&#160;<span class="comment">// to cause a compiler error.</span></div><div class="line"><a name="l16926"></a><span class="lineno">16926</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l16927"></a><span class="lineno"><a class="line" href="namespacetesting.html#a661e70fc6afeb5c085eed3716aa45059">16927</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespacetesting.html#a661e70fc6afeb5c085eed3716aa45059">StaticAssertTypeEq</a>() {</div><div class="line"><a name="l16928"></a><span class="lineno">16928</span>&#160; (void)<a class="code" href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html">internal::StaticAssertTypeEqHelper&lt;T1, T2&gt;</a>();</div><div class="line"><a name="l16929"></a><span class="lineno">16929</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l16930"></a><span class="lineno">16930</span>&#160;}</div><div class="line"><a name="l16931"></a><span class="lineno">16931</span>&#160;</div><div class="line"><a name="l16932"></a><span class="lineno">16932</span>&#160;<span class="comment">// Defines a test.</span></div><div class="line"><a name="l16933"></a><span class="lineno">16933</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16934"></a><span class="lineno">16934</span>&#160;<span class="comment">// The first parameter is the name of the test suite, and the second</span></div><div class="line"><a name="l16935"></a><span class="lineno">16935</span>&#160;<span class="comment">// parameter is the name of the test within the test suite.</span></div><div class="line"><a name="l16936"></a><span class="lineno">16936</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16937"></a><span class="lineno">16937</span>&#160;<span class="comment">// The convention is to end the test suite name with &quot;Test&quot;. For</span></div><div class="line"><a name="l16938"></a><span class="lineno">16938</span>&#160;<span class="comment">// example, a test suite for the Foo class can be named FooTest.</span></div><div class="line"><a name="l16939"></a><span class="lineno">16939</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16940"></a><span class="lineno">16940</span>&#160;<span class="comment">// Test code should appear between braces after an invocation of</span></div><div class="line"><a name="l16941"></a><span class="lineno">16941</span>&#160;<span class="comment">// this macro. Example:</span></div><div class="line"><a name="l16942"></a><span class="lineno">16942</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16943"></a><span class="lineno">16943</span>&#160;<span class="comment">// TEST(FooTest, InitializesCorrectly) {</span></div><div class="line"><a name="l16944"></a><span class="lineno">16944</span>&#160;<span class="comment">// Foo foo;</span></div><div class="line"><a name="l16945"></a><span class="lineno">16945</span>&#160;<span class="comment">// EXPECT_TRUE(foo.StatusIsOK());</span></div><div class="line"><a name="l16946"></a><span class="lineno">16946</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16947"></a><span class="lineno">16947</span>&#160;</div><div class="line"><a name="l16948"></a><span class="lineno">16948</span>&#160;<span class="comment">// Note that we call GetTestTypeId() instead of GetTypeId&lt;</span></div><div class="line"><a name="l16949"></a><span class="lineno">16949</span>&#160;<span class="comment">// ::testing::Test&gt;() here to get the type ID of testing::Test. This</span></div><div class="line"><a name="l16950"></a><span class="lineno">16950</span>&#160;<span class="comment">// is to work around a suspected linker bug when using Google Test as</span></div><div class="line"><a name="l16951"></a><span class="lineno">16951</span>&#160;<span class="comment">// a framework on Mac OS X. The bug causes GetTypeId&lt;</span></div><div class="line"><a name="l16952"></a><span class="lineno">16952</span>&#160;<span class="comment">// ::testing::Test&gt;() to return different values depending on whether</span></div><div class="line"><a name="l16953"></a><span class="lineno">16953</span>&#160;<span class="comment">// the call is from the Google Test framework itself or from user test</span></div><div class="line"><a name="l16954"></a><span class="lineno">16954</span>&#160;<span class="comment">// code. GetTestTypeId() is guaranteed to always return the same</span></div><div class="line"><a name="l16955"></a><span class="lineno">16955</span>&#160;<span class="comment">// value, as it always calls GetTypeId&lt;&gt;() from the Google Test</span></div><div class="line"><a name="l16956"></a><span class="lineno">16956</span>&#160;<span class="comment">// framework.</span></div><div class="line"><a name="l16957"></a><span class="lineno"><a class="line" href="gtest_8h.html#a216a746d9241b1f42fdd4449698a4d8d">16957</a></span>&#160;<span class="preprocessor">#define GTEST_TEST(test_suite_name, test_name) \</span></div><div class="line"><a name="l16958"></a><span class="lineno">16958</span>&#160;<span class="preprocessor"> GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \</span></div><div class="line"><a name="l16959"></a><span class="lineno">16959</span>&#160;<span class="preprocessor"> ::testing::internal::GetTestTypeId())</span></div><div class="line"><a name="l16960"></a><span class="lineno">16960</span>&#160;</div><div class="line"><a name="l16961"></a><span class="lineno">16961</span>&#160;<span class="comment">// Define this macro to 1 to omit the definition of TEST(), which</span></div><div class="line"><a name="l16962"></a><span class="lineno">16962</span>&#160;<span class="comment">// is a generic name and clashes with some other libraries.</span></div><div class="line"><a name="l16963"></a><span class="lineno">16963</span>&#160;<span class="preprocessor">#if !GTEST_DONT_DEFINE_TEST</span></div><div class="line"><a name="l16964"></a><span class="lineno"><a class="line" href="gtest_8h.html#ab5540a6d621853916be8240ff51819cf">16964</a></span>&#160;<span class="preprocessor">#define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name)</span></div><div class="line"><a name="l16965"></a><span class="lineno">16965</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l16966"></a><span class="lineno">16966</span>&#160;</div><div class="line"><a name="l16967"></a><span class="lineno">16967</span>&#160;<span class="comment">// Defines a test that uses a test fixture.</span></div><div class="line"><a name="l16968"></a><span class="lineno">16968</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16969"></a><span class="lineno">16969</span>&#160;<span class="comment">// The first parameter is the name of the test fixture class, which</span></div><div class="line"><a name="l16970"></a><span class="lineno">16970</span>&#160;<span class="comment">// also doubles as the test suite name. The second parameter is the</span></div><div class="line"><a name="l16971"></a><span class="lineno">16971</span>&#160;<span class="comment">// name of the test within the test suite.</span></div><div class="line"><a name="l16972"></a><span class="lineno">16972</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16973"></a><span class="lineno">16973</span>&#160;<span class="comment">// A test fixture class must be declared earlier. The user should put</span></div><div class="line"><a name="l16974"></a><span class="lineno">16974</span>&#160;<span class="comment">// the test code between braces after using this macro. Example:</span></div><div class="line"><a name="l16975"></a><span class="lineno">16975</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16976"></a><span class="lineno">16976</span>&#160;<span class="comment">// class FooTest : public testing::Test {</span></div><div class="line"><a name="l16977"></a><span class="lineno">16977</span>&#160;<span class="comment">// protected:</span></div><div class="line"><a name="l16978"></a><span class="lineno">16978</span>&#160;<span class="comment">// virtual void SetUp() { b_.AddElement(3); }</span></div><div class="line"><a name="l16979"></a><span class="lineno">16979</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16980"></a><span class="lineno">16980</span>&#160;<span class="comment">// Foo a_;</span></div><div class="line"><a name="l16981"></a><span class="lineno">16981</span>&#160;<span class="comment">// Foo b_;</span></div><div class="line"><a name="l16982"></a><span class="lineno">16982</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l16983"></a><span class="lineno">16983</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16984"></a><span class="lineno">16984</span>&#160;<span class="comment">// TEST_F(FooTest, InitializesCorrectly) {</span></div><div class="line"><a name="l16985"></a><span class="lineno">16985</span>&#160;<span class="comment">// EXPECT_TRUE(a_.StatusIsOK());</span></div><div class="line"><a name="l16986"></a><span class="lineno">16986</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16987"></a><span class="lineno">16987</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l16988"></a><span class="lineno">16988</span>&#160;<span class="comment">// TEST_F(FooTest, ReturnsElementCountCorrectly) {</span></div><div class="line"><a name="l16989"></a><span class="lineno">16989</span>&#160;<span class="comment">// EXPECT_EQ(a_.size(), 0);</span></div><div class="line"><a name="l16990"></a><span class="lineno">16990</span>&#160;<span class="comment">// EXPECT_EQ(b_.size(), 1);</span></div><div class="line"><a name="l16991"></a><span class="lineno">16991</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l16992"></a><span class="lineno">16992</span>&#160;</div><div class="line"><a name="l16993"></a><span class="lineno"><a class="line" href="gtest_8h.html#a0ee66d464d1a06c20c1929cae09d8758">16993</a></span>&#160;<span class="preprocessor">#define TEST_F(test_fixture, test_name)\</span></div><div class="line"><a name="l16994"></a><span class="lineno">16994</span>&#160;<span class="preprocessor"> GTEST_TEST_(test_fixture, test_name, test_fixture, \</span></div><div class="line"><a name="l16995"></a><span class="lineno">16995</span>&#160;<span class="preprocessor"> ::testing::internal::GetTypeId&lt;test_fixture&gt;())</span></div><div class="line"><a name="l16996"></a><span class="lineno">16996</span>&#160;</div><div class="line"><a name="l16997"></a><span class="lineno">16997</span>&#160;<span class="comment">// Returns a path to temporary directory.</span></div><div class="line"><a name="l16998"></a><span class="lineno">16998</span>&#160;<span class="comment">// Tries to determine an appropriate directory for the platform.</span></div><div class="line"><a name="l16999"></a><span class="lineno">16999</span>&#160;<a class="code" href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a> <a class="code" href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">std::string</a> <a class="code" href="namespacetesting.html#abcf5181cecc3c07915dceb3de46ab07f">TempDir</a>();</div><div class="line"><a name="l17000"></a><span class="lineno">17000</span>&#160;</div><div class="line"><a name="l17001"></a><span class="lineno">17001</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l17002"></a><span class="lineno">17002</span>&#160;<span class="preprocessor"># pragma warning(pop)</span></div><div class="line"><a name="l17003"></a><span class="lineno">17003</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l17004"></a><span class="lineno">17004</span>&#160;</div><div class="line"><a name="l17005"></a><span class="lineno">17005</span>&#160;<span class="comment">// Dynamically registers a test with the framework.</span></div><div class="line"><a name="l17006"></a><span class="lineno">17006</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17007"></a><span class="lineno">17007</span>&#160;<span class="comment">// This is an advanced API only to be used when the `TEST` macros are</span></div><div class="line"><a name="l17008"></a><span class="lineno">17008</span>&#160;<span class="comment">// insufficient. The macros should be preferred when possible, as they avoid</span></div><div class="line"><a name="l17009"></a><span class="lineno">17009</span>&#160;<span class="comment">// most of the complexity of calling this function.</span></div><div class="line"><a name="l17010"></a><span class="lineno">17010</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17011"></a><span class="lineno">17011</span>&#160;<span class="comment">// The `factory` argument is a factory callable (move-constructible) object or</span></div><div class="line"><a name="l17012"></a><span class="lineno">17012</span>&#160;<span class="comment">// function pointer that creates a new instance of the Test object. It</span></div><div class="line"><a name="l17013"></a><span class="lineno">17013</span>&#160;<span class="comment">// handles ownership to the caller. The signature of the callable is</span></div><div class="line"><a name="l17014"></a><span class="lineno">17014</span>&#160;<span class="comment">// `Fixture*()`, where `Fixture` is the test fixture class for the test. All</span></div><div class="line"><a name="l17015"></a><span class="lineno">17015</span>&#160;<span class="comment">// tests registered with the same `test_suite_name` must return the same</span></div><div class="line"><a name="l17016"></a><span class="lineno">17016</span>&#160;<span class="comment">// fixture type. This is checked at runtime.</span></div><div class="line"><a name="l17017"></a><span class="lineno">17017</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17018"></a><span class="lineno">17018</span>&#160;<span class="comment">// The framework will infer the fixture class from the factory and will call</span></div><div class="line"><a name="l17019"></a><span class="lineno">17019</span>&#160;<span class="comment">// the `SetUpTestSuite` and `TearDownTestSuite` for it.</span></div><div class="line"><a name="l17020"></a><span class="lineno">17020</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17021"></a><span class="lineno">17021</span>&#160;<span class="comment">// Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is</span></div><div class="line"><a name="l17022"></a><span class="lineno">17022</span>&#160;<span class="comment">// undefined.</span></div><div class="line"><a name="l17023"></a><span class="lineno">17023</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17024"></a><span class="lineno">17024</span>&#160;<span class="comment">// Use case example:</span></div><div class="line"><a name="l17025"></a><span class="lineno">17025</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17026"></a><span class="lineno">17026</span>&#160;<span class="comment">// class MyFixture : public ::testing::Test {</span></div><div class="line"><a name="l17027"></a><span class="lineno">17027</span>&#160;<span class="comment">// public:</span></div><div class="line"><a name="l17028"></a><span class="lineno">17028</span>&#160;<span class="comment">// // All of these optional, just like in regular macro usage.</span></div><div class="line"><a name="l17029"></a><span class="lineno">17029</span>&#160;<span class="comment">// static void SetUpTestSuite() { ... }</span></div><div class="line"><a name="l17030"></a><span class="lineno">17030</span>&#160;<span class="comment">// static void TearDownTestSuite() { ... }</span></div><div class="line"><a name="l17031"></a><span class="lineno">17031</span>&#160;<span class="comment">// void SetUp() override { ... }</span></div><div class="line"><a name="l17032"></a><span class="lineno">17032</span>&#160;<span class="comment">// void TearDown() override { ... }</span></div><div class="line"><a name="l17033"></a><span class="lineno">17033</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l17034"></a><span class="lineno">17034</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17035"></a><span class="lineno">17035</span>&#160;<span class="comment">// class MyTest : public MyFixture {</span></div><div class="line"><a name="l17036"></a><span class="lineno">17036</span>&#160;<span class="comment">// public:</span></div><div class="line"><a name="l17037"></a><span class="lineno">17037</span>&#160;<span class="comment">// explicit MyTest(int data) : data_(data) {}</span></div><div class="line"><a name="l17038"></a><span class="lineno">17038</span>&#160;<span class="comment">// void TestBody() override { ... }</span></div><div class="line"><a name="l17039"></a><span class="lineno">17039</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17040"></a><span class="lineno">17040</span>&#160;<span class="comment">// private:</span></div><div class="line"><a name="l17041"></a><span class="lineno">17041</span>&#160;<span class="comment">// int data_;</span></div><div class="line"><a name="l17042"></a><span class="lineno">17042</span>&#160;<span class="comment">// };</span></div><div class="line"><a name="l17043"></a><span class="lineno">17043</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17044"></a><span class="lineno">17044</span>&#160;<span class="comment">// void RegisterMyTests(const std::vector&lt;int&gt;&amp; values) {</span></div><div class="line"><a name="l17045"></a><span class="lineno">17045</span>&#160;<span class="comment">// for (int v : values) {</span></div><div class="line"><a name="l17046"></a><span class="lineno">17046</span>&#160;<span class="comment">// ::testing::RegisterTest(</span></div><div class="line"><a name="l17047"></a><span class="lineno">17047</span>&#160;<span class="comment">// &quot;MyFixture&quot;, (&quot;Test&quot; + std::to_string(v)).c_str(), nullptr,</span></div><div class="line"><a name="l17048"></a><span class="lineno">17048</span>&#160;<span class="comment">// std::to_string(v).c_str(),</span></div><div class="line"><a name="l17049"></a><span class="lineno">17049</span>&#160;<span class="comment">// __FILE__, __LINE__,</span></div><div class="line"><a name="l17050"></a><span class="lineno">17050</span>&#160;<span class="comment">// // Important to use the fixture type as the return type here.</span></div><div class="line"><a name="l17051"></a><span class="lineno">17051</span>&#160;<span class="comment">// [=]() -&gt; MyFixture* { return new MyTest(v); });</span></div><div class="line"><a name="l17052"></a><span class="lineno">17052</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l17053"></a><span class="lineno">17053</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l17054"></a><span class="lineno">17054</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l17055"></a><span class="lineno">17055</span>&#160;<span class="comment">// int main(int argc, char** argv) {</span></div><div class="line"><a name="l17056"></a><span class="lineno">17056</span>&#160;<span class="comment">// std::vector&lt;int&gt; values_to_test = LoadValuesFromConfig();</span></div><div class="line"><a name="l17057"></a><span class="lineno">17057</span>&#160;<span class="comment">// RegisterMyTests(values_to_test);</span></div><div class="line"><a name="l17058"></a><span class="lineno">17058</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l17059"></a><span class="lineno">17059</span>&#160;<span class="comment">// return RUN_ALL_TESTS();</span></div><div class="line"><a name="l17060"></a><span class="lineno">17060</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l17061"></a><span class="lineno">17061</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17062"></a><span class="lineno">17062</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span>&amp;... ExplicitParameterBarrier, <span class="keyword">typename</span> Factory&gt;</div><div class="line"><a name="l17063"></a><span class="lineno"><a class="line" href="namespacetesting.html#a302c84bdc88f2138696da2a4756b6466">17063</a></span>&#160;<a class="code" href="classtesting_1_1_test_info.html">TestInfo</a>* <a class="code" href="namespacetesting.html#a302c84bdc88f2138696da2a4756b6466">RegisterTest</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* test_suite_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* test_name,</div><div class="line"><a name="l17064"></a><span class="lineno">17064</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* type_param, <span class="keyword">const</span> <span class="keywordtype">char</span>* value_param,</div><div class="line"><a name="l17065"></a><span class="lineno">17065</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keywordtype">int</span> line, Factory factory) {</div><div class="line"><a name="l17066"></a><span class="lineno">17066</span>&#160; <span class="keyword">using</span> TestT = <span class="keyword">typename</span> std::remove_pointer&lt;decltype(factory())&gt;::type;</div><div class="line"><a name="l17067"></a><span class="lineno">17067</span>&#160;</div><div class="line"><a name="l17068"></a><span class="lineno">17068</span>&#160; <span class="keyword">class </span>FactoryImpl : <span class="keyword">public</span> <a class="code" href="classtesting_1_1internal_1_1_test_factory_base.html">internal::TestFactoryBase</a> {</div><div class="line"><a name="l17069"></a><span class="lineno">17069</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l17070"></a><span class="lineno">17070</span>&#160; <span class="keyword">explicit</span> FactoryImpl(Factory f) : factory_(std::move(f)) {}</div><div class="line"><a name="l17071"></a><span class="lineno">17071</span>&#160; <a class="code" href="classtesting_1_1_test.html">Test</a>* CreateTest()<span class="keyword"> override </span>{ <span class="keywordflow">return</span> factory_(); }</div><div class="line"><a name="l17072"></a><span class="lineno">17072</span>&#160;</div><div class="line"><a name="l17073"></a><span class="lineno">17073</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l17074"></a><span class="lineno">17074</span>&#160; Factory factory_;</div><div class="line"><a name="l17075"></a><span class="lineno">17075</span>&#160; };</div><div class="line"><a name="l17076"></a><span class="lineno">17076</span>&#160;</div><div class="line"><a name="l17077"></a><span class="lineno">17077</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">internal::MakeAndRegisterTestInfo</a>(</div><div class="line"><a name="l17078"></a><span class="lineno">17078</span>&#160; test_suite_name, test_name, type_param, value_param,</div><div class="line"><a name="l17079"></a><span class="lineno">17079</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_code_location.html">internal::CodeLocation</a>(file, line), internal::GetTypeId&lt;TestT&gt;(),</div><div class="line"><a name="l17080"></a><span class="lineno">17080</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html">internal::SuiteApiResolver&lt;TestT&gt;::GetSetUpCaseOrSuite</a>(),</div><div class="line"><a name="l17081"></a><span class="lineno">17081</span>&#160; <a class="code" href="structtesting_1_1internal_1_1_suite_api_resolver.html">internal::SuiteApiResolver&lt;TestT&gt;::GetTearDownCaseOrSuite</a>(),</div><div class="line"><a name="l17082"></a><span class="lineno">17082</span>&#160; <span class="keyword">new</span> FactoryImpl{std::move(factory)});</div><div class="line"><a name="l17083"></a><span class="lineno">17083</span>&#160;}</div><div class="line"><a name="l17084"></a><span class="lineno">17084</span>&#160;</div><div class="line"><a name="l17085"></a><span class="lineno">17085</span>&#160;} <span class="comment">// namespace testing</span></div><div class="line"><a name="l17086"></a><span class="lineno">17086</span>&#160;</div><div class="line"><a name="l17087"></a><span class="lineno">17087</span>&#160;<span class="comment">// Use this function in main() to run all tests. It returns 0 if all</span></div><div class="line"><a name="l17088"></a><span class="lineno">17088</span>&#160;<span class="comment">// tests are successful, or 1 otherwise.</span></div><div class="line"><a name="l17089"></a><span class="lineno">17089</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17090"></a><span class="lineno">17090</span>&#160;<span class="comment">// RUN_ALL_TESTS() should be invoked after the command line has been</span></div><div class="line"><a name="l17091"></a><span class="lineno">17091</span>&#160;<span class="comment">// parsed by InitGoogleTest().</span></div><div class="line"><a name="l17092"></a><span class="lineno">17092</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l17093"></a><span class="lineno">17093</span>&#160;<span class="comment">// This function was formerly a macro; thus, it is in the global</span></div><div class="line"><a name="l17094"></a><span class="lineno">17094</span>&#160;<span class="comment">// namespace and has an all-caps name.</span></div><div class="line"><a name="l17095"></a><span class="lineno">17095</span>&#160;<span class="keywordtype">int</span> <a class="code" href="gtest_8h.html#a853a3792807489591d3d4a2f2ff9359f">RUN_ALL_TESTS</a>() <a class="code" href="gtest_8h.html#a8e5aab8276b2645f64f41c9e3021b935">GTEST_MUST_USE_RESULT_</a>;</div><div class="line"><a name="l17096"></a><span class="lineno">17096</span>&#160;</div><div class="line"><a name="l17097"></a><span class="lineno"><a class="line" href="gtest_8h.html#a853a3792807489591d3d4a2f2ff9359f">17097</a></span>&#160;inline <span class="keywordtype">int</span> <a class="code" href="gtest_8h.html#a853a3792807489591d3d4a2f2ff9359f">RUN_ALL_TESTS</a>() {</div><div class="line"><a name="l17098"></a><span class="lineno">17098</span>&#160; return ::testing::UnitTest::GetInstance()-&gt;Run();</div><div class="line"><a name="l17099"></a><span class="lineno">17099</span>&#160;}</div><div class="line"><a name="l17100"></a><span class="lineno">17100</span>&#160;</div><div class="line"><a name="l17101"></a><span class="lineno">17101</span>&#160;<a class="code" href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a>() <span class="comment">// 4251</span></div><div class="line"><a name="l17102"></a><span class="lineno">17102</span>&#160;</div><div class="line"><a name="l17103"></a><span class="lineno">17103</span>&#160;<span class="preprocessor">#endif // GTEST_INCLUDE_GTEST_GTEST_H_</span></div><div class="ttc" id="structtesting_1_1internal_1_1_const_ref_html_a53610a4d0e72958332222b0a85f8937a"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_ref.html#a53610a4d0e72958332222b0a85f8937a">testing::internal::ConstRef::type</a></div><div class="ttdeci">const T &amp; type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01313">gtest.h:1313</a></div></div>
  92. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_a448b08a8eaae1f1d27840d4dbd66c357"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#a448b08a8eaae1f1d27840d4dbd66c357">testing::internal::ParamGenerator::iterator</a></div><div class="ttdeci">ParamIterator&lt; T &gt; iterator</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10721">gtest.h:10721</a></div></div>
  93. <div class="ttc" id="namespacetesting_1_1internal_html_aa234ef141278263fb143b616c74c86e7"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa234ef141278263fb143b616c74c86e7">testing::internal::IsXDigit</a></div><div class="ttdeci">bool IsXDigit(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02251">gtest.h:2251</a></div></div>
  94. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a9ef6d089cdae03f9d9e0e6d379c40703"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a9ef6d089cdae03f9d9e0e6d379c40703">testing::internal::posix::FReopen</a></div><div class="ttdeci">FILE * FReopen(const char *path, const char *mode, FILE *stream)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02353">gtest.h:2353</a></div></div>
  95. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_aad035d35e8f0c1412854959a94d4887e"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#aad035d35e8f0c1412854959a94d4887e">testing::internal::ParamIterator::operator-&gt;</a></div><div class="ttdeci">const T * operator-&gt;() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10674">gtest.h:10674</a></div></div>
  96. <div class="ttc" id="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html">testing::internal::IsRecursiveContainerImpl&lt; C, true &gt;</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07470">gtest.h:7470</a></div></div>
  97. <div class="ttc" id="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01false_01_4_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01false_01_4.html">testing::internal::IsRecursiveContainerImpl&lt; C, false &gt;</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07463">gtest.h:7463</a></div></div>
  98. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a60cc09b7907cb329d152eb5e7133bdeb"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a60cc09b7907cb329d152eb5e7133bdeb">testing::TestEventListener::OnTestIterationStart</a></div><div class="ttdeci">virtual void OnTestIterationStart(const UnitTest &amp;unit_test, int iteration)=0</div></div>
  99. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html_a8ef3e248a6d5ba1ea4ae17a8d045e98a"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a8ef3e248a6d5ba1ea4ae17a8d045e98a">testing::internal::CartesianProductGenerator3::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11483">gtest.h:11483</a></div></div>
  100. <div class="ttc" id="namespacetesting_html_a84c020b981d0eb4eabfb0feda155aaaf"><div class="ttname"><a href="namespacetesting.html#a84c020b981d0eb4eabfb0feda155aaaf">testing::DoubleLE</a></div><div class="ttdeci">GTEST_API_ AssertionResult DoubleLE(const char *expr1, const char *expr2, double val1, double val2)</div></div>
  101. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_ac551f793522e54fbd8a25acb79eac5b1"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#ac551f793522e54fbd8a25acb79eac5b1">testing::internal::FloatingPoint::ReinterpretBits</a></div><div class="ttdeci">static RawType ReinterpretBits(const Bits bits)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06742">gtest.h:6742</a></div></div>
  102. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html_a75fc8856e032710e9efe753ad788dcf1"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a75fc8856e032710e9efe753ad788dcf1">testing::internal::CartesianProductGenerator8::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5, T6, T7, T8 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12323">gtest.h:12323</a></div></div>
  103. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a56fc02ddec2cf2101332d1125e4c75a9"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a56fc02ddec2cf2101332d1125e4c75a9">testing::internal::ParameterizedTestSuiteInfo::ParameterizedTestSuiteInfo</a></div><div class="ttdeci">ParameterizedTestSuiteInfo(const char *name, CodeLocation code_location)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11044">gtest.h:11044</a></div></div>
  104. <div class="ttc" id="gtest_8h_html_ae29b00ca46783509cc900cd03d61ef37"><div class="ttname"><a href="gtest_8h.html#ae29b00ca46783509cc900cd03d61ef37">GTEST_ATTRIBUTE_PRINTF_</a></div><div class="ttdeci">#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00916">gtest.h:916</a></div></div>
  105. <div class="ttc" id="classtesting_1_1internal_1_1_implicitly_convertible_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_implicitly_convertible.html">testing::internal::ImplicitlyConvertible</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07344">gtest.h:7344</a></div></div>
  106. <div class="ttc" id="classtesting_1_1internal_1_1_thread_local_html_a57e45bb60e3cd94abb04fa449e9f0367"><div class="ttname"><a href="classtesting_1_1internal_1_1_thread_local.html#a57e45bb60e3cd94abb04fa449e9f0367">testing::internal::ThreadLocal::pointer</a></div><div class="ttdeci">const T * pointer() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02170">gtest.h:2170</a></div></div>
  107. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_impl_html_ab9b9236ef39b14f0a78e611748e970e3"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_impl.html#ab9b9236ef39b14f0a78e611748e970e3">testing::internal::TestFactoryImpl::CreateTest</a></div><div class="ttdeci">Test * CreateTest() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06909">gtest.h:6909</a></div></div>
  108. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder10_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder10.html">testing::internal::CartesianProductHolder10</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13295">gtest.h:13295</a></div></div>
  109. <div class="ttc" id="namespacetesting_1_1internal_html_a3db36c62f31a9439117c41c2b13f4941"><div class="ttname"><a href="namespacetesting_1_1internal.html#a3db36c62f31a9439117c41c2b13f4941">testing::internal::IsNullLiteralHelper</a></div><div class="ttdeci">std::true_type IsNullLiteralHelper(Secret *)</div></div>
  110. <div class="ttc" id="structtesting_1_1internal_1_1_wrap_printer_type_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_wrap_printer_type.html">testing::internal::WrapPrinterType</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08440">gtest.h:8440</a></div></div>
  111. <div class="ttc" id="namespacetesting_1_1internal_html_a4d46f09c3bfe68700b7f728d2cc3782f"><div class="ttname"><a href="namespacetesting_1_1internal.html#a4d46f09c3bfe68700b7f728d2cc3782f">testing::internal::AlwaysTrue</a></div><div class="ttdeci">GTEST_API_ bool AlwaysTrue()</div></div>
  112. <div class="ttc" id="namespacetesting_1_1internal_html_a17fb8f0125fa92404a249ed38a43faa4a8eaa6fff4a58832b30027df49f73dcbf"><div class="ttname"><a href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a8eaa6fff4a58832b30027df49f73dcbf">testing::internal::kPrintPointer</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08436">gtest.h:8436</a></div></div>
  113. <div class="ttc" id="classtesting_1_1_test_event_listener_html_aaa1021d75f5dbf3f05c829c1cc520341"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#aaa1021d75f5dbf3f05c829c1cc520341">testing::TestEventListener::OnEnvironmentsSetUpEnd</a></div><div class="ttdeci">virtual void OnEnvironmentsSetUpEnd(const UnitTest &amp;unit_test)=0</div></div>
  114. <div class="ttc" id="namespacetesting_html_a460d7b998622e332392c1e00be3a60d5"><div class="ttname"><a href="namespacetesting.html#a460d7b998622e332392c1e00be3a60d5">testing::AddGlobalTestEnvironment</a></div><div class="ttdeci">Environment * AddGlobalTestEnvironment(Environment *env)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16067">gtest.h:16067</a></div></div>
  115. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_aa1fd7d378f2cdde00a4f8a2f4efb95b4"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#aa1fd7d378f2cdde00a4f8a2f4efb95b4">testing::EmptyTestEventListener::OnTestCaseStart</a></div><div class="ttdeci">void OnTestCaseStart(const TestCase &amp;tc) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15744">gtest.h:15744</a></div></div>
  116. <div class="ttc" id="namespacetesting_1_1internal_html_abc0f0626877188afba6ad122d502f088"><div class="ttname"><a href="namespacetesting_1_1internal.html#abc0f0626877188afba6ad122d502f088">testing::internal::GetParamNameGen</a></div><div class="ttdeci">ParamNameGenFunctor GetParamNameGen(ParamNameGenFunctor func)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10924">gtest.h:10924</a></div></div>
  117. <div class="ttc" id="classtesting_1_1internal_1_1_g_test_mutex_lock_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_g_test_mutex_lock.html">testing::internal::GTestMutexLock</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02157">gtest.h:2157</a></div></div>
  118. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder3_html_ad74b6d31441c7f3f7f8514a563c8277e"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder3.html#ad74b6d31441c7f3f7f8514a563c8277e">testing::internal::CartesianProductHolder3::CartesianProductHolder3</a></div><div class="ttdeci">CartesianProductHolder3(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13064">gtest.h:13064</a></div></div>
  119. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01wchar__t_01_5_01_4_html_af0d3bb36d6defbc67c43e5785e939478"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01wchar__t_01_5_01_4.html#af0d3bb36d6defbc67c43e5785e939478">testing::internal::UniversalTersePrinter&lt; const wchar_t * &gt;::Print</a></div><div class="ttdeci">static void Print(const wchar_t *str, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08891">gtest.h:8891</a></div></div>
  120. <div class="ttc" id="namespacetesting_1_1internal_html_aed657219a9856a8d249a3230de0c54ce"><div class="ttname"><a href="namespacetesting_1_1internal.html#aed657219a9856a8d249a3230de0c54ce">testing::internal::GetCapturedStdout</a></div><div class="ttdeci">std::string GetCapturedStdout()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10789">gtest-all.cc:10789</a></div></div>
  121. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html_aa6e36241431dc72c251ecee9b637b4d3"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#aa6e36241431dc72c251ecee9b637b4d3">testing::internal::ParameterizedTestSuiteInfoBase::GetTestSuiteName</a></div><div class="ttdeci">virtual const std::string &amp; GetTestSuiteName() const =0</div></div>
  122. <div class="ttc" id="namespacetesting_1_1internal_html_aea60207c4cedc8946a70ada62e38da8f"><div class="ttname"><a href="namespacetesting_1_1internal.html#aea60207c4cedc8946a70ada62e38da8f">testing::internal::DoubleNearPredFormat</a></div><div class="ttdeci">GTEST_API_ AssertionResult DoubleNearPredFormat(const char *expr1, const char *expr2, const char *abs_error_expr, double val1, double val2, double abs_error)</div></div>
  123. <div class="ttc" id="namespacetesting_1_1internal_html_a374156401da17704099d0c33fa53adfb"><div class="ttname"><a href="namespacetesting_1_1internal.html#a374156401da17704099d0c33fa53adfb">testing::internal::GetCapturedStderr</a></div><div class="ttdeci">std::string GetCapturedStderr()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10794">gtest-all.cc:10794</a></div></div>
  124. <div class="ttc" id="namespacetesting_1_1internal_html_a6b108e56fdc68ea937ffb3759fb55ab0"><div class="ttname"><a href="namespacetesting_1_1internal.html#a6b108e56fdc68ea937ffb3759fb55ab0">testing::internal::GetTypeId</a></div><div class="ttdeci">TypeId GetTypeId()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06872">gtest.h:6872</a></div></div>
  125. <div class="ttc" id="namespacetesting_1_1internal_html_a982df3f369643b175f79cda4048bc3b9"><div class="ttname"><a href="namespacetesting_1_1internal.html#a982df3f369643b175f79cda4048bc3b9">testing::internal::ImplicitCast_</a></div><div class="ttdeci">To ImplicitCast_(To x)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01342">gtest.h:1342</a></div></div>
  126. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html">testing::internal::CartesianProductGenerator4</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11612">gtest.h:11612</a></div></div>
  127. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_ab0922f2f554fb3beaf13c442da605e8d"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#ab0922f2f554fb3beaf13c442da605e8d">testing::internal::ParamIterator::operator++</a></div><div class="ttdeci">ParamIterator &amp; operator++()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10676">gtest.h:10676</a></div></div>
  128. <div class="ttc" id="namespacetesting_1_1internal2_html_aeb8161b0b3ee503347b0662d7028fd57abe8aaea44751d6ebd0cdf5bd94451db1"><div class="ttname"><a href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57abe8aaea44751d6ebd0cdf5bd94451db1">testing::internal2::kOtherType</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08172">gtest.h:8172</a></div></div>
  129. <div class="ttc" id="classtesting_1_1internal_1_1_mutex_html_a315188055de1be98884519ad84eff2e6"><div class="ttname"><a href="classtesting_1_1internal_1_1_mutex.html#a315188055de1be98884519ad84eff2e6">testing::internal::Mutex::Unlock</a></div><div class="ttdeci">void Unlock()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02143">gtest.h:2143</a></div></div>
  130. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html_ae04bf9d551c6dc3996d18e90e88f4bfd"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae04bf9d551c6dc3996d18e90e88f4bfd">testing::internal::CartesianProductGenerator4::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11623">gtest.h:11623</a></div></div>
  131. <div class="ttc" id="classtesting_1_1internal_1_1_flat_tuple_html_a611d01b9ff2437e4b9cfe3bbedc6d6ae"><div class="ttname"><a href="classtesting_1_1internal_1_1_flat_tuple.html#a611d01b9ff2437e4b9cfe3bbedc6d6ae">testing::internal::FlatTuple::FlatTuple</a></div><div class="ttdeci">FlatTuple(T... t)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07737">gtest.h:7737</a></div></div>
  132. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html_a1893e189b87ba1a7cc664dcd4d87a1fd"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a1893e189b87ba1a7cc664dcd4d87a1fd">testing::internal::CartesianProductGenerator8::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12339">gtest.h:12339</a></div></div>
  133. <div class="ttc" id="namespacetesting_html"><div class="ttname"><a href="namespacetesting.html">testing</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l07620">gtest-all.cc:7620</a></div></div>
  134. <div class="ttc" id="structtesting_1_1internal_1_1_remove_reference_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_reference.html">testing::internal::RemoveReference</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07306">gtest.h:7306</a></div></div>
  135. <div class="ttc" id="classtesting_1_1_test_info_html_a036a20710c8c2252889544daba9a8ff9"><div class="ttname"><a href="classtesting_1_1_test_info.html#a036a20710c8c2252889544daba9a8ff9">testing::TestInfo::test_case_name</a></div><div class="ttdeci">const char * test_case_name() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15305">gtest.h:15305</a></div></div>
  136. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html_a1481728b2ece0109ac7897074d42a1f4"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a1481728b2ece0109ac7897074d42a1f4">testing::internal::CartesianProductGenerator7::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5, T6, T7 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12120">gtest.h:12120</a></div></div>
  137. <div class="ttc" id="namespacetesting_1_1internal_html_ae7ae495d3207e26968dfbd537c5e6dee"><div class="ttname"><a href="namespacetesting_1_1internal.html#ae7ae495d3207e26968dfbd537c5e6dee">testing::internal::GetCurrentOsStackTraceExceptTop</a></div><div class="ttdeci">GTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest *unit_test, int skip_count)</div></div>
  138. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_base_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory_base.html">testing::internal::TestMetaFactoryBase</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10964">gtest.h:10964</a></div></div>
  139. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_impl_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_impl.html">testing::internal::TestFactoryImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06907">gtest.h:6907</a></div></div>
  140. <div class="ttc" id="classtesting_1_1internal_1_1_range_generator_html_ac112ca69567b9c47bf14554e0473e1e2"><div class="ttname"><a href="classtesting_1_1internal_1_1_range_generator.html#ac112ca69567b9c47bf14554e0473e1e2">testing::internal::RangeGenerator::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; T &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10753">gtest.h:10753</a></div></div>
  141. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html_a23b2a79fc2fd0224fd31c519520cb945"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a23b2a79fc2fd0224fd31c519520cb945">testing::internal::CartesianProductGenerator10::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12796">gtest.h:12796</a></div></div>
  142. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_base_html_afedbf147b2a213517b315880d8c81427"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_base.html#afedbf147b2a213517b315880d8c81427">testing::internal::TestFactoryBase::TestFactoryBase</a></div><div class="ttdeci">TestFactoryBase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06898">gtest.h:6898</a></div></div>
  143. <div class="ttc" id="namespacetesting_1_1internal_html_a83e4e0732ac6a9dcfe6ee299dc1b9fa2"><div class="ttname"><a href="namespacetesting_1_1internal.html#a83e4e0732ac6a9dcfe6ee299dc1b9fa2">testing::internal::SetUpTestSuiteFunc</a></div><div class="ttdeci">void(*)() SetUpTestSuiteFunc</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06926">gtest.h:6926</a></div></div>
  144. <div class="ttc" id="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_convertible_to_integer_01_4_html_ab27a411afb608e730a57d232b3f4f486"><div class="ttname"><a href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_convertible_to_integer_01_4.html#ab27a411afb608e730a57d232b3f4f486">testing::internal2::TypeWithoutFormatter&lt; T, kConvertibleToInteger &gt;::PrintValue</a></div><div class="ttdeci">static void PrintValue(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08217">gtest.h:8217</a></div></div>
  145. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a12216d686e16e4cc63d952fada5b2ba9"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a12216d686e16e4cc63d952fada5b2ba9">testing::internal::NativeArray::value_type</a></div><div class="ttdeci">Element value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07582">gtest.h:7582</a></div></div>
  146. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder7_html_a289e661f9252bac3570700410eb041b3"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder7.html#a289e661f9252bac3570700410eb041b3">testing::internal::CartesianProductHolder7::CartesianProductHolder7</a></div><div class="ttdeci">CartesianProductHolder7(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5, const Generator6 &amp;g6, const Generator7 &amp;g7)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13178">gtest.h:13178</a></div></div>
  147. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a166bcf075f37bfe14f912d2def55f61a"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a166bcf075f37bfe14f912d2def55f61a">testing::EmptyTestEventListener::OnTestCaseEnd</a></div><div class="ttdeci">void OnTestCaseEnd(const TestCase &amp;tc) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15752">gtest.h:15752</a></div></div>
  148. <div class="ttc" id="namespacetesting_1_1internal_html_aac72b20299ad4a99554ce161e1769560"><div class="ttname"><a href="namespacetesting_1_1internal.html#aac72b20299ad4a99554ce161e1769560">testing::internal::SkipPrefix</a></div><div class="ttdeci">GTEST_API_ bool SkipPrefix(const char *prefix, const char **pstr)</div></div>
  149. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_aae5954d8a57d3ff0987c6930cb68e114"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#aae5954d8a57d3ff0987c6930cb68e114">testing::internal::FloatingPoint::Max</a></div><div class="ttdeci">static RawType Max()</div></div>
  150. <div class="ttc" id="gtest_8h_html_a69b0cadb05bf2a1ef96151243c6b6241"><div class="ttname"><a href="gtest_8h.html#a69b0cadb05bf2a1ef96151243c6b6241">GTEST_INTENTIONAL_CONST_COND_PUSH_</a></div><div class="ttdeci">#define GTEST_INTENTIONAL_CONST_COND_PUSH_()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00950">gtest.h:950</a></div></div>
  151. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html">testing::internal::ParameterizedTestSuiteRegistry</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11205">gtest.h:11205</a></div></div>
  152. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder4_html_a07fe92a091d7717a159d7ba5f2fe3c75"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder4.html#a07fe92a091d7717a159d7ba5f2fe3c75">testing::internal::CartesianProductHolder4::CartesianProductHolder4</a></div><div class="ttdeci">CartesianProductHolder4(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13089">gtest.h:13089</a></div></div>
  153. <div class="ttc" id="structtesting_1_1internal_1_1_compile_assert_types_equal_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_compile_assert_types_equal.html">testing::internal::CompileAssertTypesEqual</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07296">gtest.h:7296</a></div></div>
  154. <div class="ttc" id="classtesting_1_1_test_result_html_acf7e6e72f05a0545c48ea48e7f8851df"><div class="ttname"><a href="classtesting_1_1_test_result.html#acf7e6e72f05a0545c48ea48e7f8851df">testing::TestResult::Passed</a></div><div class="ttdeci">bool Passed() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15186">gtest.h:15186</a></div></div>
  155. <div class="ttc" id="classtesting_1_1internal_1_1_format_for_comparison_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_format_for_comparison.html">testing::internal::FormatForComparison</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08340">gtest.h:8340</a></div></div>
  156. <div class="ttc" id="namespacetesting_html_aa6587938029dd8733ecb885068f08247"><div class="ttname"><a href="namespacetesting.html#aa6587938029dd8733ecb885068f08247">testing::AssertPred2Helper</a></div><div class="ttdeci">AssertionResult AssertPred2Helper(const char *pred_text, const char *e1, const char *e2, Pred pred, const T1 &amp;v1, const T2 &amp;v2)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l14758">gtest.h:14758</a></div></div>
  157. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_aca98b5ea6f2222a66a82e52421682efa"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#aca98b5ea6f2222a66a82e52421682efa">testing::internal::FloatingPoint::kSignBitMask</a></div><div class="ttdeci">static const Bits kSignBitMask</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06706">gtest.h:6706</a></div></div>
  158. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_af4beeaaa8d62916d5e3b644a1ddfbd6b"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#af4beeaaa8d62916d5e3b644a1ddfbd6b">testing::internal::posix::FClose</a></div><div class="ttdeci">int FClose(FILE *fp)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02358">gtest.h:2358</a></div></div>
  159. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html_ab25fd0df9d6325f10f218c3b7553820d"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#ab25fd0df9d6325f10f218c3b7553820d">testing::internal::CartesianProductGenerator5::CartesianProductGenerator5</a></div><div class="ttdeci">CartesianProductGenerator5(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11768">gtest.h:11768</a></div></div>
  160. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html_a3b50ae419b0de858f3ad9b8dd49989de"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#a3b50ae419b0de858f3ad9b8dd49989de">testing::internal::ParameterizedTestSuiteInfoBase::ParameterizedTestSuiteInfoBase</a></div><div class="ttdeci">ParameterizedTestSuiteInfoBase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11020">gtest.h:11020</a></div></div>
  161. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html_a6ff15d46e4ff7f8f24215b8244a6a094"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6ff15d46e4ff7f8f24215b8244a6a094">testing::internal::CartesianProductGenerator6::CartesianProductGenerator6</a></div><div class="ttdeci">CartesianProductGenerator6(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5, const ParamGenerator&lt; T6 &gt; &amp;g6)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11936">gtest.h:11936</a></div></div>
  162. <div class="ttc" id="namespacetesting_1_1internal_html_a8cbd8bf820517923d7f3c4477b3af5fa"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8cbd8bf820517923d7f3c4477b3af5fa">testing::internal::GetThreadCount</a></div><div class="ttdeci">size_t GetThreadCount()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l09875">gtest-all.cc:9875</a></div></div>
  163. <div class="ttc" id="classtesting_1_1_test_property_html"><div class="ttname"><a href="classtesting_1_1_test_property.html">testing::TestProperty</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15133">gtest.h:15133</a></div></div>
  164. <div class="ttc" id="namespacetesting_1_1internal_html_a764748b94f628bdd1dcd39dc81e8b71f"><div class="ttname"><a href="namespacetesting_1_1internal.html#a764748b94f628bdd1dcd39dc81e8b71f">testing::internal::IsContainerTest</a></div><div class="ttdeci">IsContainer IsContainerTest(int)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07429">gtest.h:7429</a></div></div>
  165. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder3_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder3.html">testing::internal::CartesianProductHolder3</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13062">gtest.h:13062</a></div></div>
  166. <div class="ttc" id="classtesting_1_1_test_suite_html_a3391a0ec111c66e1ac16a800f5068af7"><div class="ttname"><a href="classtesting_1_1_test_suite.html#a3391a0ec111c66e1ac16a800f5068af7">testing::TestSuite::ad_hoc_test_result</a></div><div class="ttdeci">const TestResult &amp; ad_hoc_test_result() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15502">gtest.h:15502</a></div></div>
  167. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_abb346ac3040f5da733f594cc2d5958bc"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#abb346ac3040f5da733f594cc2d5958bc">testing::internal::NativeArray::NativeArray</a></div><div class="ttdeci">NativeArray(const NativeArray &amp;rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07597">gtest.h:7597</a></div></div>
  168. <div class="ttc" id="namespaceutl_1_1meta_html_ac72acc616316c322e750d20a46553ba4"><div class="ttname"><a href="namespaceutl_1_1meta.html#ac72acc616316c322e750d20a46553ba4">utl::meta::filter</a></div><div class="ttdeci">eval&lt; filter_impl::filter_&lt; List, Pred, typelist&lt;&gt; &gt; &gt; filter</div><div class="ttdef"><b>Definition:</b> <a href="typelist_8h_source.html#l00800">typelist.h:800</a></div></div>
  169. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a8c0af866d3c291a63d3f4581ccd452d1"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a8c0af866d3c291a63d3f4581ccd452d1">testing::internal::ParameterizedTestSuiteInfo::RegisterTests</a></div><div class="ttdeci">void RegisterTests() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11080">gtest.h:11080</a></div></div>
  170. <div class="ttc" id="classtesting_1_1internal_1_1_implicitly_convertible_html_aea51cecabca681fb75659e224771b7b7"><div class="ttname"><a href="classtesting_1_1internal_1_1_implicitly_convertible.html#aea51cecabca681fb75659e224771b7b7">testing::internal::ImplicitlyConvertible::value</a></div><div class="ttdeci">static const bool value</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07380">gtest.h:7380</a></div></div>
  171. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_aa10585055ee055e304703a3004f24f33"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#aa10585055ee055e304703a3004f24f33">testing::internal::ParamIterator::ParamIterator</a></div><div class="ttdeci">ParamIterator(const ParamIterator &amp;other)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10666">gtest.h:10666</a></div></div>
  172. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_a24236aab3a6b0183a145a6f4c0bb9848"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#a24236aab3a6b0183a145a6f4c0bb9848">testing::internal::RE::pattern</a></div><div class="ttdeci">const char * pattern() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01155">gtest.h:1155</a></div></div>
  173. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_a1e81f9a87211bdca645e025f8f0236c8"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#a1e81f9a87211bdca645e025f8f0236c8">testing::internal::RE::PartialMatch</a></div><div class="ttdeci">static bool PartialMatch(const ::std::string &amp;str, const RE &amp;re)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01164">gtest.h:1164</a></div></div>
  174. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a52b3689c62532703d11e9d82939a7141"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a52b3689c62532703d11e9d82939a7141">testing::internal::NativeArray::NativeArray</a></div><div class="ttdeci">NativeArray(const Element *array, size_t count, RelationToSourceReference)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07587">gtest.h:7587</a></div></div>
  175. <div class="ttc" id="classtesting_1_1_test_suite_html_a8f62c17baef80042e0ff03ef5d5e4ba7"><div class="ttname"><a href="classtesting_1_1_test_suite.html#a8f62c17baef80042e0ff03ef5d5e4ba7">testing::TestSuite::should_run</a></div><div class="ttdeci">bool should_run() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15461">gtest.h:15461</a></div></div>
  176. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html_a53d945670e910c0baaf14f3d25f1bbb6"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a53d945670e910c0baaf14f3d25f1bbb6">testing::internal::CartesianProductGenerator10::CartesianProductGenerator10</a></div><div class="ttdeci">CartesianProductGenerator10(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5, const ParamGenerator&lt; T6 &gt; &amp;g6, const ParamGenerator&lt; T7 &gt; &amp;g7, const ParamGenerator&lt; T8 &gt; &amp;g8, const ParamGenerator&lt; T9 &gt; &amp;g9, const ParamGenerator&lt; T10 &gt; &amp;g10)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12786">gtest.h:12786</a></div></div>
  177. <div class="ttc" id="namespacetesting_1_1internal_html_ad8f0c2883245f1df2a53618a49f0deb3"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad8f0c2883245f1df2a53618a49f0deb3">testing::internal::IsContainer</a></div><div class="ttdeci">int IsContainer</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07422">gtest.h:7422</a></div></div>
  178. <div class="ttc" id="structtesting_1_1internal_1_1_const_ref_3_01_t_01_6_01_4_html_a9f664dd25649a0d260cfb1f610c7a349"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_ref_3_01_t_01_6_01_4.html#a9f664dd25649a0d260cfb1f610c7a349">testing::internal::ConstRef&lt; T &amp; &gt;::type</a></div><div class="ttdeci">T &amp; type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01315">gtest.h:1315</a></div></div>
  179. <div class="ttc" id="classtesting_1_1_test_info_html"><div class="ttname"><a href="classtesting_1_1_test_info.html">testing::TestInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15294">gtest.h:15294</a></div></div>
  180. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_aae9c5c61e476f0c421402fb1dde434d2"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#aae9c5c61e476f0c421402fb1dde434d2">testing::EmptyTestEventListener::OnTestIterationEnd</a></div><div class="ttdeci">void OnTestIterationEnd(const UnitTest &amp;, int) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15757">gtest.h:15757</a></div></div>
  181. <div class="ttc" id="classtesting_1_1internal_1_1_values_in_iterator_range_generator_html_a71ffed6f1deba05f11c9d45f6ab5b85d"><div class="ttname"><a href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a71ffed6f1deba05f11c9d45f6ab5b85d">testing::internal::ValuesInIteratorRangeGenerator::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; T &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10835">gtest.h:10835</a></div></div>
  182. <div class="ttc" id="classtesting_1_1_scoped_trace_html"><div class="ttname"><a href="classtesting_1_1_scoped_trace.html">testing::ScopedTrace</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16835">gtest.h:16835</a></div></div>
  183. <div class="ttc" id="structtesting_1_1internal_1_1bool__constant_html_a499fba6576296b04d99690a486424b32"><div class="ttname"><a href="structtesting_1_1internal_1_1bool__constant.html#a499fba6576296b04d99690a486424b32">testing::internal::bool_constant::value</a></div><div class="ttdeci">static const bool value</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02186">gtest.h:2186</a></div></div>
  184. <div class="ttc" id="structtesting_1_1internal_1_1_index_sequence_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_index_sequence.html">testing::internal::IndexSequence</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07646">gtest.h:7646</a></div></div>
  185. <div class="ttc" id="namespacetesting_1_1internal_html_ab2709373c78eb8b1c22a6ba30cceba52"><div class="ttname"><a href="namespacetesting_1_1internal.html#ab2709373c78eb8b1c22a6ba30cceba52">testing::internal::IsTrue</a></div><div class="ttdeci">GTEST_API_ bool IsTrue(bool condition)</div></div>
  186. <div class="ttc" id="namespacetesting_1_1internal_html_a5e3e473798de3189e9343132bcfd4fea"><div class="ttname"><a href="namespacetesting_1_1internal.html#a5e3e473798de3189e9343132bcfd4fea">testing::internal::operator==</a></div><div class="ttdeci">bool operator==(faketype, faketype)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16106">gtest.h:16106</a></div></div>
  187. <div class="ttc" id="namespacetesting_html_aa5717bb1144edd1d262d310ba70c82ed"><div class="ttname"><a href="namespacetesting.html#aa5717bb1144edd1d262d310ba70c82ed">testing::PrintToString</a></div><div class="ttdeci">::std::string PrintToString(const T &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08969">gtest.h:8969</a></div></div>
  188. <div class="ttc" id="classtesting_1_1_with_param_interface_html_a343febaaebf1f025bda484f841d4fec1"><div class="ttname"><a href="classtesting_1_1_with_param_interface.html#a343febaaebf1f025bda484f841d4fec1">testing::WithParamInterface::ParamType</a></div><div class="ttdeci">T ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16472">gtest.h:16472</a></div></div>
  189. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a76dbb7c3868d1c9abb957faee2568c0b"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a76dbb7c3868d1c9abb957faee2568c0b">testing::TestEventListener::OnTestCaseEnd</a></div><div class="ttdeci">virtual void OnTestCaseEnd(const TestCase &amp;test_case)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15712">gtest.h:15712</a></div></div>
  190. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html_a373c054dc7b60a9ab6236c327cac4e23"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a373c054dc7b60a9ab6236c327cac4e23">testing::internal::CartesianProductGenerator10::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12801">gtest.h:12801</a></div></div>
  191. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad46aa6da12aec1a3f166310478b53a08a7bdb9c74613a94f21b7489e0b5640a63"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a7bdb9c74613a94f21b7489e0b5640a63">testing::internal::edit_distance::kMatch</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06605">gtest.h:6605</a></div></div>
  192. <div class="ttc" id="namespacetesting_1_1internal_html_ab81b0af2a0131ea54dc11de00d5e6e51"><div class="ttname"><a href="namespacetesting_1_1internal.html#ab81b0af2a0131ea54dc11de00d5e6e51">testing::internal::ReadEntireFile</a></div><div class="ttdeci">std::string ReadEntireFile(FILE *file)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10809">gtest-all.cc:10809</a></div></div>
  193. <div class="ttc" id="structtesting_1_1internal_1_1_add_reference_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_add_reference.html">testing::internal::AddReference</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01292">gtest.h:1292</a></div></div>
  194. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_aefdb73682d290791461e186d864db718"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#aefdb73682d290791461e186d864db718">testing::EmptyTestEventListener::OnTestSuiteEnd</a></div><div class="ttdeci">void OnTestSuiteEnd(const TestSuite &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15750">gtest.h:15750</a></div></div>
  195. <div class="ttc" id="gtest_8h_html_a38f6151210e363ad7c69a836b13cf0af"><div class="ttname"><a href="gtest_8h.html#a38f6151210e363ad7c69a836b13cf0af">GTEST_CHECK_POSIX_SUCCESS_</a></div><div class="ttdeci">#define GTEST_CHECK_POSIX_SUCCESS_(posix_call)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01283">gtest.h:1283</a></div></div>
  196. <div class="ttc" id="gtest_8h_html_aa0dc86dc9837f1610e91da65458f53b3"><div class="ttname"><a href="gtest_8h.html#aa0dc86dc9837f1610e91da65458f53b3">GTEST_DISABLE_MSC_DEPRECATED_POP_</a></div><div class="ttdeci">#define GTEST_DISABLE_MSC_DEPRECATED_POP_()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00561">gtest.h:561</a></div></div>
  197. <div class="ttc" id="namespacetesting_1_1internal_html_aa6255ef3b023c5b4e1a2198d887fb977a7a051bc2794f15a4bf0eab40562a304c"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a7a051bc2794f15a4bf0eab40562a304c">testing::internal::GTEST_WARNING</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01221">gtest.h:1221</a></div></div>
  198. <div class="ttc" id="structtesting_1_1internal_1_1_const_char_ptr_html_ae94f6453fa679d815994eccc63062907"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_char_ptr.html#ae94f6453fa679d815994eccc63062907">testing::internal::ConstCharPtr::ConstCharPtr</a></div><div class="ttdeci">ConstCharPtr(const char *str)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07266">gtest.h:7266</a></div></div>
  199. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_3_018_01_4_html_a747e21c5aee8faf07ec65cd4c3d1ca62"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a747e21c5aee8faf07ec65cd4c3d1ca62">testing::internal::TypeWithSize&lt; 8 &gt;::UInt</a></div><div class="ttdeci">unsigned long long UInt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02470">gtest.h:2470</a></div></div>
  200. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html_ac2aa0664f56e84cacab823d345c7d67b"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#ac2aa0664f56e84cacab823d345c7d67b">testing::internal::ParameterizedTestSuiteInfoBase::~ParameterizedTestSuiteInfoBase</a></div><div class="ttdeci">virtual ~ParameterizedTestSuiteInfoBase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11007">gtest.h:11007</a></div></div>
  201. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html_afb1a5fe2810721040689e2e8c85b8a42"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#afb1a5fe2810721040689e2e8c85b8a42">testing::internal::CartesianProductGenerator2::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11378">gtest.h:11378</a></div></div>
  202. <div class="ttc" id="namespacetesting_1_1internal_html_a1055088bb9b867e1b7b8f096f519d7c5"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1055088bb9b867e1b7b8f096f519d7c5">testing::internal::BoolFromGTestEnv</a></div><div class="ttdeci">bool BoolFromGTestEnv(const char *flag, bool default_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10934">gtest-all.cc:10934</a></div></div>
  203. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html_a75d7d9ee7bae873295df5d4dbec6a165"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a75d7d9ee7bae873295df5d4dbec6a165">testing::internal::CartesianProductGenerator4::~CartesianProductGenerator4</a></div><div class="ttdeci">~CartesianProductGenerator4() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11621">gtest.h:11621</a></div></div>
  204. <div class="ttc" id="structtesting_1_1internal_1_1_is_same_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_same.html">testing::internal::IsSame</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01101">gtest.h:1101</a></div></div>
  205. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_interface_html_ae1de83b16fe9a53c67778a026c6a9569"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator_interface.html#ae1de83b16fe9a53c67778a026c6a9569">testing::internal::ParamGeneratorInterface::Begin</a></div><div class="ttdeci">virtual ParamIteratorInterface&lt; T &gt; * Begin() const =0</div></div>
  206. <div class="ttc" id="classtesting_1_1_test_info_html_aee8cb884c95cd446129aba936b4159e0"><div class="ttname"><a href="classtesting_1_1_test_info.html#aee8cb884c95cd446129aba936b4159e0">testing::TestInfo::result</a></div><div class="ttdeci">const TestResult * result() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15360">gtest.h:15360</a></div></div>
  207. <div class="ttc" id="namespacetesting_html_a5c90a86562b2470213c07742e0eeb0fe"><div class="ttname"><a href="namespacetesting.html#a5c90a86562b2470213c07742e0eeb0fe">testing::IsSubstring</a></div><div class="ttdeci">GTEST_API_ AssertionResult IsSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)</div></div>
  208. <div class="ttc" id="classtesting_1_1_scoped_trace_html_a1f453a2aade0db6955a111a7cb329615"><div class="ttname"><a href="classtesting_1_1_scoped_trace.html#a1f453a2aade0db6955a111a7cb329615">testing::ScopedTrace::ScopedTrace</a></div><div class="ttdeci">ScopedTrace(const char *file, int line, const std::string &amp;message)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16858">gtest.h:16858</a></div></div>
  209. <div class="ttc" id="structtesting_1_1internal_1_1_elem_from_list_impl_3_01_t_00_01_i_00_01_i_01_4_html_ab1552e339cc1ff1e0aa448d684ffaf39"><div class="ttname"><a href="structtesting_1_1internal_1_1_elem_from_list_impl_3_01_t_00_01_i_00_01_i_01_4.html#ab1552e339cc1ff1e0aa448d684ffaf39">testing::internal::ElemFromListImpl&lt; T, I, I &gt;::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07680">gtest.h:7680</a></div></div>
  210. <div class="ttc" id="namespacetesting_1_1internal_html_a31b7c3abed4a7c395f42c61e993989f4"><div class="ttname"><a href="namespacetesting_1_1internal.html#a31b7c3abed4a7c395f42c61e993989f4">testing::internal::FormatFileLocation</a></div><div class="ttdeci">GTEST_API_ ::std::string FormatFileLocation(const char *file, int line)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10620">gtest-all.cc:10620</a></div></div>
  211. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html_a971ef5a45783db277f5fae84eaef41a3"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a971ef5a45783db277f5fae84eaef41a3">testing::internal::CartesianProductGenerator2::CartesianProductGenerator2</a></div><div class="ttdeci">CartesianProductGenerator2(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11370">gtest.h:11370</a></div></div>
  212. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html_a13453a5614cda6c4d4b09011daa37800"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a13453a5614cda6c4d4b09011daa37800">testing::internal::CartesianProductGenerator5::~CartesianProductGenerator5</a></div><div class="ttdeci">~CartesianProductGenerator5() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11772">gtest.h:11772</a></div></div>
  213. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad46aa6da12aec1a3f166310478b53a08a814768ef6cd0264a0a10b1e701a63e78"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a814768ef6cd0264a0a10b1e701a63e78">testing::internal::edit_distance::kRemove</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06605">gtest.h:6605</a></div></div>
  214. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html">testing::internal::CartesianProductGenerator8</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12319">gtest.h:12319</a></div></div>
  215. <div class="ttc" id="namespacetesting_1_1internal_html_afa44fdec84edfc155ef63e4f0d4287cc"><div class="ttname"><a href="namespacetesting_1_1internal.html#afa44fdec84edfc155ef63e4f0d4287cc">testing::internal::operator!=</a></div><div class="ttdeci">bool operator!=(faketype, faketype)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16107">gtest.h:16107</a></div></div>
  216. <div class="ttc" id="classtesting_1_1internal_1_1_g_test_log_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_g_test_log.html">testing::internal::GTestLog</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01229">gtest.h:1229</a></div></div>
  217. <div class="ttc" id="classtesting_1_1_test_event_listener_html_ab4f6a0ca16ae75daf385b3b5914e1048"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#ab4f6a0ca16ae75daf385b3b5914e1048">testing::TestEventListener::OnTestStart</a></div><div class="ttdeci">virtual void OnTestStart(const TestInfo &amp;test_info)=0</div></div>
  218. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_a4afe3a68db0d0744753c8afe262e35df"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#a4afe3a68db0d0744753c8afe262e35df">testing::internal::ParamIterator::value_type</a></div><div class="ttdeci">T value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10661">gtest.h:10661</a></div></div>
  219. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a16ebe936b3a8ea462a94191635aedc27"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a16ebe936b3a8ea462a94191635aedc27">testing::internal::posix::IsATTY</a></div><div class="ttdeci">int IsATTY(int fd)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02323">gtest.h:2323</a></div></div>
  220. <div class="ttc" id="namespacetesting_1_1internal_html_a8e8ff5b11e64078831112677156cb111"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8e8ff5b11e64078831112677156cb111">testing::internal::string</a></div><div class="ttdeci">::std::string string</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01115">gtest.h:1115</a></div></div>
  221. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_base_html_aad80adf04686f7dfcf952e44afc02767"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory_base.html#aad80adf04686f7dfcf952e44afc02767">testing::internal::TestMetaFactoryBase::~TestMetaFactoryBase</a></div><div class="ttdeci">virtual ~TestMetaFactoryBase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10966">gtest.h:10966</a></div></div>
  222. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html">testing::internal::FloatingPoint</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06687">gtest.h:6687</a></div></div>
  223. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html_aadf6e9a6638c07af046c489b78aed214"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#aadf6e9a6638c07af046c489b78aed214">testing::internal::CartesianProductGenerator5::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11774">gtest.h:11774</a></div></div>
  224. <div class="ttc" id="structtesting_1_1internal_1_1bool__constant_html_aba6d09ecf7eecea6c93480f0d627a167"><div class="ttname"><a href="structtesting_1_1internal_1_1bool__constant.html#aba6d09ecf7eecea6c93480f0d627a167">testing::internal::bool_constant::type</a></div><div class="ttdeci">bool_constant&lt; bool_value &gt; type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02185">gtest.h:2185</a></div></div>
  225. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a0dabf840863e0df84046f171c891fe71"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a0dabf840863e0df84046f171c891fe71">testing::internal::FloatingPoint::FloatingPoint</a></div><div class="ttdeci">FloatingPoint(const RawType &amp;x)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06735">gtest.h:6735</a></div></div>
  226. <div class="ttc" id="namespacetesting_html_aa9f9150ed43f949c8a6bacf3f04c03ce"><div class="ttname"><a href="namespacetesting.html#aa9f9150ed43f949c8a6bacf3f04c03ce">testing::Bool</a></div><div class="ttdeci">internal::ParamGenerator&lt; bool &gt; Bool()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13520">gtest.h:13520</a></div></div>
  227. <div class="ttc" id="namespacetesting_1_1internal_html_a2196f070b2d28bceb45c7ad3b565b9ba"><div class="ttname"><a href="namespacetesting_1_1internal.html#a2196f070b2d28bceb45c7ad3b565b9ba">testing::internal::Int32FromGTestEnv</a></div><div class="ttdeci">Int32 Int32FromGTestEnv(const char *flag, Int32 default_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10948">gtest-all.cc:10948</a></div></div>
  228. <div class="ttc" id="gtest_8h_html_a0ee66d464d1a06c20c1929cae09d8758"><div class="ttname"><a href="gtest_8h.html#a0ee66d464d1a06c20c1929cae09d8758">TEST_F</a></div><div class="ttdeci">#define TEST_F(test_fixture, test_name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16993">gtest.h:16993</a></div></div>
  229. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_a590a03c6e0a3a3ac6279943ad1f01dc8"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#a590a03c6e0a3a3ac6279943ad1f01dc8">testing::internal::ParamGenerator::operator=</a></div><div class="ttdeci">ParamGenerator &amp; operator=(const ParamGenerator &amp;other)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10726">gtest.h:10726</a></div></div>
  230. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad28f23b77f716200bc6644bfc7413a63"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad28f23b77f716200bc6644bfc7413a63">testing::internal::edit_distance::CalculateOptimalEdits</a></div><div class="ttdeci">GTEST_API_ std::vector&lt; EditType &gt; CalculateOptimalEdits(const std::vector&lt; size_t &gt; &amp;left, const std::vector&lt; size_t &gt; &amp;right)</div></div>
  231. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_html_a3898640d9f6c1e18110eef90f47a5d7b"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size.html#a3898640d9f6c1e18110eef90f47a5d7b">testing::internal::TypeWithSize::UInt</a></div><div class="ttdeci">void UInt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02446">gtest.h:2446</a></div></div>
  232. <div class="ttc" id="gtest_8h_html_ad115e2c466f7e8a32f1cf23ef2e5f220"><div class="ttname"><a href="gtest_8h.html#ad115e2c466f7e8a32f1cf23ef2e5f220">GTEST_INTENTIONAL_CONST_COND_POP_</a></div><div class="ttdeci">#define GTEST_INTENTIONAL_CONST_COND_POP_()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00952">gtest.h:952</a></div></div>
  233. <div class="ttc" id="namespacetesting_1_1internal_html_ac06fc81336a3d80755f4020d34321766"><div class="ttname"><a href="namespacetesting_1_1internal.html#ac06fc81336a3d80755f4020d34321766">testing::internal::ParseInt32</a></div><div class="ttdeci">bool ParseInt32(const Message &amp;src_text, const char *str, Int32 *value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10892">gtest-all.cc:10892</a></div></div>
  234. <div class="ttc" id="classtesting_1_1_test_property_html_a377245335d9f614cd06d1650e3358e1d"><div class="ttname"><a href="classtesting_1_1_test_property.html#a377245335d9f614cd06d1650e3358e1d">testing::TestProperty::SetValue</a></div><div class="ttdeci">void SetValue(const std::string &amp;new_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15153">gtest.h:15153</a></div></div>
  235. <div class="ttc" id="namespaceutl_1_1meta_html_a0edfc2c15e42531e53c0822264d220ec"><div class="ttname"><a href="namespaceutl_1_1meta.html#a0edfc2c15e42531e53c0822264d220ec">utl::meta::size</a></div><div class="ttdeci">size_&lt; List::size()&gt; size</div><div class="ttdef"><b>Definition:</b> <a href="typelist_8h_source.html#l00129">typelist.h:129</a></div></div>
  236. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a550fdb3e55726e4cefa09f5697941425"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a550fdb3e55726e4cefa09f5697941425">testing::TestEventListener::OnTestIterationEnd</a></div><div class="ttdeci">virtual void OnTestIterationEnd(const UnitTest &amp;unit_test, int iteration)=0</div></div>
  237. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_ab95992f0a0b3741d59a24c3a7115fa60"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#ab95992f0a0b3741d59a24c3a7115fa60">testing::EmptyTestEventListener::OnTestPartResult</a></div><div class="ttdeci">void OnTestPartResult(const TestPartResult &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15748">gtest.h:15748</a></div></div>
  238. <div class="ttc" id="structtesting_1_1internal_1_1_iterator_traits_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_iterator_traits.html">testing::internal::IteratorTraits</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02200">gtest.h:2200</a></div></div>
  239. <div class="ttc" id="classtesting_1_1_test_info_html_a7759bc57f4350ad406cbbb0b3bcea320"><div class="ttname"><a href="classtesting_1_1_test_info.html#a7759bc57f4350ad406cbbb0b3bcea320">testing::TestInfo::type_param</a></div><div class="ttdeci">const char * type_param() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15313">gtest.h:15313</a></div></div>
  240. <div class="ttc" id="namespacetesting_1_1internal_html_a3f543179329c353aee1d7b54a9a8e335"><div class="ttname"><a href="namespacetesting_1_1internal.html#a3f543179329c353aee1d7b54a9a8e335">testing::internal::wstring</a></div><div class="ttdeci">::std::wstring wstring</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01121">gtest.h:1121</a></div></div>
  241. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_a908ea936a5b7a14479a1b292a7189ca6"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#a908ea936a5b7a14479a1b292a7189ca6">testing::internal::RE::RE</a></div><div class="ttdeci">RE(const char *regex)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01151">gtest.h:1151</a></div></div>
  242. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_adc356b4789eb0c2a1b5b033c7874e5a6"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#adc356b4789eb0c2a1b5b033c7874e5a6">testing::internal::ParamIterator::operator==</a></div><div class="ttdeci">bool operator==(const ParamIterator &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10686">gtest.h:10686</a></div></div>
  243. <div class="ttc" id="classtesting_1_1internal_1_1_range_generator_html_a5b3b83223b9cada3569bcee729e0fdf3"><div class="ttname"><a href="classtesting_1_1internal_1_1_range_generator.html#a5b3b83223b9cada3569bcee729e0fdf3">testing::internal::RangeGenerator::RangeGenerator</a></div><div class="ttdeci">RangeGenerator(T begin, T end, IncrementT step)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10745">gtest.h:10745</a></div></div>
  244. <div class="ttc" id="structtesting_1_1internal_1_1_is_recursive_container_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_recursive_container.html">testing::internal::IsRecursiveContainer</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07485">gtest.h:7485</a></div></div>
  245. <div class="ttc" id="classtesting_1_1_environment_html"><div class="ttname"><a href="classtesting_1_1_environment.html">testing::Environment</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15638">gtest.h:15638</a></div></div>
  246. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_af51e17827dd54977165937550c0fb030"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#af51e17827dd54977165937550c0fb030">testing::internal::ParamIterator::operator++</a></div><div class="ttdeci">ParamIterator operator++(int)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10681">gtest.h:10681</a></div></div>
  247. <div class="ttc" id="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_protobuf_01_4_html_ac96fb775dc776f02da9a671ea0e04599"><div class="ttname"><a href="classtesting_1_1internal2_1_1_type_without_formatter_3_01_t_00_01k_protobuf_01_4.html#ac96fb775dc776f02da9a671ea0e04599">testing::internal2::TypeWithoutFormatter&lt; T, kProtobuf &gt;::PrintValue</a></div><div class="ttdeci">static void PrintValue(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08198">gtest.h:8198</a></div></div>
  248. <div class="ttc" id="namespacetesting_1_1internal_html_a4bd96b7fa6486802d33ddc217af55a39"><div class="ttname"><a href="namespacetesting_1_1internal.html#a4bd96b7fa6486802d33ddc217af55a39">testing::internal::IsDigit</a></div><div class="ttdeci">bool IsDigit(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02239">gtest.h:2239</a></div></div>
  249. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html">testing::internal::ParamIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10659">gtest.h:10659</a></div></div>
  250. <div class="ttc" id="namespacetesting_1_1internal_html_aa6255ef3b023c5b4e1a2198d887fb977a75063567740f6bf7da419b1b9197b12e"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a75063567740f6bf7da419b1b9197b12e">testing::internal::GTEST_FATAL</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01223">gtest.h:1223</a></div></div>
  251. <div class="ttc" id="namespacetesting_1_1internal_html_a50003bb76ec2934be1062be11efba8bf"><div class="ttname"><a href="namespacetesting_1_1internal.html#a50003bb76ec2934be1062be11efba8bf">testing::internal::Strings</a></div><div class="ttdeci">::std::vector&lt; ::std::string &gt; Strings</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08926">gtest.h:8926</a></div></div>
  252. <div class="ttc" id="structtesting_1_1internal_1_1_relation_to_source_copy_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_relation_to_source_copy.html">testing::internal::RelationToSourceCopy</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07568">gtest.h:7568</a></div></div>
  253. <div class="ttc" id="classtesting_1_1internal_1_1_range_generator_html_a502913fbcf14e89d5765dfb44f3c1295"><div class="ttname"><a href="classtesting_1_1internal_1_1_range_generator.html#a502913fbcf14e89d5765dfb44f3c1295">testing::internal::RangeGenerator::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; T &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10750">gtest.h:10750</a></div></div>
  254. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a2b87b7ff647a128614daf50667eb9304"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a2b87b7ff647a128614daf50667eb9304">testing::internal::posix::Stat</a></div><div class="ttdeci">int Stat(const char *path, StatStruct *buf)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02324">gtest.h:2324</a></div></div>
  255. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a9ea04fa7f447865ba76df35e12ba2092"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a9ea04fa7f447865ba76df35e12ba2092">testing::TestEventListener::OnEnvironmentsTearDownEnd</a></div><div class="ttdeci">virtual void OnEnvironmentsTearDownEnd(const UnitTest &amp;unit_test)=0</div></div>
  256. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html">testing::internal::ParamIteratorInterface</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10629">gtest.h:10629</a></div></div>
  257. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_ac1301a57977b57a1ad013e4e25fc2a72"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#ac1301a57977b57a1ad013e4e25fc2a72">testing::internal::NativeArray::iterator</a></div><div class="ttdeci">Element * iterator</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07583">gtest.h:7583</a></div></div>
  258. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_interface_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator_interface.html">testing::internal::ParamGeneratorInterface</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10623">gtest.h:10623</a></div></div>
  259. <div class="ttc" id="classtesting_1_1_test_event_listener_html_aa6502e534919605be45f26a6daf9a40c"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#aa6502e534919605be45f26a6daf9a40c">testing::TestEventListener::OnEnvironmentsSetUpStart</a></div><div class="ttdeci">virtual void OnEnvironmentsSetUpStart(const UnitTest &amp;unit_test)=0</div></div>
  260. <div class="ttc" id="structtesting_1_1_test_param_info_html_a146d921039f9da8b1336f7cc6e8436c2"><div class="ttname"><a href="structtesting_1_1_test_param_info.html#a146d921039f9da8b1336f7cc6e8436c2">testing::TestParamInfo::param</a></div><div class="ttdeci">ParamType param</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10598">gtest.h:10598</a></div></div>
  261. <div class="ttc" id="namespacetesting_html_ab553b649b06ef2339cbd90f8dfa119f0"><div class="ttname"><a href="namespacetesting.html#ab553b649b06ef2339cbd90f8dfa119f0">testing::IsNotSubstring</a></div><div class="ttdeci">GTEST_API_ AssertionResult IsNotSubstring(const char *needle_expr, const char *haystack_expr, const char *needle, const char *haystack)</div></div>
  262. <div class="ttc" id="structtesting_1_1internal_1_1_is_recursive_container_impl_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_recursive_container_impl.html">testing::internal::IsRecursiveContainerImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07460">gtest.h:7460</a></div></div>
  263. <div class="ttc" id="structtesting_1_1internal_1_1_suite_api_resolver_html_a8495afe4e71c81842119035a71db7e18"><div class="ttname"><a href="structtesting_1_1internal_1_1_suite_api_resolver.html#a8495afe4e71c81842119035a71db7e18">testing::internal::SuiteApiResolver::GetTearDownCaseOrSuite</a></div><div class="ttdeci">static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06971">gtest.h:6971</a></div></div>
  264. <div class="ttc" id="classtesting_1_1_unit_test_html"><div class="ttname"><a href="classtesting_1_1_unit_test.html">testing::UnitTest</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15850">gtest.h:15850</a></div></div>
  265. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a1ddc8a4fc6bb21da372307485591a212"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a1ddc8a4fc6bb21da372307485591a212">testing::internal::posix::ChDir</a></div><div class="ttdeci">int ChDir(const char *dir)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02347">gtest.h:2347</a></div></div>
  266. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html_ab29f7a321883945d7f86f3292c100eb5"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ab29f7a321883945d7f86f3292c100eb5">testing::internal::ParameterizedTestSuiteRegistry::~ParameterizedTestSuiteRegistry</a></div><div class="ttdeci">~ParameterizedTestSuiteRegistry()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11208">gtest.h:11208</a></div></div>
  267. <div class="ttc" id="namespacetesting_1_1internal_html_a648c1bc94c2ef9e868ff3f9dff0f9c4e"><div class="ttname"><a href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4e">testing::internal::GTestColor</a></div><div class="ttdeci">GTestColor</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16427">gtest.h:16427</a></div></div>
  268. <div class="ttc" id="structtesting_1_1internal_1_1_enable_if_3_01true_01_4_html_a9398d803f1fdd99ff41823746f6299ff"><div class="ttname"><a href="structtesting_1_1internal_1_1_enable_if_3_01true_01_4.html#a9398d803f1fdd99ff41823746f6299ff">testing::internal::EnableIf&lt; true &gt;::type</a></div><div class="ttdeci">void type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07492">gtest.h:7492</a></div></div>
  269. <div class="ttc" id="namespaceutl_1_1meta_html_aa013c45afb59b5c132a72be54ba145fb"><div class="ttname"><a href="namespaceutl_1_1meta.html#aa013c45afb59b5c132a72be54ba145fb">utl::meta::repeat</a></div><div class="ttdeci">repeat_c&lt; N::type::value, Ts... &gt; repeat</div><div class="ttdef"><b>Definition:</b> <a href="typelist_8h_source.html#l00161">typelist.h:161</a></div></div>
  270. <div class="ttc" id="namespacetesting_1_1internal2_html_a07dbe129beb8952074f04b599dfce39b"><div class="ttname"><a href="namespacetesting_1_1internal2.html#a07dbe129beb8952074f04b599dfce39b">testing::internal2::operator&lt;&lt;</a></div><div class="ttdeci">::std::basic_ostream&lt; Char, CharTraits &gt; &amp; operator&lt;&lt;(::std::basic_ostream&lt; Char, CharTraits &gt; &amp;os, const T &amp;x)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08261">gtest.h:8261</a></div></div>
  271. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_adf6ba49e6b54a6e3b15dbd5733988bef"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#adf6ba49e6b54a6e3b15dbd5733988bef">testing::internal::ParamIteratorInterface::~ParamIteratorInterface</a></div><div class="ttdeci">virtual ~ParamIteratorInterface()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10631">gtest.h:10631</a></div></div>
  272. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html_a4dd5db877d076b52d44fb631e34cd47f"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4dd5db877d076b52d44fb631e34cd47f">testing::internal::CartesianProductGenerator2::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11368">gtest.h:11368</a></div></div>
  273. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html">testing::internal::NativeArray</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07579">gtest.h:7579</a></div></div>
  274. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad46aa6da12aec1a3f166310478b53a08"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08">testing::internal::edit_distance::EditType</a></div><div class="ttdeci">EditType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06605">gtest.h:6605</a></div></div>
  275. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a1d5e3da5a27eed25986859fa83cafe95"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a1d5e3da5a27eed25986859fa83cafe95">testing::internal::posix::GetEnv</a></div><div class="ttdeci">const char * GetEnv(const char *name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02369">gtest.h:2369</a></div></div>
  276. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a31edf103561e8b4d747656bc2d927661"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a31edf103561e8b4d747656bc2d927661">testing::EmptyTestEventListener::OnTestIterationStart</a></div><div class="ttdeci">void OnTestIterationStart(const UnitTest &amp;, int) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15737">gtest.h:15737</a></div></div>
  277. <div class="ttc" id="classtesting_1_1internal_1_1_type_id_helper_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_id_helper.html">testing::internal::TypeIdHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06857">gtest.h:6857</a></div></div>
  278. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a35e630877b1d9589a4bbc0439b35bbda"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a35e630877b1d9589a4bbc0439b35bbda">testing::internal::ParameterizedTestSuiteInfo::ParamNameGeneratorFunc</a></div><div class="ttdeci">ParamNameGenFunc&lt; ParamType &gt;::Type ParamNameGeneratorFunc</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11042">gtest.h:11042</a></div></div>
  279. <div class="ttc" id="classtesting_1_1_environment_html_a039bdaa705c46b9b88234cf4d3bb6254"><div class="ttname"><a href="classtesting_1_1_environment.html#a039bdaa705c46b9b88234cf4d3bb6254">testing::Environment::TearDown</a></div><div class="ttdeci">virtual void TearDown()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15647">gtest.h:15647</a></div></div>
  280. <div class="ttc" id="structtesting_1_1internal_1_1_suite_api_resolver_html_a343c36f492a946d302b1cfc930266768"><div class="ttname"><a href="structtesting_1_1internal_1_1_suite_api_resolver.html#a343c36f492a946d302b1cfc930266768">testing::internal::SuiteApiResolver::Test</a></div><div class="ttdeci">typename std::conditional&lt; sizeof(T) !=0, ::testing::Test, void &gt;::type Test</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06956">gtest.h:6956</a></div></div>
  281. <div class="ttc" id="namespacetesting_html_a265ed70a86cf2d6641582c45ad9529e2"><div class="ttname"><a href="namespacetesting.html#a265ed70a86cf2d6641582c45ad9529e2">testing::Range</a></div><div class="ttdeci">internal::ParamGenerator&lt; T &gt; Range(T start, T end, IncrementT step)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13389">gtest.h:13389</a></div></div>
  282. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01char_01_5_01_4_html_a37a3be2d26dc07b24d16c2b5eb88ecda"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01const_01char_01_5_01_4.html#a37a3be2d26dc07b24d16c2b5eb88ecda">testing::internal::UniversalTersePrinter&lt; const char * &gt;::Print</a></div><div class="ttdeci">static void Print(const char *str, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08871">gtest.h:8871</a></div></div>
  283. <div class="ttc" id="namespacetesting_1_1internal_html_ad609167d8d6792b0fb186539e0e159bd"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad609167d8d6792b0fb186539e0e159bd">testing::internal::PrintStringTo</a></div><div class="ttdeci">void PrintStringTo(const ::std::string &amp;s, ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11432">gtest-all.cc:11432</a></div></div>
  284. <div class="ttc" id="gtest_8h_html_a9f74eee05f7ee5534139a622fe7da7dd"><div class="ttname"><a href="gtest_8h.html#a9f74eee05f7ee5534139a622fe7da7dd">GTEST_DECLARE_string_</a></div><div class="ttdeci">#define GTEST_DECLARE_string_(name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02499">gtest.h:2499</a></div></div>
  285. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_a17500953df75ecda1ace46c08ff731e9"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#a17500953df75ecda1ace46c08ff731e9">testing::internal::ParamIteratorInterface::BaseGenerator</a></div><div class="ttdeci">virtual const ParamGeneratorInterface&lt; T &gt; * BaseGenerator() const =0</div></div>
  286. <div class="ttc" id="namespacetesting_1_1internal_html_a6e700804399b6694d8d6157e3a141b17"><div class="ttname"><a href="namespacetesting_1_1internal.html#a6e700804399b6694d8d6157e3a141b17">testing::internal::CmpHelperSTRNE</a></div><div class="ttdeci">GTEST_API_ AssertionResult CmpHelperSTRNE(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)</div></div>
  287. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html_a60476505c616957d1a04a31d1635df6d"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a60476505c616957d1a04a31d1635df6d">testing::internal::CartesianProductGenerator9::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12561">gtest.h:12561</a></div></div>
  288. <div class="ttc" id="classtesting_1_1internal_1_1_values_in_iterator_range_generator_html_a8b30f6028bc5739bbd7c24b0f0e409f7"><div class="ttname"><a href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a8b30f6028bc5739bbd7c24b0f0e409f7">testing::internal::ValuesInIteratorRangeGenerator::ValuesInIteratorRangeGenerator</a></div><div class="ttdeci">ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10831">gtest.h:10831</a></div></div>
  289. <div class="ttc" id="namespacetesting_1_1internal_html_acba06d4f0343dec407738ba5544af990"><div class="ttname"><a href="namespacetesting_1_1internal.html#acba06d4f0343dec407738ba5544af990">testing::internal::CaptureStdout</a></div><div class="ttdeci">void CaptureStdout()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10779">gtest-all.cc:10779</a></div></div>
  290. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a4512d19e7a108ec4926239ec1ea85d63"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a4512d19e7a108ec4926239ec1ea85d63">testing::TestEventListener::~TestEventListener</a></div><div class="ttdeci">virtual ~TestEventListener()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15671">gtest.h:15671</a></div></div>
  291. <div class="ttc" id="namespacetesting_1_1internal_html_a91ab078f10adc669f09b7f604975c518"><div class="ttname"><a href="namespacetesting_1_1internal.html#a91ab078f10adc669f09b7f604975c518">testing::internal::FormatForComparisonFailureMessage</a></div><div class="ttdeci">std::string FormatForComparisonFailureMessage(const T1 &amp;value, const T2 &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08416">gtest.h:8416</a></div></div>
  292. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_a5891d25c31919b3099489f8bbcd58b5e"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#a5891d25c31919b3099489f8bbcd58b5e">testing::internal::ParamGenerator::ParamGenerator</a></div><div class="ttdeci">ParamGenerator(const ParamGenerator &amp;other)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10724">gtest.h:10724</a></div></div>
  293. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html_a8fc8d5664560c3a788fe51903f896429"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a8fc8d5664560c3a788fe51903f896429">testing::internal::CartesianProductGenerator9::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12556">gtest.h:12556</a></div></div>
  294. <div class="ttc" id="gtest_8h_html_a5b130138db254deaf29dbe3dffa1a2a8"><div class="ttname"><a href="gtest_8h.html#a5b130138db254deaf29dbe3dffa1a2a8">GTEST_DISABLE_MSC_DEPRECATED_PUSH_</a></div><div class="ttdeci">#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00559">gtest.h:559</a></div></div>
  295. <div class="ttc" id="classtesting_1_1internal_1_1_value_array_html_acd7cd6a969a7e95152eac1787c42c9ed"><div class="ttname"><a href="classtesting_1_1internal_1_1_value_array.html#acd7cd6a969a7e95152eac1787c42c9ed">testing::internal::ValueArray::ValueArray</a></div><div class="ttdeci">ValueArray(Ts... v)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11282">gtest.h:11282</a></div></div>
  296. <div class="ttc" id="namespacetesting_1_1internal_html_a66a845df404b38fe85c5e14a069f255a"><div class="ttname"><a href="namespacetesting_1_1internal.html#a66a845df404b38fe85c5e14a069f255a">testing::internal::TimeInMillis</a></div><div class="ttdeci">TypeWithSize&lt; 8 &gt;::Int TimeInMillis</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02479">gtest.h:2479</a></div></div>
  297. <div class="ttc" id="namespacetesting_1_1internal_html_aa6255ef3b023c5b4e1a2198d887fb977"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977">testing::internal::GTestLogSeverity</a></div><div class="ttdeci">GTestLogSeverity</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01219">gtest.h:1219</a></div></div>
  298. <div class="ttc" id="namespacetesting_1_1internal_html_a62f917c3424d8841de9b49b5ec28edb4"><div class="ttname"><a href="namespacetesting_1_1internal.html#a62f917c3424d8841de9b49b5ec28edb4">testing::internal::true_type</a></div><div class="ttdeci">bool_constant&lt; true &gt; true_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02191">gtest.h:2191</a></div></div>
  299. <div class="ttc" id="classtesting_1_1_test_event_listeners_html_a6293443acb5af942eeec638b6aa6dcf2"><div class="ttname"><a href="classtesting_1_1_test_event_listeners.html#a6293443acb5af942eeec638b6aa6dcf2">testing::TestEventListeners::default_result_printer</a></div><div class="ttdeci">TestEventListener * default_result_printer() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15783">gtest.h:15783</a></div></div>
  300. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html_a474d70e577e76b7f84b0d83e90a6ec89"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a474d70e577e76b7f84b0d83e90a6ec89">testing::internal::CartesianProductGenerator3::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11494">gtest.h:11494</a></div></div>
  301. <div class="ttc" id="classtesting_1_1internal_1_1_thread_local_html_a85610bdfdbc93a4c56215e0aad7da870"><div class="ttname"><a href="classtesting_1_1internal_1_1_thread_local.html#a85610bdfdbc93a4c56215e0aad7da870">testing::internal::ThreadLocal::ThreadLocal</a></div><div class="ttdeci">ThreadLocal(const T &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02168">gtest.h:2168</a></div></div>
  302. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html_ab1b886bfb8c9c2c575ee4f9da61e3180"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#ab1b886bfb8c9c2c575ee4f9da61e3180">testing::internal::CartesianProductGenerator9::~CartesianProductGenerator9</a></div><div class="ttdeci">~CartesianProductGenerator9() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12554">gtest.h:12554</a></div></div>
  303. <div class="ttc" id="namespacetesting_1_1internal_html_a1a1a1aed3fe00908b8a45d5ab4a33665"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1a1a1aed3fe00908b8a45d5ab4a33665">testing::internal::DownCast_</a></div><div class="ttdeci">To DownCast_(From *f)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01366">gtest.h:1366</a></div></div>
  304. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a320780451eac9178434b7c77d948ecbd"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a320780451eac9178434b7c77d948ecbd">testing::EmptyTestEventListener::OnEnvironmentsTearDownStart</a></div><div class="ttdeci">void OnEnvironmentsTearDownStart(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15755">gtest.h:15755</a></div></div>
  305. <div class="ttc" id="namespacetesting_1_1internal_html_ac61e2ba2cbf259fd6ee5ffd4e49c9445"><div class="ttname"><a href="namespacetesting_1_1internal.html#ac61e2ba2cbf259fd6ee5ffd4e49c9445">testing::internal::EqFailure</a></div><div class="ttdeci">GTEST_API_ AssertionResult EqFailure(const char *expected_expression, const char *actual_expression, const std::string &amp;expected_value, const std::string &amp;actual_value, bool ignoring_case)</div></div>
  306. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_ad9984052e82c3ae26395a2d9480326d2"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#ad9984052e82c3ae26395a2d9480326d2">testing::EmptyTestEventListener::OnEnvironmentsTearDownEnd</a></div><div class="ttdeci">void OnEnvironmentsTearDownEnd(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15756">gtest.h:15756</a></div></div>
  307. <div class="ttc" id="classtesting_1_1_test_event_listeners_html"><div class="ttname"><a href="classtesting_1_1_test_event_listeners.html">testing::TestEventListeners</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15763">gtest.h:15763</a></div></div>
  308. <div class="ttc" id="structtesting_1_1internal_1_1_is_hash_table_html_a165e0a3eddfa5fadf9b950be6432d848"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_hash_table.html#a165e0a3eddfa5fadf9b950be6432d848">testing::internal::IsHashTable::value</a></div><div class="ttdeci">static const bool value</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07452">gtest.h:7452</a></div></div>
  309. <div class="ttc" id="gtest_8h_html_a86994cc68e844d8b82089c70408dfc61"><div class="ttname"><a href="gtest_8h.html#a86994cc68e844d8b82089c70408dfc61">GTEST_DISABLE_MSC_WARNINGS_PUSH_</a></div><div class="ttdeci">#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00545">gtest.h:545</a></div></div>
  310. <div class="ttc" id="classtesting_1_1internal2_1_1_type_without_formatter_html_a6651f6f7be2c0f899729eeb6038f76d3"><div class="ttname"><a href="classtesting_1_1internal2_1_1_type_without_formatter.html#a6651f6f7be2c0f899729eeb6038f76d3">testing::internal2::TypeWithoutFormatter::PrintValue</a></div><div class="ttdeci">static void PrintValue(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08183">gtest.h:8183</a></div></div>
  311. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad46aa6da12aec1a3f166310478b53a08a63400b073f5b311a87d568b5ae27ffe8"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08a63400b073f5b311a87d568b5ae27ffe8">testing::internal::edit_distance::kAdd</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06605">gtest.h:6605</a></div></div>
  312. <div class="ttc" id="structtesting_1_1internal_1_1_is_same_html_a4dfd313ccff08905c7c36f990ab52e1ca58968a8c680eff4326a25fab55aa0a5e"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_same.html#a4dfd313ccff08905c7c36f990ab52e1ca58968a8c680eff4326a25fab55aa0a5e">testing::internal::IsSame::value</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01102">gtest.h:1102</a></div></div>
  313. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01wchar__t_01_5_01_4_html_a9cdf673b44d19e6879253f30f11cd740"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01wchar__t_01_5_01_4.html#a9cdf673b44d19e6879253f30f11cd740">testing::internal::UniversalTersePrinter&lt; wchar_t * &gt;::Print</a></div><div class="ttdeci">static void Print(wchar_t *str, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08904">gtest.h:8904</a></div></div>
  314. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4_html_a6b87a445f87724f9363b348e6c697766"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a6b87a445f87724f9363b348e6c697766">testing::internal::FlatTupleElemBase&lt; FlatTuple&lt; T... &gt;, I &gt;::value_type</a></div><div class="ttdeci">typename ElemFromList&lt; I, typename MakeIndexSequence&lt; sizeof...(T)&gt;::type, T... &gt;::type value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07702">gtest.h:7702</a></div></div>
  315. <div class="ttc" id="classtesting_1_1_test_event_listeners_html_aa880de6ddfc3f5824371853c6846abbd"><div class="ttname"><a href="classtesting_1_1_test_event_listeners.html#aa880de6ddfc3f5824371853c6846abbd">testing::TestEventListeners::default_xml_generator</a></div><div class="ttdeci">TestEventListener * default_xml_generator() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15794">gtest.h:15794</a></div></div>
  316. <div class="ttc" id="gtest_8h_html_a14eb0e9c6e0df765d1fbfd2db6966d14"><div class="ttname"><a href="gtest_8h.html#a14eb0e9c6e0df765d1fbfd2db6966d14">GTEST_DECLARE_bool_</a></div><div class="ttdeci">#define GTEST_DECLARE_bool_(name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02496">gtest.h:2496</a></div></div>
  317. <div class="ttc" id="classtesting_1_1internal_1_1_format_for_comparison_3_01_to_print[_n]_00_01_other_operand_01_4_html_a76c526461c8fa7df75f7b32ab889b9e0"><div class="ttname"><a href="classtesting_1_1internal_1_1_format_for_comparison_3_01_to_print[_n]_00_01_other_operand_01_4.html#a76c526461c8fa7df75f7b32ab889b9e0">testing::internal::FormatForComparison&lt; ToPrint[N], OtherOperand &gt;::Format</a></div><div class="ttdeci">::std::string Format(const ToPrint *value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08351">gtest.h:8351</a></div></div>
  318. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html_a2a1d5af705de6cc340291294fa38437e"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a2a1d5af705de6cc340291294fa38437e">testing::internal::CartesianProductGenerator3::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11490">gtest.h:11490</a></div></div>
  319. <div class="ttc" id="namespacetesting_1_1internal_html_a40bcfd87e26aae36e0cc51e5db64fd89"><div class="ttname"><a href="namespacetesting_1_1internal.html#a40bcfd87e26aae36e0cc51e5db64fd89">testing::internal::GetFileSize</a></div><div class="ttdeci">size_t GetFileSize(FILE *file)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10804">gtest-all.cc:10804</a></div></div>
  320. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html">testing::EmptyTestEventListener</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15734">gtest.h:15734</a></div></div>
  321. <div class="ttc" id="classtesting_1_1internal_1_1_flat_tuple_html_a48a13560f8963f727d81a7922e3b3e50"><div class="ttname"><a href="classtesting_1_1internal_1_1_flat_tuple.html#a48a13560f8963f727d81a7922e3b3e50">testing::internal::FlatTuple::Get</a></div><div class="ttdeci">ElemFromList&lt; I, Indices, T... &gt;::type &amp; Get()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07745">gtest.h:7745</a></div></div>
  322. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer.html">testing::internal::UniversalTersePrinter</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08848">gtest.h:8848</a></div></div>
  323. <div class="ttc" id="namespacetesting_1_1internal_html_aad4beed95d0846e6ffc5da0978ef3bb9"><div class="ttname"><a href="namespacetesting_1_1internal.html#aad4beed95d0846e6ffc5da0978ef3bb9">testing::internal::StreamableToString</a></div><div class="ttdeci">std::string StreamableToString(const T &amp;streamable)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02769">gtest.h:2769</a></div></div>
  324. <div class="ttc" id="namespaceutl_1_1meta_html_ab5508236016638fa8e6b97cd17dfc9c2"><div class="ttname"><a href="namespaceutl_1_1meta.html#ab5508236016638fa8e6b97cd17dfc9c2">utl::meta::count</a></div><div class="ttdeci">count_if&lt; List, same_as&lt; T &gt; &gt; count</div><div class="ttdef"><b>Definition:</b> <a href="typelist_8h_source.html#l00761">typelist.h:761</a></div></div>
  325. <div class="ttc" id="classtesting_1_1_environment_html_a0e41c320362576d752cd1f44cabd57d4"><div class="ttname"><a href="classtesting_1_1_environment.html#a0e41c320362576d752cd1f44cabd57d4">testing::Environment::~Environment</a></div><div class="ttdeci">virtual ~Environment()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15641">gtest.h:15641</a></div></div>
  326. <div class="ttc" id="structtesting_1_1_test_param_info_html"><div class="ttname"><a href="structtesting_1_1_test_param_info.html">testing::TestParamInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10594">gtest.h:10594</a></div></div>
  327. <div class="ttc" id="classtesting_1_1internal_1_1_range_generator_html_a72f6e6f65f1dd3f86672f6ed47df74ef"><div class="ttname"><a href="classtesting_1_1internal_1_1_range_generator.html#a72f6e6f65f1dd3f86672f6ed47df74ef">testing::internal::RangeGenerator::~RangeGenerator</a></div><div class="ttdeci">~RangeGenerator() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10748">gtest.h:10748</a></div></div>
  328. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_a14e735c8bd113556ae905a560cd2d607"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#a14e735c8bd113556ae905a560cd2d607">testing::internal::ParamGenerator::begin</a></div><div class="ttdeci">iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10731">gtest.h:10731</a></div></div>
  329. <div class="ttc" id="namespacetesting_html_a992de1d091ce660f451d1e8b3ce30fd6"><div class="ttname"><a href="namespacetesting.html#a992de1d091ce660f451d1e8b3ce30fd6">testing::TimeInMillis</a></div><div class="ttdeci">internal::TimeInMillis TimeInMillis</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15127">gtest.h:15127</a></div></div>
  330. <div class="ttc" id="gtest_8h_html_aa73be6f0ba4a7456180a94904ce17790"><div class="ttname"><a href="gtest_8h.html#aa73be6f0ba4a7456180a94904ce17790">GTEST_API_</a></div><div class="ttdeci">#define GTEST_API_</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00998">gtest.h:998</a></div></div>
  331. <div class="ttc" id="classtesting_1_1_test_suite_html_add51ece89b069b29e07f0476e0e6aae9"><div class="ttname"><a href="classtesting_1_1_test_suite.html#add51ece89b069b29e07f0476e0e6aae9">testing::TestSuite::Passed</a></div><div class="ttdeci">bool Passed() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15488">gtest.h:15488</a></div></div>
  332. <div class="ttc" id="structtesting_1_1internal_1_1_elem_from_list_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_elem_from_list.html">testing::internal::ElemFromList</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07686">gtest.h:7686</a></div></div>
  333. <div class="ttc" id="structtesting_1_1internal_1_1_make_index_sequence_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_make_index_sequence.html">testing::internal::MakeIndexSequence</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07665">gtest.h:7665</a></div></div>
  334. <div class="ttc" id="namespacetesting_1_1internal_html_abb1d0789f19bdde21affccbd1078b525"><div class="ttname"><a href="namespacetesting_1_1internal.html#abb1d0789f19bdde21affccbd1078b525">testing::internal::false_type</a></div><div class="ttdeci">bool_constant&lt; false &gt; false_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02190">gtest.h:2190</a></div></div>
  335. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html_a89ef6dd228f4188e1928513e860580d0"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a89ef6dd228f4188e1928513e860580d0">testing::internal::ParameterizedTestSuiteRegistry::GetTestSuitePatternHolder</a></div><div class="ttdeci">ParameterizedTestSuiteInfo&lt; TestSuite &gt; * GetTestSuitePatternHolder(const char *test_suite_name, CodeLocation code_location)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11217">gtest.h:11217</a></div></div>
  336. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_interface_html_afa7211b74990e11d3fc7ad4e7113da4f"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator_interface.html#afa7211b74990e11d3fc7ad4e7113da4f">testing::internal::ParamGeneratorInterface::End</a></div><div class="ttdeci">virtual ParamIteratorInterface&lt; T &gt; * End() const =0</div></div>
  337. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a3046d93cfa23097e7b7c91f5f982dc78"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a3046d93cfa23097e7b7c91f5f982dc78">testing::internal::NativeArray::begin</a></div><div class="ttdeci">const_iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07608">gtest.h:7608</a></div></div>
  338. <div class="ttc" id="namespacetesting_1_1internal_html_af4bebf36baf0b0a5b26d051dde55fa47"><div class="ttname"><a href="namespacetesting_1_1internal.html#af4bebf36baf0b0a5b26d051dde55fa47">testing::internal::ArrayEq</a></div><div class="ttdeci">bool ArrayEq(const T *lhs, size_t size, const U *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07517">gtest.h:7517</a></div></div>
  339. <div class="ttc" id="structtesting_1_1internal_1_1_code_location_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_code_location.html">testing::internal::CodeLocation</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06929">gtest.h:6929</a></div></div>
  340. <div class="ttc" id="namespacetesting_1_1internal_html_a40d4fffcd2bf56f18b1c380615aa85e3"><div class="ttname"><a href="namespacetesting_1_1internal.html#a40d4fffcd2bf56f18b1c380615aa85e3">testing::internal::UInt32</a></div><div class="ttdeci">TypeWithSize&lt; 4 &gt;::UInt UInt32</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02476">gtest.h:2476</a></div></div>
  341. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_ac184ee5741af5be3402213819c834405"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#ac184ee5741af5be3402213819c834405">testing::internal::NativeArray::NativeArray</a></div><div class="ttdeci">NativeArray(const Element *array, size_t count, RelationToSourceCopy)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07592">gtest.h:7592</a></div></div>
  342. <div class="ttc" id="classtesting_1_1internal_1_1_mutex_html_ae7e2191886c00182176b23c4f4d049f8"><div class="ttname"><a href="classtesting_1_1internal_1_1_mutex.html#ae7e2191886c00182176b23c4f4d049f8">testing::internal::Mutex::Lock</a></div><div class="ttdeci">void Lock()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02142">gtest.h:2142</a></div></div>
  343. <div class="ttc" id="namespacetesting_1_1internal2_html_a140c8efd51e63a3def98445bff107518"><div class="ttname"><a href="namespacetesting_1_1internal2.html#a140c8efd51e63a3def98445bff107518">testing::internal2::kProtobufOneLinerMaxLength</a></div><div class="ttdeci">const size_t kProtobufOneLinerMaxLength</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08193">gtest.h:8193</a></div></div>
  344. <div class="ttc" id="structtesting_1_1internal_1_1_add_reference_3_01_t_01_6_01_4_html_a93c064cdcdaced0abd167258425e57af"><div class="ttname"><a href="structtesting_1_1internal_1_1_add_reference_3_01_t_01_6_01_4.html#a93c064cdcdaced0abd167258425e57af">testing::internal::AddReference&lt; T &amp; &gt;::type</a></div><div class="ttdeci">T &amp; type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01294">gtest.h:1294</a></div></div>
  345. <div class="ttc" id="namespacetesting_1_1internal_html_ab1114197d3c657d8b7f8e0c5caa12d00"><div class="ttname"><a href="namespacetesting_1_1internal.html#ab1114197d3c657d8b7f8e0c5caa12d00">testing::internal::TypeId</a></div><div class="ttdeci">const void * TypeId</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06854">gtest.h:6854</a></div></div>
  346. <div class="ttc" id="namespacetesting_1_1internal_html_a0967cbf18fb1594f82512d8d822aba21"><div class="ttname"><a href="namespacetesting_1_1internal.html#a0967cbf18fb1594f82512d8d822aba21">testing::internal::StringFromGTestEnv</a></div><div class="ttdeci">const char * StringFromGTestEnv(const char *flag, const char *default_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10991">gtest-all.cc:10991</a></div></div>
  347. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_af4acf9f78d55f815a18b43786511abef"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#af4acf9f78d55f815a18b43786511abef">testing::internal::posix::Write</a></div><div class="ttdeci">int Write(int fd, const void *buf, unsigned int count)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02363">gtest.h:2363</a></div></div>
  348. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html">testing::internal::CartesianProductGenerator5</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11763">gtest.h:11763</a></div></div>
  349. <div class="ttc" id="namespacetesting_1_1internal_html_ad9c627ef2a94245e3fd69e7ab3d49b42"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad9c627ef2a94245e3fd69e7ab3d49b42">testing::internal::ToLower</a></div><div class="ttdeci">char ToLower(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02259">gtest.h:2259</a></div></div>
  350. <div class="ttc" id="classtesting_1_1internal_1_1_mutex_html_a38e1833a78e3eec81ad23ce1b056b40e"><div class="ttname"><a href="classtesting_1_1internal_1_1_mutex.html#a38e1833a78e3eec81ad23ce1b056b40e">testing::internal::Mutex::Mutex</a></div><div class="ttdeci">Mutex()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02141">gtest.h:2141</a></div></div>
  351. <div class="ttc" id="classtesting_1_1internal_1_1_flat_tuple_html_a9ea6508fa6413ceca5e38b8077c67938"><div class="ttname"><a href="classtesting_1_1internal_1_1_flat_tuple.html#a9ea6508fa6413ceca5e38b8077c67938">testing::internal::FlatTuple::Get</a></div><div class="ttdeci">const ElemFromList&lt; I, Indices, T... &gt;::type &amp; Get() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07740">gtest.h:7740</a></div></div>
  352. <div class="ttc" id="namespacetesting_1_1internal2_html_abfb9aa80365f93b952e9a4bea09947a8"><div class="ttname"><a href="namespacetesting_1_1internal2.html#abfb9aa80365f93b952e9a4bea09947a8">testing::internal2::PrintBytesInObjectTo</a></div><div class="ttdeci">void PrintBytesInObjectTo(const unsigned char *obj_bytes, size_t count, ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11112">gtest-all.cc:11112</a></div></div>
  353. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_a6b017d4d030927714d495ee95ae92fbc"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#a6b017d4d030927714d495ee95ae92fbc">testing::internal::ParamGenerator::ParamGenerator</a></div><div class="ttdeci">ParamGenerator(ParamGeneratorInterface&lt; T &gt; *impl)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10723">gtest.h:10723</a></div></div>
  354. <div class="ttc" id="structtesting_1_1internal_1_1faketype_html"><div class="ttname"><a href="structtesting_1_1internal_1_1faketype.html">testing::internal::faketype</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16105">gtest.h:16105</a></div></div>
  355. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_adfff808576d929085679c315b255af7e"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#adfff808576d929085679c315b255af7e">testing::internal::ParamIteratorInterface::Current</a></div><div class="ttdeci">virtual const T * Current() const =0</div></div>
  356. <div class="ttc" id="classtesting_1_1_test_suite_html_ab2ea12318bdbfb6aa97792344b49e3db"><div class="ttname"><a href="classtesting_1_1_test_suite.html#ab2ea12318bdbfb6aa97792344b49e3db">testing::TestSuite::type_param</a></div><div class="ttdeci">const char * type_param() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15455">gtest.h:15455</a></div></div>
  357. <div class="ttc" id="namespaceutl_html_a1b83655ba00b548af9b51f169c6c567a"><div class="ttname"><a href="namespaceutl.html#a1b83655ba00b548af9b51f169c6c567a">utl::ptrdiff_t</a></div><div class="ttdeci">std::ptrdiff_t ptrdiff_t</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00040">types.h:40</a></div></div>
  358. <div class="ttc" id="namespacetesting_1_1internal_html_a98ce463e5dbe0c6120fa817e1f8f2944"><div class="ttname"><a href="namespacetesting_1_1internal.html#a98ce463e5dbe0c6120fa817e1f8f2944">testing::internal::CmpHelperFloatingPointEQ</a></div><div class="ttdeci">AssertionResult CmpHelperFloatingPointEQ(const char *lhs_expression, const char *rhs_expression, RawType lhs_value, RawType rhs_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16351">gtest.h:16351</a></div></div>
  359. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_aa17337e50a2ac855719bc0676529558f"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#aa17337e50a2ac855719bc0676529558f">testing::internal::FloatingPoint::fraction_bits</a></div><div class="ttdeci">Bits fraction_bits() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06765">gtest.h:6765</a></div></div>
  360. <div class="ttc" id="namespacetesting_1_1internal_html_a7174fbf5d6ba458afae675022c9aae1e"><div class="ttname"><a href="namespacetesting_1_1internal.html#a7174fbf5d6ba458afae675022c9aae1e">testing::internal::PrintTupleTo</a></div><div class="ttdeci">void PrintTupleTo(const T &amp;, std::integral_constant&lt; size_t, 0 &gt;, ::std::ostream *)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08677">gtest.h:8677</a></div></div>
  361. <div class="ttc" id="namespacetesting_1_1internal_html_a00c3d012df6173622ef558a131bfb95d"><div class="ttname"><a href="namespacetesting_1_1internal.html#a00c3d012df6173622ef558a131bfb95d">testing::internal::CmpHelperSTRCASEEQ</a></div><div class="ttdeci">GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)</div></div>
  362. <div class="ttc" id="namespacetesting_1_1internal_html_a8ee38faaf875f133358abaf9bc056cec"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8ee38faaf875f133358abaf9bc056cec">testing::internal::Int32</a></div><div class="ttdeci">TypeWithSize&lt; 4 &gt;::Int Int32</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02475">gtest.h:2475</a></div></div>
  363. <div class="ttc" id="classtesting_1_1internal_1_1_flat_tuple_html_a056c58b5dd85f470ec5db1db9956c702"><div class="ttname"><a href="classtesting_1_1internal_1_1_flat_tuple.html#a056c58b5dd85f470ec5db1db9956c702">testing::internal::FlatTuple::FlatTuple</a></div><div class="ttdeci">FlatTuple()=default</div></div>
  364. <div class="ttc" id="namespacetesting_1_1internal_html_af429e04f70f9c10f6aa76a5d1ccd389f"><div class="ttname"><a href="namespacetesting_1_1internal.html#af429e04f70f9c10f6aa76a5d1ccd389f">testing::internal::IsSpace</a></div><div class="ttdeci">bool IsSpace(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02245">gtest.h:2245</a></div></div>
  365. <div class="ttc" id="structtesting_1_1_print_to_string_param_name_html"><div class="ttname"><a href="structtesting_1_1_print_to_string_param_name.html">testing::PrintToStringParamName</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10604">gtest.h:10604</a></div></div>
  366. <div class="ttc" id="gtest_8h_html_a4a5b6fbde5dd05e05dd6846ac5e5c18e"><div class="ttname"><a href="gtest_8h.html#a4a5b6fbde5dd05e05dd6846ac5e5c18e">GTEST_IMPL_CMP_HELPER_</a></div><div class="ttdeci">#define GTEST_IMPL_CMP_HELPER_(op_name, op)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16226">gtest.h:16226</a></div></div>
  367. <div class="ttc" id="classtesting_1_1_test_info_html_a866e33b5bc5ab2a6e5375fc7d3af0f96"><div class="ttname"><a href="classtesting_1_1_test_info.html#a866e33b5bc5ab2a6e5375fc7d3af0f96">testing::TestInfo::should_run</a></div><div class="ttdeci">bool should_run() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15350">gtest.h:15350</a></div></div>
  368. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder5_html_afb3a413ff0e59f31e621937f968d0923"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder5.html#afb3a413ff0e59f31e621937f968d0923">testing::internal::CartesianProductHolder5::CartesianProductHolder5</a></div><div class="ttdeci">CartesianProductHolder5(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13116">gtest.h:13116</a></div></div>
  369. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a1e32e4bd4857822b6b50e6900aa5c651"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a1e32e4bd4857822b6b50e6900aa5c651">testing::EmptyTestEventListener::OnTestSuiteStart</a></div><div class="ttdeci">void OnTestSuiteStart(const TestSuite &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15741">gtest.h:15741</a></div></div>
  370. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_elem_base_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_elem_base.html">testing::internal::FlatTupleElemBase</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07696">gtest.h:7696</a></div></div>
  371. <div class="ttc" id="structtesting_1_1internal_1_1_add_reference_html_a2df8dd7c4e41f6390e6e66b1a9a67bb4"><div class="ttname"><a href="structtesting_1_1internal_1_1_add_reference.html#a2df8dd7c4e41f6390e6e66b1a9a67bb4">testing::internal::AddReference::type</a></div><div class="ttdeci">T &amp; type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01292">gtest.h:1292</a></div></div>
  372. <div class="ttc" id="namespacetesting_1_1internal_html_a40b2a93ff318f5975eb8246b01221ce8"><div class="ttname"><a href="namespacetesting_1_1internal.html#a40b2a93ff318f5975eb8246b01221ce8">testing::internal::fmt</a></div><div class="ttdeci">GTEST_API_ const char * fmt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16430">gtest.h:16430</a></div></div>
  373. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_a52e5fdca7d497a0ed358051e36b8b491"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#a52e5fdca7d497a0ed358051e36b8b491">testing::internal::ParamIterator::operator*</a></div><div class="ttdeci">const T &amp; operator*() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10673">gtest.h:10673</a></div></div>
  374. <div class="ttc" id="namespacetesting_html_abcf5181cecc3c07915dceb3de46ab07f"><div class="ttname"><a href="namespacetesting.html#abcf5181cecc3c07915dceb3de46ab07f">testing::TempDir</a></div><div class="ttdeci">GTEST_API_ std::string TempDir()</div></div>
  375. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_afb8a816bb598225d775caaf43a893ef0"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#afb8a816bb598225d775caaf43a893ef0">testing::internal::FloatingPoint::sign_bit</a></div><div class="ttdeci">Bits sign_bit() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06768">gtest.h:6768</a></div></div>
  376. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html_a07f33a7263f933d4fbabdb9e930d7f86"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a07f33a7263f933d4fbabdb9e930d7f86">testing::internal::CartesianProductGenerator8::CartesianProductGenerator8</a></div><div class="ttdeci">CartesianProductGenerator8(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5, const ParamGenerator&lt; T6 &gt; &amp;g6, const ParamGenerator&lt; T7 &gt; &amp;g7, const ParamGenerator&lt; T8 &gt; &amp;g8)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12325">gtest.h:12325</a></div></div>
  377. <div class="ttc" id="classtesting_1_1internal_1_1_universal_printer_html_aecec021e1abbaa260b701e24e3fe33eb"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_printer.html#aecec021e1abbaa260b701e24e3fe33eb">testing::internal::UniversalPrinter::Print</a></div><div class="ttdeci">static void Print(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08724">gtest.h:8724</a></div></div>
  378. <div class="ttc" id="classtesting_1_1_test_html_af374706cbaf0ffc460f4fd04e7c150f1"><div class="ttname"><a href="classtesting_1_1_test.html#af374706cbaf0ffc460f4fd04e7c150f1">testing::Test::TearDownTestCase</a></div><div class="ttdeci">static void TearDownTestCase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15039">gtest.h:15039</a></div></div>
  379. <div class="ttc" id="namespacetesting_1_1internal_html_a999c7ef9ff01b6d2d76669372c444aa3"><div class="ttname"><a href="namespacetesting_1_1internal.html#a999c7ef9ff01b6d2d76669372c444aa3">testing::internal::kStackTraceMarker</a></div><div class="ttdeci">GTEST_API_ const char kStackTraceMarker[]</div></div>
  380. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html_a44c2ee0296de42dc6ca7abbf48d00495"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a44c2ee0296de42dc6ca7abbf48d00495">testing::internal::ParameterizedTestSuiteRegistry::RegisterTests</a></div><div class="ttdeci">void RegisterTests()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11245">gtest.h:11245</a></div></div>
  381. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html_a230b2ec353e917e1afeb6aae5668e19e"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#a230b2ec353e917e1afeb6aae5668e19e">testing::internal::CartesianProductGenerator3::~CartesianProductGenerator3</a></div><div class="ttdeci">~CartesianProductGenerator3() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11488">gtest.h:11488</a></div></div>
  382. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_ae1cda748e49c6906421c6183c4d07c5a"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#ae1cda748e49c6906421c6183c4d07c5a">testing::internal::NativeArray::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07609">gtest.h:7609</a></div></div>
  383. <div class="ttc" id="classtesting_1_1internal2_1_1_type_without_formatter_html"><div class="ttname"><a href="classtesting_1_1internal2_1_1_type_without_formatter.html">testing::internal2::TypeWithoutFormatter</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08180">gtest.h:8180</a></div></div>
  384. <div class="ttc" id="classtesting_1_1internal_1_1_g_test_log_html_aebb92e67d98eca69f0347d5121dab27a"><div class="ttname"><a href="classtesting_1_1internal_1_1_g_test_log.html#aebb92e67d98eca69f0347d5121dab27a">testing::internal::GTestLog::GetStream</a></div><div class="ttdeci">::std::ostream &amp; GetStream()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01236">gtest.h:1236</a></div></div>
  385. <div class="ttc" id="classtesting_1_1internal_1_1_values_in_iterator_range_generator_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html">testing::internal::ValuesInIteratorRangeGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10828">gtest.h:10828</a></div></div>
  386. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html">testing::internal::ParameterizedTestSuiteInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11034">gtest.h:11034</a></div></div>
  387. <div class="ttc" id="namespacetesting_html_a4917922963bacef3e301e67366c41df3"><div class="ttname"><a href="namespacetesting.html#a4917922963bacef3e301e67366c41df3">testing::Combine</a></div><div class="ttdeci">internal::CartesianProductHolder2&lt; Generator1, Generator2 &gt; Combine(const Generator1 &amp;g1, const Generator2 &amp;g2)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13571">gtest.h:13571</a></div></div>
  388. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html_afdca1e94b01f654564b9cbe66fb5ca94"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html#afdca1e94b01f654564b9cbe66fb5ca94">testing::internal::CartesianProductGenerator3::CartesianProductGenerator3</a></div><div class="ttdeci">CartesianProductGenerator3(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11485">gtest.h:11485</a></div></div>
  389. <div class="ttc" id="namespacetesting_1_1internal_html_a2e96c98d5bd8ee4a1b92f8e3cde7dd40"><div class="ttname"><a href="namespacetesting_1_1internal.html#a2e96c98d5bd8ee4a1b92f8e3cde7dd40">testing::internal::DefaultPrintTo</a></div><div class="ttdeci">void DefaultPrintTo(WrapPrinterType&lt; kPrintContainer &gt;, const C &amp;container, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08445">gtest.h:8445</a></div></div>
  390. <div class="ttc" id="namespacetesting_1_1internal_html_a02e1981f5ff70609e6ac06e006ff519a"><div class="ttname"><a href="namespacetesting_1_1internal.html#a02e1981f5ff70609e6ac06e006ff519a">testing::internal::Float</a></div><div class="ttdeci">FloatingPoint&lt; float &gt; Float</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06845">gtest.h:6845</a></div></div>
  391. <div class="ttc" id="namespacetesting_1_1internal_html_a66a7579b1893b260c31dad577f7a5c48"><div class="ttname"><a href="namespacetesting_1_1internal.html#a66a7579b1893b260c31dad577f7a5c48">testing::internal::Double</a></div><div class="ttdeci">FloatingPoint&lt; double &gt; Double</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06846">gtest.h:6846</a></div></div>
  392. <div class="ttc" id="classtesting_1_1_test_suite_html_ab3369db678ca3d9648d6fd63ad038986"><div class="ttname"><a href="classtesting_1_1_test_suite.html#ab3369db678ca3d9648d6fd63ad038986">testing::TestSuite::name</a></div><div class="ttdeci">const char * name() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15451">gtest.h:15451</a></div></div>
  393. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a1d8c7f3f1f92826f668edae1bc5aadf4"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a1d8c7f3f1f92826f668edae1bc5aadf4">testing::EmptyTestEventListener::OnTestStart</a></div><div class="ttdeci">void OnTestStart(const TestInfo &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15747">gtest.h:15747</a></div></div>
  394. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_acbad5d4ea5b73fd1765f5f760642932a"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#acbad5d4ea5b73fd1765f5f760642932a">testing::internal::posix::RmDir</a></div><div class="ttdeci">int RmDir(const char *dir)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02329">gtest.h:2329</a></div></div>
  395. <div class="ttc" id="namespacetesting_1_1internal_html_a5f74b933606b0a742cd5a8ad2d7087e0"><div class="ttname"><a href="namespacetesting_1_1internal.html#a5f74b933606b0a742cd5a8ad2d7087e0">testing::internal::CmpHelperSTRCASENE</a></div><div class="ttdeci">GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char *s1_expression, const char *s2_expression, const char *s1, const char *s2)</div></div>
  396. <div class="ttc" id="namespacetesting_1_1internal2_html_aeb8161b0b3ee503347b0662d7028fd57"><div class="ttname"><a href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57">testing::internal2::TypeKind</a></div><div class="ttdeci">TypeKind</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08164">gtest.h:8164</a></div></div>
  397. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder6_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder6.html">testing::internal::CartesianProductHolder6</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13143">gtest.h:13143</a></div></div>
  398. <div class="ttc" id="namespacetesting_1_1internal_html_ad40d557f9c157790160d6e4f2b0d9bab"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad40d557f9c157790160d6e4f2b0d9bab">testing::internal::CmpHelperSTREQ</a></div><div class="ttdeci">GTEST_API_ AssertionResult CmpHelperSTREQ(const char *s1_expression, const char *s2_expression, const wchar_t *s1, const wchar_t *s2)</div></div>
  399. <div class="ttc" id="structtesting_1_1internal_1_1_const_char_ptr_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_char_ptr.html">testing::internal::ConstCharPtr</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07265">gtest.h:7265</a></div></div>
  400. <div class="ttc" id="structtesting_1_1_test_param_info_html_aa54199319bcad5a33c8538ecaecb6de5"><div class="ttname"><a href="structtesting_1_1_test_param_info.html#aa54199319bcad5a33c8538ecaecb6de5">testing::TestParamInfo::TestParamInfo</a></div><div class="ttdeci">TestParamInfo(const ParamType &amp;a_param, size_t an_index)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10595">gtest.h:10595</a></div></div>
  401. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html">testing::internal::CartesianProductGenerator2</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11365">gtest.h:11365</a></div></div>
  402. <div class="ttc" id="structtesting_1_1internal_1_1_double_sequence_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_double_sequence.html">testing::internal::DoubleSequence</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07652">gtest.h:7652</a></div></div>
  403. <div class="ttc" id="namespacetesting_1_1internal_html_a648c1bc94c2ef9e868ff3f9dff0f9c4ea2cca441161aca75a208ff08d07f5b1a5"><div class="ttname"><a href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea2cca441161aca75a208ff08d07f5b1a5">testing::internal::COLOR_YELLOW</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16427">gtest.h:16427</a></div></div>
  404. <div class="ttc" id="classtesting_1_1_test_event_listener_html_ad15b6246d94c268e233487a86463ef3d"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#ad15b6246d94c268e233487a86463ef3d">testing::TestEventListener::OnTestProgramEnd</a></div><div class="ttdeci">virtual void OnTestProgramEnd(const UnitTest &amp;unit_test)=0</div></div>
  405. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_aa79a950758d0f1d62f7762d1e9cefe86"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#aa79a950758d0f1d62f7762d1e9cefe86">testing::internal::RE::FullMatch</a></div><div class="ttdeci">static bool FullMatch(const ::std::string &amp;str, const RE &amp;re)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01161">gtest.h:1161</a></div></div>
  406. <div class="ttc" id="namespacetesting_1_1internal_html_a8257a87aa42cebaa54b0c48a6ae657a5"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8257a87aa42cebaa54b0c48a6ae657a5">testing::internal::TearDownTestSuiteFunc</a></div><div class="ttdeci">void(*)() TearDownTestSuiteFunc</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06927">gtest.h:6927</a></div></div>
  407. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t_01_6_01_4_html_a931f93cc52a3046706c87d0a90640483"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t_01_6_01_4.html#a931f93cc52a3046706c87d0a90640483">testing::internal::UniversalTersePrinter&lt; T &amp; &gt;::Print</a></div><div class="ttdeci">static void Print(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08857">gtest.h:8857</a></div></div>
  408. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_html_abd5d30fab71229deb5e63f5bb5ea3fd8"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory.html#abd5d30fab71229deb5e63f5bb5ea3fd8">testing::internal::TestMetaFactory::CreateTestFactory</a></div><div class="ttdeci">TestFactoryBase * CreateTestFactory(ParamType parameter) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10987">gtest.h:10987</a></div></div>
  409. <div class="ttc" id="structtesting_1_1internal_1_1_static_assert_type_eq_helper_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_static_assert_type_eq_helper.html">testing::internal::StaticAssertTypeEqHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01092">gtest.h:1092</a></div></div>
  410. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a8eb9f08d3af29941c2d2a964cfff3ecb"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a8eb9f08d3af29941c2d2a964cfff3ecb">testing::internal::posix::StatStruct</a></div><div class="ttdeci">struct stat StatStruct</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02320">gtest.h:2320</a></div></div>
  411. <div class="ttc" id="namespacetesting_html_aee3f6f99df893f576f705f66c0559482"><div class="ttname"><a href="namespacetesting.html#aee3f6f99df893f576f705f66c0559482">testing::InitGoogleTest</a></div><div class="ttdeci">GTEST_API_ void InitGoogleTest(int *argc, char **argv)</div></div>
  412. <div class="ttc" id="classtesting_1_1_test_with_param_html"><div class="ttname"><a href="classtesting_1_1_test_with_param.html">testing::TestWithParam</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16505">gtest.h:16505</a></div></div>
  413. <div class="ttc" id="classtesting_1_1internal_1_1_flat_tuple_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_flat_tuple.html">testing::internal::FlatTuple</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07693">gtest.h:7693</a></div></div>
  414. <div class="ttc" id="namespacetesting_1_1internal_html_a06b1b20029fbd1dbeb59752f914fab84"><div class="ttname"><a href="namespacetesting_1_1internal.html#a06b1b20029fbd1dbeb59752f914fab84">testing::internal::LogToStderr</a></div><div class="ttdeci">void LogToStderr()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01250">gtest.h:1250</a></div></div>
  415. <div class="ttc" id="namespaceutl_html_a22cbecb50ee5c1032de66133e96cbac6"><div class="ttname"><a href="namespaceutl.html#a22cbecb50ee5c1032de66133e96cbac6">utl::size_t</a></div><div class="ttdeci">std::size_t size_t</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00037">types.h:37</a></div></div>
  416. <div class="ttc" id="namespacetesting_1_1internal_html_afa92f5a284929dc3723e654a25feb7b9"><div class="ttname"><a href="namespacetesting_1_1internal.html#afa92f5a284929dc3723e654a25feb7b9">testing::internal::UniversalTersePrint</a></div><div class="ttdeci">void UniversalTersePrint(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08910">gtest.h:8910</a></div></div>
  417. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_abf228bf6cd48f12c8b44c85b4971a731"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#abf228bf6cd48f12c8b44c85b4971a731">testing::internal::FloatingPoint::Bits</a></div><div class="ttdeci">TypeWithSize&lt; sizeof(RawType)&gt;::UInt Bits</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06691">gtest.h:6691</a></div></div>
  418. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_factory_html_a36d962674d7bf845398637338b9f75cb"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a36d962674d7bf845398637338b9f75cb">testing::internal::ParameterizedTestFactory::CreateTest</a></div><div class="ttdeci">Test * CreateTest() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10948">gtest.h:10948</a></div></div>
  419. <div class="ttc" id="namespacetesting_1_1internal_html_a17fb8f0125fa92404a249ed38a43faa4"><div class="ttname"><a href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4">testing::internal::DefaultPrinterType</a></div><div class="ttdeci">DefaultPrinterType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08434">gtest.h:8434</a></div></div>
  420. <div class="ttc" id="structtesting_1_1internal_1_1_const_ref_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_ref.html">testing::internal::ConstRef</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01313">gtest.h:1313</a></div></div>
  421. <div class="ttc" id="gtest_8h_html_a016124361c862c0db315e4c9dc4d911a"><div class="ttname"><a href="gtest_8h.html#a016124361c862c0db315e4c9dc4d911a">INSTANTIATE_TEST_SUITE_P</a></div><div class="ttdeci">#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator,...)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13715">gtest.h:13715</a></div></div>
  422. <div class="ttc" id="namespacetesting_1_1internal_html_a8d8ed3acadedd9c0db28d35a188973ea"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8d8ed3acadedd9c0db28d35a188973ea">testing::internal::GetArgvs</a></div><div class="ttdeci">GTEST_API_ std::vector&lt; std::string &gt; GetArgvs()</div></div>
  423. <div class="ttc" id="namespacetesting_html_a37b7e87f0a5f502c6918f37d1768c1f3"><div class="ttname"><a href="namespacetesting.html#a37b7e87f0a5f502c6918f37d1768c1f3">testing::GTEST_DECLARE_string_</a></div><div class="ttdeci">GTEST_DECLARE_string_(death_test_style)</div></div>
  424. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a9ce7c8408460d7158a2870456d134557"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a9ce7c8408460d7158a2870456d134557">testing::internal::NativeArray::const_iterator</a></div><div class="ttdeci">const Element * const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07584">gtest.h:7584</a></div></div>
  425. <div class="ttc" id="namespacetesting_1_1internal_html_a7ab4072540184e26119ad853f45059f7"><div class="ttname"><a href="namespacetesting_1_1internal.html#a7ab4072540184e26119ad853f45059f7">testing::internal::MakeAndRegisterTestInfo</a></div><div class="ttdeci">GTEST_API_ TestInfo * MakeAndRegisterTestInfo(const char *test_suite_name, const char *name, const char *type_param, const char *value_param, CodeLocation code_location, TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc, TearDownTestSuiteFunc tear_down_tc, TestFactoryBase *factory)</div></div>
  426. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a3c6ab13e581a56f1b02f3eb7536c97fd"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a3c6ab13e581a56f1b02f3eb7536c97fd">testing::internal::posix::Read</a></div><div class="ttdeci">int Read(int fd, void *buf, unsigned int count)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02360">gtest.h:2360</a></div></div>
  427. <div class="ttc" id="gtest_8h_html_aebf8277c9069c1e124f9a5bbe2948061"><div class="ttname"><a href="gtest_8h.html#aebf8277c9069c1e124f9a5bbe2948061">GTEST_DISABLE_MSC_WARNINGS_POP_</a></div><div class="ttdeci">#define GTEST_DISABLE_MSC_WARNINGS_POP_()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00546">gtest.h:546</a></div></div>
  428. <div class="ttc" id="namespacetesting_1_1internal_html_a894ffccd936d78fd555f490020c27f0a"><div class="ttname"><a href="namespacetesting_1_1internal.html#a894ffccd936d78fd555f490020c27f0a">testing::internal::CmpHelperOpFailure</a></div><div class="ttdeci">AssertionResult CmpHelperOpFailure(const char *expr1, const char *expr2, const T1 &amp;val1, const T2 &amp;val2, const char *op)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16206">gtest.h:16206</a></div></div>
  429. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html_a41d7d663014af0c1e614c5a61293cb5a"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#a41d7d663014af0c1e614c5a61293cb5a">testing::internal::ParameterizedTestSuiteInfoBase::RegisterTests</a></div><div class="ttdeci">virtual void RegisterTests()=0</div></div>
  430. <div class="ttc" id="classtesting_1_1_test_html_a7a00be7dd0a6bfdc8d47a1b784623613"><div class="ttname"><a href="classtesting_1_1_test.html#a7a00be7dd0a6bfdc8d47a1b784623613">testing::Test::HasFailure</a></div><div class="ttdeci">static bool HasFailure()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15054">gtest.h:15054</a></div></div>
  431. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html_aaf8f75df1099a07ff771a550b48f9fbe"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html#aaf8f75df1099a07ff771a550b48f9fbe">testing::internal::ParamGenerator::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10732">gtest.h:10732</a></div></div>
  432. <div class="ttc" id="namespacetesting__internal_html_a3f49d3d0c996242f9d383c850097a656"><div class="ttname"><a href="namespacetesting__internal.html#a3f49d3d0c996242f9d383c850097a656">testing_internal::DefaultPrintNonContainerTo</a></div><div class="ttdeci">void DefaultPrintNonContainerTo(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08289">gtest.h:8289</a></div></div>
  433. <div class="ttc" id="structtesting_1_1internal_1_1_remove_const_3_01const_01_t_01_4_html_ac88c6824d228ab05091e5a4f1c1a95fc"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_const_3_01const_01_t_01_4.html#ac88c6824d228ab05091e5a4f1c1a95fc">testing::internal::RemoveConst&lt; const T &gt;::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07321">gtest.h:7321</a></div></div>
  434. <div class="ttc" id="gtest_8h_html_ab54343f0a36dc4cb0ce8a478dd7847b8"><div class="ttname"><a href="gtest_8h.html#ab54343f0a36dc4cb0ce8a478dd7847b8">GTEST_CHECK_</a></div><div class="ttdeci">#define GTEST_CHECK_(condition)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01270">gtest.h:1270</a></div></div>
  435. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html">testing::internal::CartesianProductGenerator9</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12541">gtest.h:12541</a></div></div>
  436. <div class="ttc" id="classtesting_1_1_test_property_html_ad60435d4ad04ac030487d8998fc61c5f"><div class="ttname"><a href="classtesting_1_1_test_property.html#ad60435d4ad04ac030487d8998fc61c5f">testing::TestProperty::key</a></div><div class="ttdeci">const char * key() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15143">gtest.h:15143</a></div></div>
  437. <div class="ttc" id="structtesting_1_1internal_1_1_remove_reference_3_01_t_01_6_01_4_html_a3d0f32a66759f333c2dd66aa31005e6d"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_reference_3_01_t_01_6_01_4.html#a3d0f32a66759f333c2dd66aa31005e6d">testing::internal::RemoveReference&lt; T &amp; &gt;::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07308">gtest.h:7308</a></div></div>
  438. <div class="ttc" id="namespacetesting_1_1internal_html_a4b24c851ab13569b1b15b3d259b60d2e"><div class="ttname"><a href="namespacetesting_1_1internal.html#a4b24c851ab13569b1b15b3d259b60d2e">testing::internal::AlwaysFalse</a></div><div class="ttdeci">bool AlwaysFalse()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07260">gtest.h:7260</a></div></div>
  439. <div class="ttc" id="namespacetesting_1_1internal_html_a17fb8f0125fa92404a249ed38a43faa4a945a19e59155ce1d335e8c3bcbdf61db"><div class="ttname"><a href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a945a19e59155ce1d335e8c3bcbdf61db">testing::internal::kPrintContainer</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08435">gtest.h:8435</a></div></div>
  440. <div class="ttc" id="namespacetesting_1_1internal_html_a08b187c6cc4e28400aadf9a32fccc8de"><div class="ttname"><a href="namespacetesting_1_1internal.html#a08b187c6cc4e28400aadf9a32fccc8de">testing::internal::MutexLock</a></div><div class="ttdeci">GTestMutexLock MutexLock</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02162">gtest.h:2162</a></div></div>
  441. <div class="ttc" id="structtesting_1_1_print_to_string_param_name_html_a05b411cfb75dadb2c3c0355aee1dcf21"><div class="ttname"><a href="structtesting_1_1_print_to_string_param_name.html#a05b411cfb75dadb2c3c0355aee1dcf21">testing::PrintToStringParamName::operator()</a></div><div class="ttdeci">std::string operator()(const TestParamInfo&lt; ParamType &gt; &amp;info) const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10606">gtest.h:10606</a></div></div>
  442. <div class="ttc" id="structtesting_1_1internal_1_1_iterator_traits_3_01const_01_t_01_5_01_4_html_ae7c8867223e106f374b56a7dc4a85547"><div class="ttname"><a href="structtesting_1_1internal_1_1_iterator_traits_3_01const_01_t_01_5_01_4.html#ae7c8867223e106f374b56a7dc4a85547">testing::internal::IteratorTraits&lt; const T * &gt;::value_type</a></div><div class="ttdeci">T value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02212">gtest.h:2212</a></div></div>
  443. <div class="ttc" id="namespacetesting_1_1internal_html_aa6255ef3b023c5b4e1a2198d887fb977a651e9cd2a904e0c8210536271b875f75"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977a651e9cd2a904e0c8210536271b875f75">testing::internal::GTEST_ERROR</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01222">gtest.h:1222</a></div></div>
  444. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html_af1829ba003b0e7c3a463f87dacd4c3b2"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#af1829ba003b0e7c3a463f87dacd4c3b2">testing::internal::CartesianProductGenerator5::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11778">gtest.h:11778</a></div></div>
  445. <div class="ttc" id="namespacetesting_1_1internal_html_aeac30230dcc362221bdd07d61eaa4ec1"><div class="ttname"><a href="namespacetesting_1_1internal.html#aeac30230dcc362221bdd07d61eaa4ec1">testing::internal::GTEST_IMPL_FORMAT_C_STRING_AS_STRING_</a></div><div class="ttdeci">GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string)</div></div>
  446. <div class="ttc" id="classtesting_1_1_test_html_a7704c8223ba28338a66ca2eaeba66383"><div class="ttname"><a href="classtesting_1_1_test.html#a7704c8223ba28338a66ca2eaeba66383">testing::Test::TearDownTestSuite</a></div><div class="ttdeci">static void TearDownTestSuite()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15035">gtest.h:15035</a></div></div>
  447. <div class="ttc" id="classtesting_1_1_environment_html_a1bf8cafaa9d4eba9feb98655ee434eb3"><div class="ttname"><a href="classtesting_1_1_environment.html#a1bf8cafaa9d4eba9feb98655ee434eb3">testing::Environment::SetUp</a></div><div class="ttdeci">virtual void SetUp()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15644">gtest.h:15644</a></div></div>
  448. <div class="ttc" id="gtest_8h_html_ac593b50ce24257d5b6aa84845c344c9e"><div class="ttname"><a href="gtest_8h.html#ac593b50ce24257d5b6aa84845c344c9e">GTEST_DISALLOW_ASSIGN_</a></div><div class="ttdeci">#define GTEST_DISALLOW_ASSIGN_(type)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00922">gtest.h:922</a></div></div>
  449. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html_ab5e728b287d0d520e7281799a67189c7"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#ab5e728b287d0d520e7281799a67189c7">testing::internal::CartesianProductGenerator8::~CartesianProductGenerator8</a></div><div class="ttdeci">~CartesianProductGenerator8() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12332">gtest.h:12332</a></div></div>
  450. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder9_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder9.html">testing::internal::CartesianProductHolder9</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13252">gtest.h:13252</a></div></div>
  451. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html_ac5bcbf8c50a44472d697e0c80b54387d"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html#ac5bcbf8c50a44472d697e0c80b54387d">testing::internal::ParameterizedTestSuiteInfoBase::GetTestSuiteTypeId</a></div><div class="ttdeci">virtual TypeId GetTestSuiteTypeId() const =0</div></div>
  452. <div class="ttc" id="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4_html_a6f292601a68c8f0d49e6d48bd309b900"><div class="ttname"><a href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a6f292601a68c8f0d49e6d48bd309b900">testing::internal::EqHelper&lt; true &gt;::Compare</a></div><div class="ttdeci">static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, Secret *, T *rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16185">gtest.h:16185</a></div></div>
  453. <div class="ttc" id="classtesting_1_1_test_event_listener_html_ac6605dbb5859436d59d117348d63746c"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#ac6605dbb5859436d59d117348d63746c">testing::TestEventListener::OnTestSuiteStart</a></div><div class="ttdeci">virtual void OnTestSuiteStart(const TestSuite &amp;test_suite)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15689">gtest.h:15689</a></div></div>
  454. <div class="ttc" id="classtesting_1_1internal_1_1_random_html_adf2f24199318a46f885c78f50d89a69e"><div class="ttname"><a href="classtesting_1_1internal_1_1_random.html#adf2f24199318a46f885c78f50d89a69e">testing::internal::Random::Reseed</a></div><div class="ttdeci">void Reseed(UInt32 seed)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07282">gtest.h:7282</a></div></div>
  455. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a1ef2385a7f8e4c706054da35967e76bd"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a1ef2385a7f8e4c706054da35967e76bd">testing::internal::posix::StrCaseCmp</a></div><div class="ttdeci">int StrCaseCmp(const char *s1, const char *s2)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02325">gtest.h:2325</a></div></div>
  456. <div class="ttc" id="namespacetesting_html_a302c84bdc88f2138696da2a4756b6466"><div class="ttname"><a href="namespacetesting.html#a302c84bdc88f2138696da2a4756b6466">testing::RegisterTest</a></div><div class="ttdeci">TestInfo * RegisterTest(const char *test_suite_name, const char *test_name, const char *type_param, const char *value_param, const char *file, int line, Factory factory)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l17063">gtest.h:17063</a></div></div>
  457. <div class="ttc" id="structtesting_1_1internal_1_1_elem_from_list_impl_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_elem_from_list_impl.html">testing::internal::ElemFromListImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07676">gtest.h:7676</a></div></div>
  458. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_base_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_base.html">testing::internal::FlatTupleBase</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07709">gtest.h:7709</a></div></div>
  459. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a9b4e781c0b38065a55c2fd163724ba69"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a9b4e781c0b38065a55c2fd163724ba69">testing::EmptyTestEventListener::OnEnvironmentsSetUpEnd</a></div><div class="ttdeci">void OnEnvironmentsSetUpEnd(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15740">gtest.h:15740</a></div></div>
  460. <div class="ttc" id="namespacetesting_1_1internal_html_a9579a78c229ea302caded45d65f77336"><div class="ttname"><a href="namespacetesting_1_1internal.html#a9579a78c229ea302caded45d65f77336">testing::internal::GetNotDefaultOrNull</a></div><div class="ttdeci">SetUpTearDownSuiteFuncType GetNotDefaultOrNull(SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06943">gtest.h:6943</a></div></div>
  461. <div class="ttc" id="classtesting_1_1_message_html_a9de694ca239486809fc99fbbea8ac21d"><div class="ttname"><a href="classtesting_1_1_message.html#a9de694ca239486809fc99fbbea8ac21d">testing::Message::Message</a></div><div class="ttdeci">Message(const char *str)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02660">gtest.h:2660</a></div></div>
  462. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html">testing::internal::CartesianProductGenerator10</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12780">gtest.h:12780</a></div></div>
  463. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html_aff06c7992c06297c6bf5ad5eb56534e9"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#aff06c7992c06297c6bf5ad5eb56534e9">testing::internal::CartesianProductGenerator9::CartesianProductGenerator9</a></div><div class="ttdeci">CartesianProductGenerator9(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5, const ParamGenerator&lt; T6 &gt; &amp;g6, const ParamGenerator&lt; T7 &gt; &amp;g7, const ParamGenerator&lt; T8 &gt; &amp;g8, const ParamGenerator&lt; T9 &gt; &amp;g9)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12547">gtest.h:12547</a></div></div>
  464. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_factory_html_ad9a27b8e1a83de2f1687625bccff460d"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_factory.html#ad9a27b8e1a83de2f1687625bccff460d">testing::internal::ParameterizedTestFactory::ParamType</a></div><div class="ttdeci">TestClass::ParamType ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10945">gtest.h:10945</a></div></div>
  465. <div class="ttc" id="namespacetesting_1_1internal_html_a05c6bd9ede5ccdf25191a590d610dcc6"><div class="ttname"><a href="namespacetesting_1_1internal.html#a05c6bd9ede5ccdf25191a590d610dcc6">testing::internal::BiggestInt</a></div><div class="ttdeci">long long BiggestInt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02223">gtest.h:2223</a></div></div>
  466. <div class="ttc" id="structtesting_1_1internal_1_1_param_name_gen_func_html_adf1ce5df22a930ae715082862d72590f"><div class="ttname"><a href="structtesting_1_1internal_1_1_param_name_gen_func.html#adf1ce5df22a930ae715082862d72590f">testing::internal::ParamNameGenFunc::Type</a></div><div class="ttdeci">std::string Type(const TestParamInfo&lt; ParamType &gt; &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10930">gtest.h:10930</a></div></div>
  467. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html">testing::internal::RE</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01136">gtest.h:1136</a></div></div>
  468. <div class="ttc" id="classtesting_1_1_scoped_trace_html_a2da90b95d682d518cca472934d53c59c"><div class="ttname"><a href="classtesting_1_1_scoped_trace.html#a2da90b95d682d518cca472934d53c59c">testing::ScopedTrace::ScopedTrace</a></div><div class="ttdeci">ScopedTrace(const char *file, int line, const T &amp;message)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16843">gtest.h:16843</a></div></div>
  469. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_a4998c23e27e2943d97546011aa35db80"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#a4998c23e27e2943d97546011aa35db80">testing::internal::ParamIteratorInterface::Clone</a></div><div class="ttdeci">virtual ParamIteratorInterface * Clone() const =0</div></div>
  470. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html_a2bee6d271df046f7660c85e2b2d305a5"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#a2bee6d271df046f7660c85e2b2d305a5">testing::internal::CartesianProductGenerator10::~CartesianProductGenerator10</a></div><div class="ttdeci">~CartesianProductGenerator10() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12794">gtest.h:12794</a></div></div>
  471. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html_a3fe06fb4e1b4194dae1fbcdf3560fbd3"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#a3fe06fb4e1b4194dae1fbcdf3560fbd3">testing::internal::ParameterizedTestSuiteRegistry::GetTestCasePatternHolder</a></div><div class="ttdeci">ParameterizedTestCaseInfo&lt; TestCase &gt; * GetTestCasePatternHolder(const char *test_case_name, CodeLocation code_location)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11253">gtest.h:11253</a></div></div>
  472. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_af0d04ed5baeed28353fa38742748a421"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#af0d04ed5baeed28353fa38742748a421">testing::internal::posix::IsDir</a></div><div class="ttdeci">bool IsDir(const StatStruct &amp;st)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02330">gtest.h:2330</a></div></div>
  473. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_html_a042249cdb42fdb77588c9ad54ea7ed54"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer.html#a042249cdb42fdb77588c9ad54ea7ed54">testing::internal::UniversalTersePrinter::Print</a></div><div class="ttdeci">static void Print(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08850">gtest.h:8850</a></div></div>
  474. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size.html">testing::internal::TypeWithSize</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02442">gtest.h:2442</a></div></div>
  475. <div class="ttc" id="namespacetesting_1_1internal_html_aeb957087fd6bbf9db98ab7cd41b0c129"><div class="ttname"><a href="namespacetesting_1_1internal.html#aeb957087fd6bbf9db98ab7cd41b0c129">testing::internal::IsAlpha</a></div><div class="ttdeci">bool IsAlpha(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02233">gtest.h:2233</a></div></div>
  476. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html_a242bc369feb56ff096b906c833403077"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a242bc369feb56ff096b906c833403077">testing::internal::CartesianProductGenerator7::~CartesianProductGenerator7</a></div><div class="ttdeci">~CartesianProductGenerator7() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12127">gtest.h:12127</a></div></div>
  477. <div class="ttc" id="namespacetesting_1_1internal_html_ad3013b6b4c825edee9fe18ff1d982faa"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad3013b6b4c825edee9fe18ff1d982faa">testing::internal::PrintRawArrayTo</a></div><div class="ttdeci">void PrintRawArrayTo(const T a[], size_t count, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08623">gtest.h:8623</a></div></div>
  478. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html_aa9d67ce7d77623ebb27053bb2f704c62"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#aa9d67ce7d77623ebb27053bb2f704c62">testing::internal::CartesianProductGenerator6::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5, T6 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11934">gtest.h:11934</a></div></div>
  479. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html_a4359f80cc1888d4a18d2e0a6865b920d"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#a4359f80cc1888d4a18d2e0a6865b920d">testing::internal::CartesianProductGenerator2::~CartesianProductGenerator2</a></div><div class="ttdeci">~CartesianProductGenerator2() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11373">gtest.h:11373</a></div></div>
  480. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder2_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder2.html">testing::internal::CartesianProductHolder2</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13041">gtest.h:13041</a></div></div>
  481. <div class="ttc" id="gtest_8h_html_aed8c1888c32b588b0681e88b95031e29"><div class="ttname"><a href="gtest_8h.html#aed8c1888c32b588b0681e88b95031e29">GTEST_DISALLOW_COPY_AND_ASSIGN_</a></div><div class="ttdeci">#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00927">gtest.h:927</a></div></div>
  482. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html">testing::internal::CartesianProductGenerator6</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11931">gtest.h:11931</a></div></div>
  483. <div class="ttc" id="structtesting_1_1internal_1_1_param_name_gen_func_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_param_name_gen_func.html">testing::internal::ParamNameGenFunc</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10929">gtest.h:10929</a></div></div>
  484. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_ad46aa6da12aec1a3f166310478b53a08afdbf30ecf9f32f60c646a34a358615f2"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#ad46aa6da12aec1a3f166310478b53a08afdbf30ecf9f32f60c646a34a358615f2">testing::internal::edit_distance::kReplace</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06605">gtest.h:6605</a></div></div>
  485. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a6e498ae763ac8c1a46bd861e0b7ff3f5"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a6e498ae763ac8c1a46bd861e0b7ff3f5">testing::EmptyTestEventListener::OnEnvironmentsSetUpStart</a></div><div class="ttdeci">void OnEnvironmentsSetUpStart(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15739">gtest.h:15739</a></div></div>
  486. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder10_html_a3255f824dd20e02b8bb718bb7d3d3634"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder10.html#a3255f824dd20e02b8bb718bb7d3d3634">testing::internal::CartesianProductHolder10::CartesianProductHolder10</a></div><div class="ttdeci">CartesianProductHolder10(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5, const Generator6 &amp;g6, const Generator7 &amp;g7, const Generator8 &amp;g8, const Generator9 &amp;g9, const Generator10 &amp;g10)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13297">gtest.h:13297</a></div></div>
  487. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_af6bf8fab8df572ecb137a3516ff390ae"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#af6bf8fab8df572ecb137a3516ff390ae">testing::internal::FloatingPoint::exponent_bits</a></div><div class="ttdeci">Bits exponent_bits() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06762">gtest.h:6762</a></div></div>
  488. <div class="ttc" id="namespacetesting__internal_html"><div class="ttname"><a href="namespacetesting__internal.html">testing_internal</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08284">gtest.h:8284</a></div></div>
  489. <div class="ttc" id="namespacetesting_1_1internal_html_a17fb8f0125fa92404a249ed38a43faa4a6f88d77d9d763d8a009caf950cfbab28"><div class="ttname"><a href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a6f88d77d9d763d8a009caf950cfbab28">testing::internal::kPrintOther</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08438">gtest.h:8438</a></div></div>
  490. <div class="ttc" id="namespacetesting_1_1internal_html_a648c1bc94c2ef9e868ff3f9dff0f9c4ea3b1e81f5b14a17b35a8672d57d166507"><div class="ttname"><a href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea3b1e81f5b14a17b35a8672d57d166507">testing::internal::COLOR_GREEN</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16427">gtest.h:16427</a></div></div>
  491. <div class="ttc" id="namespaceutl_1_1meta_html_a5b7d36b9e568b81f2df897d56dc23b64"><div class="ttname"><a href="namespaceutl_1_1meta.html#a5b7d36b9e568b81f2df897d56dc23b64">utl::meta::index_</a></div><div class="ttdeci">integral_&lt; index_t, v &gt; index_</div><div class="ttdoc">index_ type: integral constant wrapper for index_t a.k.a std::size_t </div><div class="ttdef"><b>Definition:</b> <a href="integral_8h_source.html#l00106">integral.h:106</a></div></div>
  492. <div class="ttc" id="namespacetesting_html_a0b9ea6594ac06ad5d9eba2511ffa0fb7"><div class="ttname"><a href="namespacetesting.html#a0b9ea6594ac06ad5d9eba2511ffa0fb7">testing::ValuesIn</a></div><div class="ttdeci">internal::ParamGenerator&lt; T &gt; ValuesIn(const T(&amp;array)[N])</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13465">gtest.h:13465</a></div></div>
  493. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_base_html_a18f22a7594336a36642289c1decddc9e"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_base.html#a18f22a7594336a36642289c1decddc9e">testing::internal::TestFactoryBase::~TestFactoryBase</a></div><div class="ttdeci">virtual ~TestFactoryBase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06891">gtest.h:6891</a></div></div>
  494. <div class="ttc" id="structtesting_1_1internal_1_1bool__constant_html"><div class="ttname"><a href="structtesting_1_1internal_1_1bool__constant.html">testing::internal::bool_constant</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02184">gtest.h:2184</a></div></div>
  495. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a174f164f38e522a3935da911a9c1e450"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a174f164f38e522a3935da911a9c1e450">testing::internal::ParameterizedTestSuiteInfo::AddTestSuiteInstantiation</a></div><div class="ttdeci">int AddTestSuiteInstantiation(const std::string &amp;instantiation_name, GeneratorCreationFunc *func, ParamNameGeneratorFunc *name_func, const char *file, int line)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11067">gtest.h:11067</a></div></div>
  496. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html_ab5e2480f7abacb80850de470c3225412"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ab5e2480f7abacb80850de470c3225412">testing::internal::CartesianProductGenerator4::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11615">gtest.h:11615</a></div></div>
  497. <div class="ttc" id="namespacetesting_1_1internal_html_aa7e70a85d66f0c109e3e69629ef577f2"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa7e70a85d66f0c109e3e69629ef577f2">testing::internal::PrintTo</a></div><div class="ttdeci">void PrintTo(unsigned char c, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11242">gtest-all.cc:11242</a></div></div>
  498. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html_ae25a27430e476014a2f07c0be4f030f7"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#ae25a27430e476014a2f07c0be4f030f7">testing::internal::CartesianProductGenerator4::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11627">gtest.h:11627</a></div></div>
  499. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_3_014_01_4_html_a7d559570f830bf35d095eeb94d98de58"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a7d559570f830bf35d095eeb94d98de58">testing::internal::TypeWithSize&lt; 4 &gt;::UInt</a></div><div class="ttdeci">unsigned int UInt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02458">gtest.h:2458</a></div></div>
  500. <div class="ttc" id="classtesting_1_1internal_1_1_values_in_iterator_range_generator_html_a9070d5b79803164625d3aa77a1659e9f"><div class="ttname"><a href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a9070d5b79803164625d3aa77a1659e9f">testing::internal::ValuesInIteratorRangeGenerator::~ValuesInIteratorRangeGenerator</a></div><div class="ttdeci">~ValuesInIteratorRangeGenerator() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10833">gtest.h:10833</a></div></div>
  501. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a66065dfc4d5f41100f686159637af23b"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a66065dfc4d5f41100f686159637af23b">testing::internal::FloatingPoint::kExponentBitMask</a></div><div class="ttdeci">static const Bits kExponentBitMask</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06713">gtest.h:6713</a></div></div>
  502. <div class="ttc" id="classtesting_1_1internal_1_1_assert_helper_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_assert_helper.html">testing::internal::AssertHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16388">gtest.h:16388</a></div></div>
  503. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a3117b067e1f942a2031e666953120ccc"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a3117b067e1f942a2031e666953120ccc">testing::internal::posix::FileNo</a></div><div class="ttdeci">int FileNo(FILE *file)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02322">gtest.h:2322</a></div></div>
  504. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a5f6c84f39851e8a603a2d2e10063816b"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a5f6c84f39851e8a603a2d2e10063816b">testing::TestEventListener::OnTestProgramStart</a></div><div class="ttdeci">virtual void OnTestProgramStart(const UnitTest &amp;unit_test)=0</div></div>
  505. <div class="ttc" id="namespacetesting_1_1internal_html_aed8d3ad4341f8f2de53440e39c995632"><div class="ttname"><a href="namespacetesting_1_1internal.html#aed8d3ad4341f8f2de53440e39c995632">testing::internal::GetBoolAssertionFailureMessage</a></div><div class="ttdeci">GTEST_API_ std::string GetBoolAssertionFailureMessage(const AssertionResult &amp;assertion_result, const char *expression_text, const char *actual_predicate_value, const char *expected_predicate_value)</div></div>
  506. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_factory_html_a82d78356cd402224255edec760a048fb"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_factory.html#a82d78356cd402224255edec760a048fb">testing::internal::ParameterizedTestFactory::ParameterizedTestFactory</a></div><div class="ttdeci">ParameterizedTestFactory(ParamType parameter)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10946">gtest.h:10946</a></div></div>
  507. <div class="ttc" id="classtesting_1_1_test_property_html_a25a0ccf1c75a92af46a48d3c2a873e6d"><div class="ttname"><a href="classtesting_1_1_test_property.html#a25a0ccf1c75a92af46a48d3c2a873e6d">testing::TestProperty::TestProperty</a></div><div class="ttdeci">TestProperty(const std::string &amp;a_key, const std::string &amp;a_value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15138">gtest.h:15138</a></div></div>
  508. <div class="ttc" id="classtesting_1_1internal_1_1_type_id_helper_html_a372268b1520d965d0bdf01ebad3d270e"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_id_helper.html#a372268b1520d965d0bdf01ebad3d270e">testing::internal::TypeIdHelper::dummy_</a></div><div class="ttdeci">static bool dummy_</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06862">gtest.h:6862</a></div></div>
  509. <div class="ttc" id="namespacetesting_1_1internal_html_a1ee4cde97868c53e442d3182496a9f3c"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1ee4cde97868c53e442d3182496a9f3c">testing::internal::FormatCompilerIndependentFileLocation</a></div><div class="ttdeci">GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char *file, int line)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10638">gtest-all.cc:10638</a></div></div>
  510. <div class="ttc" id="namespacetesting_1_1internal_html_aa6255ef3b023c5b4e1a2198d887fb977aff315e0913fcda86fe4de882bf5e33e9"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6255ef3b023c5b4e1a2198d887fb977aff315e0913fcda86fe4de882bf5e33e9">testing::internal::GTEST_INFO</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01220">gtest.h:1220</a></div></div>
  511. <div class="ttc" id="namespaceproto2_html"><div class="ttname"><a href="namespaceproto2.html">proto2</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06517">gtest.h:6517</a></div></div>
  512. <div class="ttc" id="classtesting_1_1internal_1_1_ignored_value_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_ignored_value.html">testing::internal::IgnoredValue</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06544">gtest.h:6544</a></div></div>
  513. <div class="ttc" id="classtesting_1_1_test_event_listener_html_abb1c44525ef038500608b5dc2f17099b"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#abb1c44525ef038500608b5dc2f17099b">testing::TestEventListener::OnTestEnd</a></div><div class="ttdeci">virtual void OnTestEnd(const TestInfo &amp;test_info)=0</div></div>
  514. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_base_html_a07ac3ca0b196cdb092da0bb186b7c030"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_base.html#a07ac3ca0b196cdb092da0bb186b7c030">testing::internal::TestFactoryBase::CreateTest</a></div><div class="ttdeci">virtual Test * CreateTest()=0</div></div>
  515. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_registry_html_ae3827c085ed16faaa9197486513292c0"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_registry.html#ae3827c085ed16faaa9197486513292c0">testing::internal::ParameterizedTestSuiteRegistry::ParameterizedTestSuiteRegistry</a></div><div class="ttdeci">ParameterizedTestSuiteRegistry()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11207">gtest.h:11207</a></div></div>
  516. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator.html">testing::internal::ParamGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10624">gtest.h:10624</a></div></div>
  517. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a054f8705c883fa120b91473aff38f2ee"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a054f8705c883fa120b91473aff38f2ee">testing::TestEventListener::OnTestPartResult</a></div><div class="ttdeci">virtual void OnTestPartResult(const TestPartResult &amp;test_part_result)=0</div></div>
  518. <div class="ttc" id="classtesting_1_1_test_info_html_abdf2c6cfcf4819e725816c64e1c1fc24"><div class="ttname"><a href="classtesting_1_1_test_info.html#abdf2c6cfcf4819e725816c64e1c1fc24">testing::TestInfo::value_param</a></div><div class="ttdeci">const char * value_param() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15320">gtest.h:15320</a></div></div>
  519. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a4042201dcc4932641d484e7ddf94de7d"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a4042201dcc4932641d484e7ddf94de7d">testing::internal::posix::FOpen</a></div><div class="ttdeci">FILE * FOpen(const char *path, const char *mode)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02349">gtest.h:2349</a></div></div>
  520. <div class="ttc" id="structtesting_1_1internal_1_1_is_a_protocol_message_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_a_protocol_message.html">testing::internal::IsAProtocolMessage</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07392">gtest.h:7392</a></div></div>
  521. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator5_html_a381a9c3c18106872251acffe59453a95"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator5.html#a381a9c3c18106872251acffe59453a95">testing::internal::CartesianProductGenerator5::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11766">gtest.h:11766</a></div></div>
  522. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_aab053be914bdc9e507c0db89740c318c"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#aab053be914bdc9e507c0db89740c318c">testing::internal::FloatingPoint::bits</a></div><div class="ttdeci">const Bits &amp; bits() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06759">gtest.h:6759</a></div></div>
  523. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder5_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder5.html">testing::internal::CartesianProductHolder5</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13114">gtest.h:13114</a></div></div>
  524. <div class="ttc" id="namespacetesting_1_1internal_html_ac26ce3883bc8919c27074975e958f3b7"><div class="ttname"><a href="namespacetesting_1_1internal.html#ac26ce3883bc8919c27074975e958f3b7">testing::internal::IsLower</a></div><div class="ttdeci">bool IsLower(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02242">gtest.h:2242</a></div></div>
  525. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a15e5b8f2a535ef1b2529b85b861e4846"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a15e5b8f2a535ef1b2529b85b861e4846">testing::internal::posix::Close</a></div><div class="ttdeci">int Close(int fd)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02366">gtest.h:2366</a></div></div>
  526. <div class="ttc" id="namespacetesting_1_1internal2_html_aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224"><div class="ttname"><a href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a9bdcf3f1548f498b2b7f097306ea0224">testing::internal2::kConvertibleToInteger</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08166">gtest.h:8166</a></div></div>
  527. <div class="ttc" id="namespacetesting_html_aa67d0c8470c5f69fcfcacc9e775fa982"><div class="ttname"><a href="namespacetesting.html#aa67d0c8470c5f69fcfcacc9e775fa982">testing::ValuesIn</a></div><div class="ttdeci">internal::ParamGenerator&lt; typename Container::value_type &gt; ValuesIn(const Container &amp;container)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13470">gtest.h:13470</a></div></div>
  528. <div class="ttc" id="classtesting_1_1internal_1_1_value_array_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_value_array.html">testing::internal::ValueArray</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11280">gtest.h:11280</a></div></div>
  529. <div class="ttc" id="namespacetesting_1_1internal_html_a954ec4a8a932dac7743e77e459ffefdc"><div class="ttname"><a href="namespacetesting_1_1internal.html#a954ec4a8a932dac7743e77e459ffefdc">testing::internal::DefaultParamName</a></div><div class="ttdeci">std::string DefaultParamName(const TestParamInfo&lt; ParamType &gt; &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10912">gtest.h:10912</a></div></div>
  530. <div class="ttc" id="namespacetesting_1_1internal_html_a7e60d1478b074801c766eeee9be6c772"><div class="ttname"><a href="namespacetesting_1_1internal.html#a7e60d1478b074801c766eeee9be6c772">testing::internal::UniversalTersePrintTupleFieldsToStrings</a></div><div class="ttdeci">Strings UniversalTersePrintTupleFieldsToStrings(const Tuple &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08948">gtest.h:8948</a></div></div>
  531. <div class="ttc" id="structtesting_1_1internal_1_1_relation_to_source_reference_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_relation_to_source_reference.html">testing::internal::RelationToSourceReference</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07567">gtest.h:7567</a></div></div>
  532. <div class="ttc" id="classtesting_1_1_test_html"><div class="ttname"><a href="classtesting_1_1_test.html">testing::Test</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15014">gtest.h:15014</a></div></div>
  533. <div class="ttc" id="namespacetesting_1_1internal_html_abf080521ce135deb510e0a7830fd3d33"><div class="ttname"><a href="namespacetesting_1_1internal.html#abf080521ce135deb510e0a7830fd3d33">testing::internal::IsNotContainer</a></div><div class="ttdeci">char IsNotContainer</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07433">gtest.h:7433</a></div></div>
  534. <div class="ttc" id="gtest_8h_html_a1adc861b311e3fbd97bcc72e0b0f5962"><div class="ttname"><a href="gtest_8h.html#a1adc861b311e3fbd97bcc72e0b0f5962">TEST_P</a></div><div class="ttdeci">#define TEST_P(test_suite_name, test_name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13674">gtest.h:13674</a></div></div>
  535. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_a7a6aee04e8e44b5c8294929951cfac2b"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#a7a6aee04e8e44b5c8294929951cfac2b">testing::internal::ParamIterator::operator!=</a></div><div class="ttdeci">bool operator!=(const ParamIterator &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10689">gtest.h:10689</a></div></div>
  536. <div class="ttc" id="namespacetesting_1_1internal_html_a070107e7a8205ad6ec4d538d52b15b38"><div class="ttname"><a href="namespacetesting_1_1internal.html#a070107e7a8205ad6ec4d538d52b15b38">testing::internal::UniversalPrintArray</a></div><div class="ttdeci">void UniversalPrintArray(const char *begin, size_t len, ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11316">gtest-all.cc:11316</a></div></div>
  537. <div class="ttc" id="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4_html_a332e92bcca7a71c273e50d800f943fcf"><div class="ttname"><a href="classtesting_1_1internal_1_1_eq_helper_3_01true_01_4.html#a332e92bcca7a71c273e50d800f943fcf">testing::internal::EqHelper&lt; true &gt;::Compare</a></div><div class="ttdeci">static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &amp;lhs, const T2 &amp;rhs, typename EnableIf&lt;!std::is_pointer&lt; T2 &gt;::value &gt;::type *=nullptr)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16170">gtest.h:16170</a></div></div>
  538. <div class="ttc" id="classtesting_1_1_test_html_a5ccbac42fee8c5b00b0bfe89b6c49d79"><div class="ttname"><a href="classtesting_1_1_test.html#a5ccbac42fee8c5b00b0bfe89b6c49d79">testing::Test::SetUpTestCase</a></div><div class="ttdeci">static void SetUpTestCase()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15040">gtest.h:15040</a></div></div>
  539. <div class="ttc" id="structtesting_1_1internal_1_1is__same_html"><div class="ttname"><a href="structtesting_1_1internal_1_1is__same.html">testing::internal::is_same</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02194">gtest.h:2194</a></div></div>
  540. <div class="ttc" id="namespacetesting_1_1internal_html_a1def8ec9393360a1b34a20528703e7f7"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1def8ec9393360a1b34a20528703e7f7">testing::internal::CmpHelperEQFailure</a></div><div class="ttdeci">AssertionResult CmpHelperEQFailure(const char *lhs_expression, const char *rhs_expression, const T1 &amp;lhs, const T2 &amp;rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16092">gtest.h:16092</a></div></div>
  541. <div class="ttc" id="classtesting_1_1_with_param_interface_html_a4e170bd42fa5e8ce48b80cee6bb52e26"><div class="ttname"><a href="classtesting_1_1_with_param_interface.html#a4e170bd42fa5e8ce48b80cee6bb52e26">testing::WithParamInterface::~WithParamInterface</a></div><div class="ttdeci">virtual ~WithParamInterface()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16473">gtest.h:16473</a></div></div>
  542. <div class="ttc" id="classtesting_1_1_test_info_html_a63e7042028b0b846f4b5a1e5bcffc079"><div class="ttname"><a href="classtesting_1_1_test_info.html#a63e7042028b0b846f4b5a1e5bcffc079">testing::TestInfo::is_reportable</a></div><div class="ttdeci">bool is_reportable() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15353">gtest.h:15353</a></div></div>
  543. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_ab819d2e8f93e9e482373999f0f8d71b9"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#ab819d2e8f93e9e482373999f0f8d71b9">testing::internal::FloatingPoint::kBitCount</a></div><div class="ttdeci">static const size_t kBitCount</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06696">gtest.h:6696</a></div></div>
  544. <div class="ttc" id="namespacetesting_1_1internal_html_a513107ff8defa97d949937fc1350a56c"><div class="ttname"><a href="namespacetesting_1_1internal.html#a513107ff8defa97d949937fc1350a56c">testing::internal::DiffStrings</a></div><div class="ttdeci">GTEST_API_ std::string DiffStrings(const std::string &amp;left, const std::string &amp;right, size_t *total_line_count)</div></div>
  545. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_ab215dbc2565fce641e1746ca43e9d68a"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#ab215dbc2565fce641e1746ca43e9d68a">testing::internal::RE::RE</a></div><div class="ttdeci">RE(const RE &amp;other)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01140">gtest.h:1140</a></div></div>
  546. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a0b756a6d2a4f5f5b41ca79651c06c043"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a0b756a6d2a4f5f5b41ca79651c06c043">testing::internal::FloatingPoint::kFractionBitCount</a></div><div class="ttdeci">static const size_t kFractionBitCount</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06699">gtest.h:6699</a></div></div>
  547. <div class="ttc" id="classtesting_1_1_test_info_html_a8621f2cf7623fd1609db8e324f0c2fec"><div class="ttname"><a href="classtesting_1_1_test_info.html#a8621f2cf7623fd1609db8e324f0c2fec">testing::TestInfo::is_in_another_shard</a></div><div class="ttdeci">bool is_in_another_shard() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15332">gtest.h:15332</a></div></div>
  548. <div class="ttc" id="namespacetesting_1_1internal_html_a648c1bc94c2ef9e868ff3f9dff0f9c4ea9ebb3ddab9391781f6ee5021e1e443c3"><div class="ttname"><a href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4ea9ebb3ddab9391781f6ee5021e1e443c3">testing::internal::COLOR_RED</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16427">gtest.h:16427</a></div></div>
  549. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_af96a4a5ca0cdd5d163c47a081f08bd89"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#af96a4a5ca0cdd5d163c47a081f08bd89">testing::internal::NativeArray::size</a></div><div class="ttdeci">size_t size() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07607">gtest.h:7607</a></div></div>
  550. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_interface_html_ac2767cb9ad2e292e291c4903323c6eff"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator_interface.html#ac2767cb9ad2e292e291c4903323c6eff">testing::internal::ParamGeneratorInterface::~ParamGeneratorInterface</a></div><div class="ttdeci">virtual ~ParamGeneratorInterface()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10706">gtest.h:10706</a></div></div>
  551. <div class="ttc" id="structtesting_1_1internal_1_1_enable_if_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_enable_if.html">testing::internal::EnableIf</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07491">gtest.h:7491</a></div></div>
  552. <div class="ttc" id="namespacetesting_1_1internal_html_a5d3e97443d23bf1824f87feb172efd39"><div class="ttname"><a href="namespacetesting_1_1internal.html#a5d3e97443d23bf1824f87feb172efd39">testing::internal::ReportInvalidTestSuiteType</a></div><div class="ttdeci">GTEST_API_ void ReportInvalidTestSuiteType(const char *test_suite_name, CodeLocation code_location)</div></div>
  553. <div class="ttc" id="classtesting_1_1_test_suite_html"><div class="ttname"><a href="classtesting_1_1_test_suite.html">testing::TestSuite</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15429">gtest.h:15429</a></div></div>
  554. <div class="ttc" id="structtesting_1_1internal_1_1_remove_reference_html_a9ca4f6499579225f7986b789ee4b2895"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_reference.html#a9ca4f6499579225f7986b789ee4b2895">testing::internal::RemoveReference::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07306">gtest.h:7306</a></div></div>
  555. <div class="ttc" id="namespacetesting_1_1internal_html_af69e146a989e8d48def39a0cc59461c9"><div class="ttname"><a href="namespacetesting_1_1internal.html#af69e146a989e8d48def39a0cc59461c9">testing::internal::AppendUserMessage</a></div><div class="ttdeci">GTEST_API_ std::string AppendUserMessage(const std::string &amp;gtest_msg, const Message &amp;user_msg)</div></div>
  556. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder8_html_adacdd7a2e15963d1b2f559d65f6b2aac"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder8.html#adacdd7a2e15963d1b2f559d65f6b2aac">testing::internal::CartesianProductHolder8::CartesianProductHolder8</a></div><div class="ttdeci">CartesianProductHolder8(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5, const Generator6 &amp;g6, const Generator7 &amp;g7, const Generator8 &amp;g8)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13214">gtest.h:13214</a></div></div>
  557. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4_html_a153da382b00977dfb5974f85dd31ea58"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#a153da382b00977dfb5974f85dd31ea58">testing::internal::FlatTupleElemBase&lt; FlatTuple&lt; T... &gt;, I &gt;::FlatTupleElemBase</a></div><div class="ttdeci">FlatTupleElemBase(value_type t)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07704">gtest.h:7704</a></div></div>
  558. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_ac96f133ffa06fc0f9faff5a1c7954382"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#ac96f133ffa06fc0f9faff5a1c7954382">testing::internal::ParamIterator::reference</a></div><div class="ttdeci">const T &amp; reference</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10662">gtest.h:10662</a></div></div>
  559. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_a709d7077c086c877d214231bc520ef90"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#a709d7077c086c877d214231bc520ef90">testing::EmptyTestEventListener::OnTestEnd</a></div><div class="ttdeci">void OnTestEnd(const TestInfo &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15749">gtest.h:15749</a></div></div>
  560. <div class="ttc" id="gtest_8h_html_a8e5aab8276b2645f64f41c9e3021b935"><div class="ttname"><a href="gtest_8h.html#a8e5aab8276b2645f64f41c9e3021b935">GTEST_MUST_USE_RESULT_</a></div><div class="ttdeci">#define GTEST_MUST_USE_RESULT_</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l00939">gtest.h:939</a></div></div>
  561. <div class="ttc" id="structtesting_1_1internal_1_1_suite_api_resolver_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_suite_api_resolver.html">testing::internal::SuiteApiResolver</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06952">gtest.h:6952</a></div></div>
  562. <div class="ttc" id="namespacetesting_1_1internal_html_ac1b876a8133895bd553d4780ecaa1e3a"><div class="ttname"><a href="namespacetesting_1_1internal.html#ac1b876a8133895bd553d4780ecaa1e3a">testing::internal::ToUpper</a></div><div class="ttdeci">char ToUpper(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02262">gtest.h:2262</a></div></div>
  563. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html_a6d59c2e75fd2a0a042ee102e08956f7f"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a6d59c2e75fd2a0a042ee102e08956f7f">testing::internal::CartesianProductGenerator6::~CartesianProductGenerator6</a></div><div class="ttdeci">~CartesianProductGenerator6() override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11941">gtest.h:11941</a></div></div>
  564. <div class="ttc" id="structtesting_1_1internal_1_1_code_location_html_a38118056ad3c11359920274e393bc6b3"><div class="ttname"><a href="structtesting_1_1internal_1_1_code_location.html#a38118056ad3c11359920274e393bc6b3">testing::internal::CodeLocation::file</a></div><div class="ttdeci">std::string file</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06933">gtest.h:6933</a></div></div>
  565. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html_ac8b315cd7dbe5566d5ff98b04921b815"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#ac8b315cd7dbe5566d5ff98b04921b815">testing::internal::CartesianProductGenerator7::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12129">gtest.h:12129</a></div></div>
  566. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_aac498b3714d93f8e88cdc30e4c5935f6"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#aac498b3714d93f8e88cdc30e4c5935f6">testing::internal::FloatingPoint::kMaxUlps</a></div><div class="ttdeci">static const size_t kMaxUlps</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06727">gtest.h:6727</a></div></div>
  567. <div class="ttc" id="namespacetesting_html_a69106491c2e7f50e50da0ce5e8ae4374"><div class="ttname"><a href="namespacetesting.html#a69106491c2e7f50e50da0ce5e8ae4374">testing::FloatLE</a></div><div class="ttdeci">GTEST_API_ AssertionResult FloatLE(const char *expr1, const char *expr2, float val1, float val2)</div></div>
  568. <div class="ttc" id="namespacetesting_1_1internal_html_a8ec00d458d0d442bd64af7b5f9c22dda"><div class="ttname"><a href="namespacetesting_1_1internal.html#a8ec00d458d0d442bd64af7b5f9c22dda">testing::internal::CaptureStderr</a></div><div class="ttdeci">void CaptureStderr()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10784">gtest-all.cc:10784</a></div></div>
  569. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a460027cc19cf01ae8e09cc3796b2b575"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a460027cc19cf01ae8e09cc3796b2b575">testing::internal::FloatingPoint::Infinity</a></div><div class="ttdeci">static RawType Infinity()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06749">gtest.h:6749</a></div></div>
  570. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder8_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder8.html">testing::internal::CartesianProductHolder8</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13212">gtest.h:13212</a></div></div>
  571. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_factory_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_factory.html">testing::internal::ParameterizedTestFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10943">gtest.h:10943</a></div></div>
  572. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a69b8278c59359dd6a6f941b4643db9fb"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a69b8278c59359dd6a6f941b4643db9fb">testing::internal::posix::Abort</a></div><div class="ttdeci">void Abort()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02392">gtest.h:2392</a></div></div>
  573. <div class="ttc" id="classtesting_1_1internal_1_1_thread_local_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_thread_local.html">testing::internal::ThreadLocal</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02165">gtest.h:2165</a></div></div>
  574. <div class="ttc" id="classtesting_1_1_test_info_html_af5931cfc594b5d660c56b3c61c41ea13"><div class="ttname"><a href="classtesting_1_1_test_info.html#af5931cfc594b5d660c56b3c61c41ea13">testing::TestInfo::line</a></div><div class="ttdeci">int line() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15329">gtest.h:15329</a></div></div>
  575. <div class="ttc" id="classtesting_1_1internal_1_1_eq_helper_html_ae3572c7374534a916b9117efaa89f33f"><div class="ttname"><a href="classtesting_1_1internal_1_1_eq_helper.html#ae3572c7374534a916b9117efaa89f33f">testing::internal::EqHelper::Compare</a></div><div class="ttdeci">static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, const T1 &amp;lhs, const T2 &amp;rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16139">gtest.h:16139</a></div></div>
  576. <div class="ttc" id="structtesting_1_1internal_1_1_iterator_traits_3_01_t_01_5_01_4_html_a7e46869ed36cc5aea898e243d270a8be"><div class="ttname"><a href="structtesting_1_1internal_1_1_iterator_traits_3_01_t_01_5_01_4.html#a7e46869ed36cc5aea898e243d270a8be">testing::internal::IteratorTraits&lt; T * &gt;::value_type</a></div><div class="ttdeci">T value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02207">gtest.h:2207</a></div></div>
  577. <div class="ttc" id="classtesting_1_1internal_1_1_format_for_comparison_html_a2aeb688fc55b57abd3021d82eccad896"><div class="ttname"><a href="classtesting_1_1internal_1_1_format_for_comparison.html#a2aeb688fc55b57abd3021d82eccad896">testing::internal::FormatForComparison::Format</a></div><div class="ttdeci">::std::string Format(const ToPrint &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08342">gtest.h:8342</a></div></div>
  578. <div class="ttc" id="classtesting_1_1_test_event_listener_html"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html">testing::TestEventListener</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15669">gtest.h:15669</a></div></div>
  579. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder9_html_a692a537863ab6adfc4001564887a3bc7"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder9.html#a692a537863ab6adfc4001564887a3bc7">testing::internal::CartesianProductHolder9::CartesianProductHolder9</a></div><div class="ttdeci">CartesianProductHolder9(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5, const Generator6 &amp;g6, const Generator7 &amp;g7, const Generator8 &amp;g8, const Generator9 &amp;g9)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13254">gtest.h:13254</a></div></div>
  580. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a965214c1af2f9ac5adb1393794aa81e5"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a965214c1af2f9ac5adb1393794aa81e5">testing::internal::FloatingPoint::AlmostEquals</a></div><div class="ttdeci">bool AlmostEquals(const FloatingPoint &amp;rhs) const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06783">gtest.h:6783</a></div></div>
  581. <div class="ttc" id="namespacetesting_1_1internal_html_a648c1bc94c2ef9e868ff3f9dff0f9c4eafcd8803dc9e37e374d5a4486afc230b7"><div class="ttname"><a href="namespacetesting_1_1internal.html#a648c1bc94c2ef9e868ff3f9dff0f9c4eafcd8803dc9e37e374d5a4486afc230b7">testing::internal::COLOR_DEFAULT</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16427">gtest.h:16427</a></div></div>
  582. <div class="ttc" id="namespacetesting_1_1internal_html_a2135f223bf6b527729aeaa651115183b"><div class="ttname"><a href="namespacetesting_1_1internal.html#a2135f223bf6b527729aeaa651115183b">testing::internal::FlushInfoLog</a></div><div class="ttdeci">void FlushInfoLog()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01251">gtest.h:1251</a></div></div>
  583. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a36fca815713332e5c6dc92c98b6b2574"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a36fca815713332e5c6dc92c98b6b2574">testing::internal::posix::StrNCpy</a></div><div class="ttdeci">const char * StrNCpy(char *dest, const char *src, size_t n)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02338">gtest.h:2338</a></div></div>
  584. <div class="ttc" id="gtest_8h_html_a69abff5a4efdd07bd5faebe3dd318d06"><div class="ttname"><a href="gtest_8h.html#a69abff5a4efdd07bd5faebe3dd318d06">GTEST_LOCK_EXCLUDED_</a></div><div class="ttdeci">#define GTEST_LOCK_EXCLUDED_(locks)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02515">gtest.h:2515</a></div></div>
  585. <div class="ttc" id="gtest_8h_html_a853a3792807489591d3d4a2f2ff9359f"><div class="ttname"><a href="gtest_8h.html#a853a3792807489591d3d4a2f2ff9359f">RUN_ALL_TESTS</a></div><div class="ttdeci">int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l17097">gtest.h:17097</a></div></div>
  586. <div class="ttc" id="namespacetesting_1_1internal_html_aa6a1ac454e6d7e550fa4925c62c35caa"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6a1ac454e6d7e550fa4925c62c35caa">testing::internal::UInt64</a></div><div class="ttdeci">TypeWithSize&lt; 8 &gt;::UInt UInt64</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02478">gtest.h:2478</a></div></div>
  587. <div class="ttc" id="namespacetesting_1_1internal_html_a1edf90480571c0659a39d13e3777d9ce"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1edf90480571c0659a39d13e3777d9ce">testing::internal::CmpHelperEQ</a></div><div class="ttdeci">GTEST_API_ AssertionResult CmpHelperEQ(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)</div></div>
  588. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_aaa9d683e8e0c850af67a0b92d785ddb9"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#aaa9d683e8e0c850af67a0b92d785ddb9">testing::EmptyTestEventListener::OnTestProgramEnd</a></div><div class="ttdeci">void OnTestProgramEnd(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15759">gtest.h:15759</a></div></div>
  589. <div class="ttc" id="namespacetesting_html_a661e70fc6afeb5c085eed3716aa45059"><div class="ttname"><a href="namespacetesting.html#a661e70fc6afeb5c085eed3716aa45059">testing::StaticAssertTypeEq</a></div><div class="ttdeci">bool StaticAssertTypeEq()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16927">gtest.h:16927</a></div></div>
  590. <div class="ttc" id="namespacetesting_1_1internal_html_ac46308aa3c0294ae446a40115aeb32c6"><div class="ttname"><a href="namespacetesting_1_1internal.html#ac46308aa3c0294ae446a40115aeb32c6">testing::internal::PrintWideStringTo</a></div><div class="ttdeci">void PrintWideStringTo(const ::std::wstring &amp;s, ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11448">gtest-all.cc:11448</a></div></div>
  591. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_base_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info_base.html">testing::internal::ParameterizedTestSuiteInfoBase</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11005">gtest.h:11005</a></div></div>
  592. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder6_html_a7bb6f9224a1a6766e3634eb392e1b5f6"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder6.html#a7bb6f9224a1a6766e3634eb392e1b5f6">testing::internal::CartesianProductHolder6::CartesianProductHolder6</a></div><div class="ttdeci">CartesianProductHolder6(const Generator1 &amp;g1, const Generator2 &amp;g2, const Generator3 &amp;g3, const Generator4 &amp;g4, const Generator5 &amp;g5, const Generator6 &amp;g6)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13145">gtest.h:13145</a></div></div>
  593. <div class="ttc" id="classtesting_1_1internal_1_1_ignored_value_html_a6c72839c07a9da8d027efb253144bd91"><div class="ttname"><a href="classtesting_1_1internal_1_1_ignored_value.html#a6c72839c07a9da8d027efb253144bd91">testing::internal::IgnoredValue::IgnoredValue</a></div><div class="ttdeci">IgnoredValue(const T &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06552">gtest.h:6552</a></div></div>
  594. <div class="ttc" id="namespacetesting_1_1internal_html_a84f3baa379fec6bf5947cb5165aa8cc9"><div class="ttname"><a href="namespacetesting_1_1internal.html#a84f3baa379fec6bf5947cb5165aa8cc9">testing::internal::IsUpper</a></div><div class="ttdeci">bool IsUpper(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02248">gtest.h:2248</a></div></div>
  595. <div class="ttc" id="classtesting_1_1internal_1_1_universal_printer_3_01_t[_n]_4_html_a1cf0e7c8db59c090f769116c6421b212"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_printer_3_01_t[_n]_4.html#a1cf0e7c8db59c090f769116c6421b212">testing::internal::UniversalPrinter&lt; T[N]&gt;::Print</a></div><div class="ttdeci">static void Print(const T(&amp;a)[N], ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08818">gtest.h:8818</a></div></div>
  596. <div class="ttc" id="structtesting_1_1internal_1_1_remove_const_html_a1be32027ea4edcc0d15abd59aba4a97f"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_const.html#a1be32027ea4edcc0d15abd59aba4a97f">testing::internal::RemoveConst::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07319">gtest.h:7319</a></div></div>
  597. <div class="ttc" id="classtesting_1_1internal_1_1_g_test_mutex_lock_html_a77e3cba326d5356b4a1dea3790559c26"><div class="ttname"><a href="classtesting_1_1internal_1_1_g_test_mutex_lock.html#a77e3cba326d5356b4a1dea3790559c26">testing::internal::GTestMutexLock::GTestMutexLock</a></div><div class="ttdeci">GTestMutexLock(Mutex *)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02159">gtest.h:2159</a></div></div>
  598. <div class="ttc" id="namespacetesting_1_1internal_html_a6300aa1440d0019cf08d9a1f6efd4382"><div class="ttname"><a href="namespacetesting_1_1internal.html#a6300aa1440d0019cf08d9a1f6efd4382">testing::internal::TersePrintPrefixToStrings</a></div><div class="ttdeci">void TersePrintPrefixToStrings(const Tuple &amp;, std::integral_constant&lt; size_t, 0 &gt;, Strings *)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08931">gtest.h:8931</a></div></div>
  599. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_base_html_a853daab362740bcac55e180128d564ef"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory_base.html#a853daab362740bcac55e180128d564ef">testing::internal::TestMetaFactoryBase::CreateTestFactory</a></div><div class="ttdeci">virtual TestFactoryBase * CreateTestFactory(ParamType parameter)=0</div></div>
  600. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a468b5e6701bcb86cb2c956caadbba5e4"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a468b5e6701bcb86cb2c956caadbba5e4">testing::TestEventListener::OnEnvironmentsTearDownStart</a></div><div class="ttdeci">virtual void OnEnvironmentsTearDownStart(const UnitTest &amp;unit_test)=0</div></div>
  601. <div class="ttc" id="classtesting_1_1internal_1_1_random_html_a6e112be5e7cce00551f6383025f69460"><div class="ttname"><a href="classtesting_1_1internal_1_1_random.html#a6e112be5e7cce00551f6383025f69460">testing::internal::Random::Random</a></div><div class="ttdeci">Random(UInt32 seed)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07280">gtest.h:7280</a></div></div>
  602. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator3_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator3.html">testing::internal::CartesianProductGenerator3</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11480">gtest.h:11480</a></div></div>
  603. <div class="ttc" id="gtest_8h_html_ac33e7cdfb5d44a7a0f0ab552eb5c3c6a"><div class="ttname"><a href="gtest_8h.html#ac33e7cdfb5d44a7a0f0ab552eb5c3c6a">EXPECT_TRUE</a></div><div class="ttdeci">#define EXPECT_TRUE(condition)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16584">gtest.h:16584</a></div></div>
  604. <div class="ttc" id="namespacetesting_1_1internal_html_afb1b9728aaaf6d9fe6246a19cfe3f7f5"><div class="ttname"><a href="namespacetesting_1_1internal.html#afb1b9728aaaf6d9fe6246a19cfe3f7f5">testing::internal::CopyArray</a></div><div class="ttdeci">void CopyArray(const T *from, size_t size, U *to)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07557">gtest.h:7557</a></div></div>
  605. <div class="ttc" id="namespacetesting_html_a7f73180474723be6e92185d6fa9e7c9f"><div class="ttname"><a href="namespacetesting.html#a7f73180474723be6e92185d6fa9e7c9f">testing::AssertPred1Helper</a></div><div class="ttdeci">AssertionResult AssertPred1Helper(const char *pred_text, const char *e1, Pred pred, const T1 &amp;v1)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l14715">gtest.h:14715</a></div></div>
  606. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_a8019f54ea1c66ca39ffdec47acfabfe6"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#a8019f54ea1c66ca39ffdec47acfabfe6">testing::internal::ParamIterator::operator=</a></div><div class="ttdeci">ParamIterator &amp; operator=(const ParamIterator &amp;other)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10667">gtest.h:10667</a></div></div>
  607. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator8_html_a707b5a6f598da1f6b997e3b1ad771aca"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator8.html#a707b5a6f598da1f6b997e3b1ad771aca">testing::internal::CartesianProductGenerator8::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12334">gtest.h:12334</a></div></div>
  608. <div class="ttc" id="namespacetesting_html_aa09221196f0a830d5bf1c63ffce69dc3"><div class="ttname"><a href="namespacetesting.html#aa09221196f0a830d5bf1c63ffce69dc3">testing::GTEST_ATTRIBUTE_UNUSED_</a></div><div class="ttdeci">class GTEST_API_ testing::ScopedTrace GTEST_ATTRIBUTE_UNUSED_</div></div>
  609. <div class="ttc" id="namespacetesting_1_1internal_html_a3682f962ae0ec1c0eca6444ca0a09e91"><div class="ttname"><a href="namespacetesting_1_1internal.html#a3682f962ae0ec1c0eca6444ca0a09e91">testing::internal::GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_</a></div><div class="ttdeci">GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char)</div></div>
  610. <div class="ttc" id="classtesting_1_1internal_1_1_r_e_html_a8840bd639642f3d4769a94a68ce463c2"><div class="ttname"><a href="classtesting_1_1internal_1_1_r_e.html#a8840bd639642f3d4769a94a68ce463c2">testing::internal::RE::RE</a></div><div class="ttdeci">RE(const ::std::string &amp;regex)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01143">gtest.h:1143</a></div></div>
  611. <div class="ttc" id="classtesting_1_1_with_param_interface_html"><div class="ttname"><a href="classtesting_1_1_with_param_interface.html">testing::WithParamInterface</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16470">gtest.h:16470</a></div></div>
  612. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a1973d843c00781053d3073daa8a40119"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a1973d843c00781053d3073daa8a40119">testing::internal::FloatingPoint::kExponentBitCount</a></div><div class="ttdeci">static const size_t kExponentBitCount</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06703">gtest.h:6703</a></div></div>
  613. <div class="ttc" id="classtesting_1_1internal_1_1_eq_helper_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_eq_helper.html">testing::internal::EqHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16135">gtest.h:16135</a></div></div>
  614. <div class="ttc" id="gtest_8h_html_aab2ee98cb616054b1d3a7dc71efe81fc"><div class="ttname"><a href="gtest_8h.html#aab2ee98cb616054b1d3a7dc71efe81fc">GTEST_DECLARE_int32_</a></div><div class="ttdeci">#define GTEST_DECLARE_int32_(name)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02497">gtest.h:2497</a></div></div>
  615. <div class="ttc" id="classtesting_1_1internal_1_1_mutex_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_mutex.html">testing::internal::Mutex</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02139">gtest.h:2139</a></div></div>
  616. <div class="ttc" id="classtesting_1_1_with_param_interface_html_a1078d4493d7aa4d3e50d1d6c661bee4d"><div class="ttname"><a href="classtesting_1_1_with_param_interface.html#a1078d4493d7aa4d3e50d1d6c661bee4d">testing::WithParamInterface::GetParam</a></div><div class="ttdeci">static const ParamType &amp; GetParam()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16477">gtest.h:16477</a></div></div>
  617. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_html_a1a48d63fbff650741c8f718af5c373d2"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory.html#a1a48d63fbff650741c8f718af5c373d2">testing::internal::TestMetaFactory::TestMetaFactory</a></div><div class="ttdeci">TestMetaFactory()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10985">gtest.h:10985</a></div></div>
  618. <div class="ttc" id="classtesting_1_1internal_1_1_universal_printer_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_printer.html">testing::internal::UniversalPrinter</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08429">gtest.h:8429</a></div></div>
  619. <div class="ttc" id="namespacetesting_1_1internal_html_a94a857fe6ff32cf4fdc4769a4071f239"><div class="ttname"><a href="namespacetesting_1_1internal.html#a94a857fe6ff32cf4fdc4769a4071f239">testing::internal::ArrayAwareFind</a></div><div class="ttdeci">Iter ArrayAwareFind(Iter begin, Iter end, const Element &amp;elem)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07528">gtest.h:7528</a></div></div>
  620. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html_a952895ad20d5a89b913f80ad2f54391b"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#a952895ad20d5a89b913f80ad2f54391b">testing::internal::CartesianProductGenerator6::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11947">gtest.h:11947</a></div></div>
  621. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator4_html_a4e4512b35f0d71f7a718ded6fe829296"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator4.html#a4e4512b35f0d71f7a718ded6fe829296">testing::internal::CartesianProductGenerator4::CartesianProductGenerator4</a></div><div class="ttdeci">CartesianProductGenerator4(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11617">gtest.h:11617</a></div></div>
  622. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator10_html_ac9f50e9b6fff8dad968c5b98989752f9"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator10.html#ac9f50e9b6fff8dad968c5b98989752f9">testing::internal::CartesianProductGenerator10::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12784">gtest.h:12784</a></div></div>
  623. <div class="ttc" id="structtesting_1_1internal_1_1_const_char_ptr_html_adba40d23d5986904b605946f643cf26e"><div class="ttname"><a href="structtesting_1_1internal_1_1_const_char_ptr.html#adba40d23d5986904b605946f643cf26e">testing::internal::ConstCharPtr::value</a></div><div class="ttdeci">const char * value</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07268">gtest.h:7268</a></div></div>
  624. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a0ac75d4ffd24f14bca452abe8a718da1"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a0ac75d4ffd24f14bca452abe8a718da1">testing::internal::FloatingPoint::kFractionBitMask</a></div><div class="ttdeci">static const Bits kFractionBitMask</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06709">gtest.h:6709</a></div></div>
  625. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_a600dbd35fcb551463e379516a1abea48"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#a600dbd35fcb551463e379516a1abea48">testing::internal::ParamIteratorInterface::Advance</a></div><div class="ttdeci">virtual void Advance()=0</div></div>
  626. <div class="ttc" id="namespacetesting_html_addcf52b273ce17269cbf4956cfe600a6"><div class="ttname"><a href="namespacetesting.html#addcf52b273ce17269cbf4956cfe600a6">testing::AssertPred5Helper</a></div><div class="ttdeci">AssertionResult AssertPred5Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, const char *e4, const char *e5, Pred pred, const T1 &amp;v1, const T2 &amp;v2, const T3 &amp;v3, const T4 &amp;v4, const T5 &amp;v5)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l14926">gtest.h:14926</a></div></div>
  627. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a55ab5948d473a487303dcf6e02ad1f60"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a55ab5948d473a487303dcf6e02ad1f60">testing::internal::NativeArray::~NativeArray</a></div><div class="ttdeci">~NativeArray()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07601">gtest.h:7601</a></div></div>
  628. <div class="ttc" id="classtesting_1_1_test_suite_html_adec55446c23dc2d0bfea91c6125a1047"><div class="ttname"><a href="classtesting_1_1_test_suite.html#adec55446c23dc2d0bfea91c6125a1047">testing::TestSuite::Failed</a></div><div class="ttdeci">bool Failed() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15491">gtest.h:15491</a></div></div>
  629. <div class="ttc" id="namespacetesting_1_1internal_1_1edit__distance_html_a48cffebc6d3169ad1df7849b5f7fb5ff"><div class="ttname"><a href="namespacetesting_1_1internal_1_1edit__distance.html#a48cffebc6d3169ad1df7849b5f7fb5ff">testing::internal::edit_distance::CreateUnifiedDiff</a></div><div class="ttdeci">GTEST_API_ std::string CreateUnifiedDiff(const std::vector&lt; std::string &gt; &amp;left, const std::vector&lt; std::string &gt; &amp;right, size_t context=2)</div></div>
  630. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator9_html_a86742cdf8f015ff11f7a40f0b66179c7"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator9.html#a86742cdf8f015ff11f7a40f0b66179c7">testing::internal::CartesianProductGenerator9::ParamType</a></div><div class="ttdeci">::std::tuple&lt; T1, T2, T3, T4, T5, T6, T7, T8, T9 &gt; ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12545">gtest.h:12545</a></div></div>
  631. <div class="ttc" id="namespacetesting_1_1internal_html_a271c563fec38b804ddab0677f51f70a8"><div class="ttname"><a href="namespacetesting_1_1internal.html#a271c563fec38b804ddab0677f51f70a8">testing::internal::Int64</a></div><div class="ttdeci">TypeWithSize&lt; 8 &gt;::Int Int64</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02477">gtest.h:2477</a></div></div>
  632. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_3_014_01_4_html_a80351860c00ed665e73f952143f4484a"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size_3_014_01_4.html#a80351860c00ed665e73f952143f4484a">testing::internal::TypeWithSize&lt; 4 &gt;::Int</a></div><div class="ttdeci">int Int</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02457">gtest.h:2457</a></div></div>
  633. <div class="ttc" id="classtesting_1_1internal_1_1_mutex_html_af45bf1660ac4110338a02a8680b2f486"><div class="ttname"><a href="classtesting_1_1internal_1_1_mutex.html#af45bf1660ac4110338a02a8680b2f486">testing::internal::Mutex::AssertHeld</a></div><div class="ttdeci">void AssertHeld() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02144">gtest.h:2144</a></div></div>
  634. <div class="ttc" id="classtesting_1_1internal_1_1_test_factory_base_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_factory_base.html">testing::internal::TestFactoryBase</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06889">gtest.h:6889</a></div></div>
  635. <div class="ttc" id="structtesting_1_1internal_1_1_iterator_traits_html_a29de4320a9c53ce438d3561b94e515bb"><div class="ttname"><a href="structtesting_1_1internal_1_1_iterator_traits.html#a29de4320a9c53ce438d3561b94e515bb">testing::internal::IteratorTraits::value_type</a></div><div class="ttdeci">Iterator::value_type value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02201">gtest.h:2201</a></div></div>
  636. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator2_html_aa68e7d9334ba6318bc17ccb0669767fe"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator2.html#aa68e7d9334ba6318bc17ccb0669767fe">testing::internal::CartesianProductGenerator2::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11375">gtest.h:11375</a></div></div>
  637. <div class="ttc" id="namespacetesting_1_1internal_html_a04786aa10f8b0bf38a5ead94d00475f4"><div class="ttname"><a href="namespacetesting_1_1internal.html#a04786aa10f8b0bf38a5ead94d00475f4">testing::internal::SetUpTearDownSuiteFuncType</a></div><div class="ttdeci">void(*)() SetUpTearDownSuiteFuncType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06941">gtest.h:6941</a></div></div>
  638. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t[_n]_4_html_a9e0ceb62fda7dc46ebcf5f911e459a49"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01_t[_n]_4.html#a9e0ceb62fda7dc46ebcf5f911e459a49">testing::internal::UniversalTersePrinter&lt; T[N]&gt;::Print</a></div><div class="ttdeci">static void Print(const T(&amp;value)[N], ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08864">gtest.h:8864</a></div></div>
  639. <div class="ttc" id="classtesting_1_1_message_html_ac126e24804817a053bebba0920d94a11"><div class="ttname"><a href="classtesting_1_1_message.html#ac126e24804817a053bebba0920d94a11">testing::Message::Message</a></div><div class="ttdeci">Message(const Message &amp;msg)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02655">gtest.h:2655</a></div></div>
  640. <div class="ttc" id="structtesting_1_1internal_1_1_suite_api_resolver_html_a460c8a0039577824e9170e6c332b530f"><div class="ttname"><a href="structtesting_1_1internal_1_1_suite_api_resolver.html#a460c8a0039577824e9170e6c332b530f">testing::internal::SuiteApiResolver::GetSetUpCaseOrSuite</a></div><div class="ttdeci">static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06958">gtest.h:6958</a></div></div>
  641. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder2_html_a504471500c3171f7efee84b830004ff9"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder2.html#a504471500c3171f7efee84b830004ff9">testing::internal::CartesianProductHolder2::CartesianProductHolder2</a></div><div class="ttdeci">CartesianProductHolder2(const Generator1 &amp;g1, const Generator2 &amp;g2)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13043">gtest.h:13043</a></div></div>
  642. <div class="ttc" id="structtesting_1_1_test_param_info_html_ad4d7bc02cbcc571eb3c1d2ec3ba5bb53"><div class="ttname"><a href="structtesting_1_1_test_param_info.html#ad4d7bc02cbcc571eb3c1d2ec3ba5bb53">testing::TestParamInfo::index</a></div><div class="ttdeci">size_t index</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10599">gtest.h:10599</a></div></div>
  643. <div class="ttc" id="namespaceutl_html_ae0f873b4883af7cc18cb23dd2810f4e6"><div class="ttname"><a href="namespaceutl.html#ae0f873b4883af7cc18cb23dd2810f4e6">utl::swap</a></div><div class="ttdeci">void swap(array&lt; _Tp, _Nm &gt; &amp;lhs, array&lt; _Tp, _Nm &gt; &amp;rhs) noexcept(noexcept(lhs.swap(rhs)))</div><div class="ttdef"><b>Definition:</b> <a href="array_8h_source.html#l00214">array.h:214</a></div></div>
  644. <div class="ttc" id="classtesting_1_1_test_property_html_ad423a07af33c88b0c9ed33ee74815a63"><div class="ttname"><a href="classtesting_1_1_test_property.html#ad423a07af33c88b0c9ed33ee74815a63">testing::TestProperty::value</a></div><div class="ttdeci">const char * value() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15148">gtest.h:15148</a></div></div>
  645. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a841e522e537bb858d21eb75d0228d3b5"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a841e522e537bb858d21eb75d0228d3b5">testing::TestEventListener::OnTestSuiteEnd</a></div><div class="ttdeci">virtual void OnTestSuiteEnd(const TestSuite &amp;test_suite)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15708">gtest.h:15708</a></div></div>
  646. <div class="ttc" id="classtesting_1_1internal_1_1_type_with_size_3_018_01_4_html_a36d5697e5f5254b0495f13c97d747e36"><div class="ttname"><a href="classtesting_1_1internal_1_1_type_with_size_3_018_01_4.html#a36d5697e5f5254b0495f13c97d747e36">testing::internal::TypeWithSize&lt; 8 &gt;::Int</a></div><div class="ttdeci">long long Int</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02469">gtest.h:2469</a></div></div>
  647. <div class="ttc" id="classtesting_1_1internal_1_1_thread_local_html_a106f3a3ad15d08f95f9887105d2a1af5"><div class="ttname"><a href="classtesting_1_1internal_1_1_thread_local.html#a106f3a3ad15d08f95f9887105d2a1af5">testing::internal::ThreadLocal::ThreadLocal</a></div><div class="ttdeci">ThreadLocal()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02167">gtest.h:2167</a></div></div>
  648. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_af7c268eba32d5a718b36b6b3801302e0"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#af7c268eba32d5a718b36b6b3801302e0">testing::internal::posix::FDOpen</a></div><div class="ttdeci">FILE * FDOpen(int fd, const char *mode)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02356">gtest.h:2356</a></div></div>
  649. <div class="ttc" id="classtesting_1_1internal_1_1_values_in_iterator_range_generator_html_a298cfb66a90b1a39c0cea3ca7ae1ece1"><div class="ttname"><a href="classtesting_1_1internal_1_1_values_in_iterator_range_generator.html#a298cfb66a90b1a39c0cea3ca7ae1ece1">testing::internal::ValuesInIteratorRangeGenerator::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; T &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10838">gtest.h:10838</a></div></div>
  650. <div class="ttc" id="namespacetesting_1_1internal_html_ad901880198832bc166d2493096b451f7"><div class="ttname"><a href="namespacetesting_1_1internal.html#ad901880198832bc166d2493096b451f7">testing::internal::kMaxBiggestInt</a></div><div class="ttdeci">const BiggestInt kMaxBiggestInt</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02420">gtest.h:2420</a></div></div>
  651. <div class="ttc" id="classtesting_1_1_unit_test_html_af254e2e695471eb9f128bc556bae3668"><div class="ttname"><a href="classtesting_1_1_unit_test.html#af254e2e695471eb9f128bc556bae3668">testing::UnitTest::GetInstance</a></div><div class="ttdeci">static UnitTest * GetInstance()</div></div>
  652. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a07445ac68713383f38747e1c56c6a04a"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a07445ac68713383f38747e1c56c6a04a">testing::internal::ParameterizedTestSuiteInfo::AddTestPattern</a></div><div class="ttdeci">void AddTestPattern(const char *test_suite_name, const char *test_base_name, TestMetaFactoryBase&lt; ParamType &gt; *meta_factory)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11060">gtest.h:11060</a></div></div>
  653. <div class="ttc" id="structtesting_1_1internal_1_1_is_hash_table_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_hash_table.html">testing::internal::IsHashTable</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07442">gtest.h:7442</a></div></div>
  654. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder4_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder4.html">testing::internal::CartesianProductHolder4</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13087">gtest.h:13087</a></div></div>
  655. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a10761bd750a6820a8d8d2c654b10fe54"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a10761bd750a6820a8d8d2c654b10fe54">testing::internal::ParameterizedTestSuiteInfo::ParamType</a></div><div class="ttdeci">typename TestSuite::ParamType ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11039">gtest.h:11039</a></div></div>
  656. <div class="ttc" id="classtesting_1_1internal_1_1_param_generator_interface_html_ab33d2ea424c50beaf503cb125b3cd003"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_generator_interface.html#ab33d2ea424c50beaf503cb125b3cd003">testing::internal::ParamGeneratorInterface::ParamType</a></div><div class="ttdeci">T ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10704">gtest.h:10704</a></div></div>
  657. <div class="ttc" id="namespacetesting_html_ac92dcbd00a0ffb2913e65d286e321a22"><div class="ttname"><a href="namespacetesting.html#ac92dcbd00a0ffb2913e65d286e321a22">testing::AssertPred3Helper</a></div><div class="ttdeci">AssertionResult AssertPred3Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, Pred pred, const T1 &amp;v1, const T2 &amp;v2, const T3 &amp;v3)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l14808">gtest.h:14808</a></div></div>
  658. <div class="ttc" id="namespacetesting_1_1internal2_html"><div class="ttname"><a href="namespacetesting_1_1internal2.html">testing::internal2</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l11105">gtest-all.cc:11105</a></div></div>
  659. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a8e352884793a65ae8be144676f1a9136"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a8e352884793a65ae8be144676f1a9136">testing::internal::posix::StrDup</a></div><div class="ttdeci">char * StrDup(const char *src)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02328">gtest.h:2328</a></div></div>
  660. <div class="ttc" id="namespacetesting_1_1internal_1_1posix_html_a4b77b14af6f4d18f83d303b98e9349c4"><div class="ttname"><a href="namespacetesting_1_1internal_1_1posix.html#a4b77b14af6f4d18f83d303b98e9349c4">testing::internal::posix::StrError</a></div><div class="ttdeci">const char * StrError(int errnum)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02367">gtest.h:2367</a></div></div>
  661. <div class="ttc" id="classtesting_1_1_test_info_html_ac2581b45eccc9a3b94cb41c4807d0e34"><div class="ttname"><a href="classtesting_1_1_test_info.html#ac2581b45eccc9a3b94cb41c4807d0e34">testing::TestInfo::name</a></div><div class="ttdeci">const char * name() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15309">gtest.h:15309</a></div></div>
  662. <div class="ttc" id="classtesting_1_1_test_info_html_a9b74d79cf618ce5bb0d0b1da75ee8b35"><div class="ttname"><a href="classtesting_1_1_test_info.html#a9b74d79cf618ce5bb0d0b1da75ee8b35">testing::TestInfo::file</a></div><div class="ttdeci">const char * file() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15326">gtest.h:15326</a></div></div>
  663. <div class="ttc" id="namespacetesting_1_1internal_html_abfe9bfb020d38aa4e0e12c001911b22b"><div class="ttname"><a href="namespacetesting_1_1internal.html#abfe9bfb020d38aa4e0e12c001911b22b">testing::internal::CheckedDowncastToActualType</a></div><div class="ttdeci">Derived * CheckedDowncastToActualType(Base *base)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l01391">gtest.h:1391</a></div></div>
  664. <div class="ttc" id="classtesting_1_1_test_info_html_a82a84ffd0e4d18eb5a3f97a2077e12cc"><div class="ttname"><a href="classtesting_1_1_test_info.html#a82a84ffd0e4d18eb5a3f97a2077e12cc">testing::TestInfo::test_suite_name</a></div><div class="ttdeci">const char * test_suite_name() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15301">gtest.h:15301</a></div></div>
  665. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4_html_ac175518e7807c0b49c0ba8c1c78269ec"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_elem_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_i_01_4.html#ac175518e7807c0b49c0ba8c1c78269ec">testing::internal::FlatTupleElemBase&lt; FlatTuple&lt; T... &gt;, I &gt;::value</a></div><div class="ttdeci">value_type value</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07705">gtest.h:7705</a></div></div>
  666. <div class="ttc" id="structtesting_1_1internal_1_1_remove_const_html"><div class="ttname"><a href="structtesting_1_1internal_1_1_remove_const.html">testing::internal::RemoveConst</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07319">gtest.h:7319</a></div></div>
  667. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory.html">testing::internal::TestMetaFactory</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10980">gtest.h:10980</a></div></div>
  668. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_af488d1d7c1889a250acff2ea6eba4c84"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#af488d1d7c1889a250acff2ea6eba4c84">testing::internal::ParameterizedTestSuiteInfo::GetTestSuiteTypeId</a></div><div class="ttdeci">TypeId GetTestSuiteTypeId() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11053">gtest.h:11053</a></div></div>
  669. <div class="ttc" id="classtesting_1_1internal_1_1_eq_helper_html_aaa42c0059bb3dcc43d556243febb5f1c"><div class="ttname"><a href="classtesting_1_1internal_1_1_eq_helper.html#aaa42c0059bb3dcc43d556243febb5f1c">testing::internal::EqHelper::Compare</a></div><div class="ttdeci">static AssertionResult Compare(const char *lhs_expression, const char *rhs_expression, BiggestInt lhs, BiggestInt rhs)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16152">gtest.h:16152</a></div></div>
  670. <div class="ttc" id="classtesting_1_1_test_event_listener_html_a96693881a1872657b4683e2f0a236ca5"><div class="ttname"><a href="classtesting_1_1_test_event_listener.html#a96693881a1872657b4683e2f0a236ca5">testing::TestEventListener::OnTestCaseStart</a></div><div class="ttdeci">virtual void OnTestCaseStart(const TestCase &amp;test_case)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15693">gtest.h:15693</a></div></div>
  671. <div class="ttc" id="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4_html_a5e8e2cf58f0d2581e9e3ab5f5630cd61"><div class="ttname"><a href="structtesting_1_1internal_1_1_is_recursive_container_impl_3_01_c_00_01true_01_4.html#a5e8e2cf58f0d2581e9e3ab5f5630cd61">testing::internal::IsRecursiveContainerImpl&lt; C, true &gt;::value_type</a></div><div class="ttdeci">decltype(*std::declval&lt; typename C::const_iterator &gt;()) value_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07471">gtest.h:7471</a></div></div>
  672. <div class="ttc" id="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4_html_ac515eec5c0647748bf8fa4ff553c706e"><div class="ttname"><a href="structtesting_1_1internal_1_1_flat_tuple_base_3_01_flat_tuple_3_01_t_8_8_8_01_4_00_01_index_sequence_3_01_idx_8_8_8_01_4_01_4.html#ac515eec5c0647748bf8fa4ff553c706e">testing::internal::FlatTupleBase&lt; FlatTuple&lt; T... &gt;, IndexSequence&lt; Idx... &gt; &gt;::FlatTupleBase</a></div><div class="ttdeci">FlatTupleBase(T... t)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07716">gtest.h:7716</a></div></div>
  673. <div class="ttc" id="classtesting_1_1internal_1_1_native_array_html_a81b90f5739ed812610e68dc34c9e3850"><div class="ttname"><a href="classtesting_1_1internal_1_1_native_array.html#a81b90f5739ed812610e68dc34c9e3850">testing::internal::NativeArray::operator==</a></div><div class="ttdeci">bool operator==(const NativeArray &amp;rhs) const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07610">gtest.h:7610</a></div></div>
  674. <div class="ttc" id="namespacetesting_1_1internal_html_a0c793c6d84760d900299916c077a1af4"><div class="ttname"><a href="namespacetesting_1_1internal.html#a0c793c6d84760d900299916c077a1af4">testing::internal::OutputFlagAlsoCheckEnvVar</a></div><div class="ttdeci">std::string OutputFlagAlsoCheckEnvVar()</div><div class="ttdef"><b>Definition:</b> <a href="gtest-all_8cc_source.html#l10980">gtest-all.cc:10980</a></div></div>
  675. <div class="ttc" id="namespacetesting_1_1internal_html_a1e85cf16bb95b60f879d48ba1fbfc1c9"><div class="ttname"><a href="namespacetesting_1_1internal.html#a1e85cf16bb95b60f879d48ba1fbfc1c9">testing::internal::GetTestTypeId</a></div><div class="ttdeci">GTEST_API_ TypeId GetTestTypeId()</div></div>
  676. <div class="ttc" id="namespacetesting_html_ae90c778d69db4682e8fd8baaa0a9f9cd"><div class="ttname"><a href="namespacetesting.html#ae90c778d69db4682e8fd8baaa0a9f9cd">testing::AssertPred4Helper</a></div><div class="ttdeci">AssertionResult AssertPred4Helper(const char *pred_text, const char *e1, const char *e2, const char *e3, const char *e4, Pred pred, const T1 &amp;v1, const T2 &amp;v2, const T3 &amp;v3, const T4 &amp;v4)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l14864">gtest.h:14864</a></div></div>
  677. <div class="ttc" id="namespacetesting_1_1internal_html_a17fb8f0125fa92404a249ed38a43faa4a5a066cde30e276c6460ba10d123d0c2c"><div class="ttname"><a href="namespacetesting_1_1internal.html#a17fb8f0125fa92404a249ed38a43faa4a5a066cde30e276c6460ba10d123d0c2c">testing::internal::kPrintFunctionPointer</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08437">gtest.h:8437</a></div></div>
  678. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_html_a6c37240a04ba3fc4c56f6c413cf4771d"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator.html#a6c37240a04ba3fc4c56f6c413cf4771d">testing::internal::ParamIterator::difference_type</a></div><div class="ttdeci">ptrdiff_t difference_type</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10663">gtest.h:10663</a></div></div>
  679. <div class="ttc" id="namespacetesting_1_1internal_html_aa6afda12e567c353e2e9b9c2e8cae14f"><div class="ttname"><a href="namespacetesting_1_1internal.html#aa6afda12e567c353e2e9b9c2e8cae14f">testing::internal::StripTrailingSpaces</a></div><div class="ttdeci">std::string StripTrailingSpaces(std::string str)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02266">gtest.h:2266</a></div></div>
  680. <div class="ttc" id="classtesting_1_1_message_html"><div class="ttname"><a href="classtesting_1_1_message.html">testing::Message</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02644">gtest.h:2644</a></div></div>
  681. <div class="ttc" id="classtesting_1_1internal_1_1_random_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_random.html">testing::internal::Random</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07276">gtest.h:7276</a></div></div>
  682. <div class="ttc" id="classtesting_1_1_test_html_ae173b07a0fdd09fc1d417a2bb6cbdd76"><div class="ttname"><a href="classtesting_1_1_test.html#ae173b07a0fdd09fc1d417a2bb6cbdd76">testing::Test::SetUpTestSuite</a></div><div class="ttdeci">static void SetUpTestSuite()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15027">gtest.h:15027</a></div></div>
  683. <div class="ttc" id="classtesting_1_1internal_1_1_universal_terse_printer_3_01char_01_5_01_4_html_aa9ef95587c1461fe33e254af52401a43"><div class="ttname"><a href="classtesting_1_1internal_1_1_universal_terse_printer_3_01char_01_5_01_4.html#aa9ef95587c1461fe33e254af52401a43">testing::internal::UniversalTersePrinter&lt; char * &gt;::Print</a></div><div class="ttdeci">static void Print(char *str, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08882">gtest.h:8882</a></div></div>
  684. <div class="ttc" id="namespacetesting_1_1internal_html_a30708fa2bacf11895b03bdb21eb72309"><div class="ttname"><a href="namespacetesting_1_1internal.html#a30708fa2bacf11895b03bdb21eb72309">testing::internal::UniversalPrint</a></div><div class="ttdeci">void UniversalPrint(const T &amp;value, ::std::ostream *os)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08919">gtest.h:8919</a></div></div>
  685. <div class="ttc" id="classtesting_1_1_message_html_a2cdc4df62bdcc9df37651a1cf527704e"><div class="ttname"><a href="classtesting_1_1_message.html#a2cdc4df62bdcc9df37651a1cf527704e">testing::Message::GetString</a></div><div class="ttdeci">std::string GetString() const</div></div>
  686. <div class="ttc" id="structtesting_1_1internal_1_1_code_location_html_a323a11851c81629d632c47b9b767b8ac"><div class="ttname"><a href="structtesting_1_1internal_1_1_code_location.html#a323a11851c81629d632c47b9b767b8ac">testing::internal::CodeLocation::CodeLocation</a></div><div class="ttdeci">CodeLocation(const std::string &amp;a_file, int a_line)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06930">gtest.h:6930</a></div></div>
  687. <div class="ttc" id="classtesting_1_1_test_result_html"><div class="ttname"><a href="classtesting_1_1_test_result.html">testing::TestResult</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15170">gtest.h:15170</a></div></div>
  688. <div class="ttc" id="classtesting_1_1internal_1_1_param_iterator_interface_html_a9d811697a752d46f7bd6a0082f9040a3"><div class="ttname"><a href="classtesting_1_1internal_1_1_param_iterator_interface.html#a9d811697a752d46f7bd6a0082f9040a3">testing::internal::ParamIteratorInterface::Equals</a></div><div class="ttdeci">virtual bool Equals(const ParamIteratorInterface &amp;other) const =0</div></div>
  689. <div class="ttc" id="classtesting_1_1internal_1_1_range_generator_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_range_generator.html">testing::internal::RangeGenerator</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10743">gtest.h:10743</a></div></div>
  690. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html">testing::internal::CartesianProductGenerator7</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12116">gtest.h:12116</a></div></div>
  691. <div class="ttc" id="classtesting_1_1_test_result_html_a717e05e00d4af5cb809433e343ab63af"><div class="ttname"><a href="classtesting_1_1_test_result.html#a717e05e00d4af5cb809433e343ab63af">testing::TestResult::elapsed_time</a></div><div class="ttdeci">TimeInMillis elapsed_time() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15201">gtest.h:15201</a></div></div>
  692. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html_aafc9c559223d3a685028ec98aa727818"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#aafc9c559223d3a685028ec98aa727818">testing::internal::CartesianProductGenerator7::CartesianProductGenerator7</a></div><div class="ttdeci">CartesianProductGenerator7(const ParamGenerator&lt; T1 &gt; &amp;g1, const ParamGenerator&lt; T2 &gt; &amp;g2, const ParamGenerator&lt; T3 &gt; &amp;g3, const ParamGenerator&lt; T4 &gt; &amp;g4, const ParamGenerator&lt; T5 &gt; &amp;g5, const ParamGenerator&lt; T6 &gt; &amp;g6, const ParamGenerator&lt; T7 &gt; &amp;g7)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12122">gtest.h:12122</a></div></div>
  693. <div class="ttc" id="classtesting_1_1internal_1_1_thread_local_html_a882f57fed4b074de83693c0c0fe62858"><div class="ttname"><a href="classtesting_1_1internal_1_1_thread_local.html#a882f57fed4b074de83693c0c0fe62858">testing::internal::ThreadLocal::pointer</a></div><div class="ttdeci">T * pointer()</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02169">gtest.h:2169</a></div></div>
  694. <div class="ttc" id="gtest_8h_html_a874567b176266188fabfffb8393267ce"><div class="ttname"><a href="gtest_8h.html#a874567b176266188fabfffb8393267ce">GTEST_REMOVE_REFERENCE_AND_CONST_</a></div><div class="ttdeci">#define GTEST_REMOVE_REFERENCE_AND_CONST_(T)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l07337">gtest.h:7337</a></div></div>
  695. <div class="ttc" id="classtesting_1_1internal_1_1_parameterized_test_suite_info_html_a4a5ddc2cd0404438c2b4d405cd0e706c"><div class="ttname"><a href="classtesting_1_1internal_1_1_parameterized_test_suite_info.html#a4a5ddc2cd0404438c2b4d405cd0e706c">testing::internal::ParameterizedTestSuiteInfo::GetTestSuiteName</a></div><div class="ttdeci">const std::string &amp; GetTestSuiteName() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11049">gtest.h:11049</a></div></div>
  696. <div class="ttc" id="classtesting_1_1_scoped_trace_html_accd2a06cc941ffd7d6fe109adfdb4f19"><div class="ttname"><a href="classtesting_1_1_scoped_trace.html#accd2a06cc941ffd7d6fe109adfdb4f19">testing::ScopedTrace::ScopedTrace</a></div><div class="ttdeci">ScopedTrace(const char *file, int line, const char *message)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l16848">gtest.h:16848</a></div></div>
  697. <div class="ttc" id="classtesting_1_1internal_1_1_floating_point_html_a1fc654fd206efa98e480aa1e034f30d5"><div class="ttname"><a href="classtesting_1_1internal_1_1_floating_point.html#a1fc654fd206efa98e480aa1e034f30d5">testing::internal::FloatingPoint::is_nan</a></div><div class="ttdeci">bool is_nan() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06771">gtest.h:6771</a></div></div>
  698. <div class="ttc" id="classtesting_1_1_empty_test_event_listener_html_ac3f5033fcd82080edb45f546ce9854fe"><div class="ttname"><a href="classtesting_1_1_empty_test_event_listener.html#ac3f5033fcd82080edb45f546ce9854fe">testing::EmptyTestEventListener::OnTestProgramStart</a></div><div class="ttdeci">void OnTestProgramStart(const UnitTest &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15736">gtest.h:15736</a></div></div>
  699. <div class="ttc" id="structtesting_1_1internal_1_1_code_location_html_a01c977c7e8834a05a6d6c40b0c416045"><div class="ttname"><a href="structtesting_1_1internal_1_1_code_location.html#a01c977c7e8834a05a6d6c40b0c416045">testing::internal::CodeLocation::line</a></div><div class="ttdeci">int line</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l06934">gtest.h:6934</a></div></div>
  700. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_holder7_html"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_holder7.html">testing::internal::CartesianProductHolder7</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13176">gtest.h:13176</a></div></div>
  701. <div class="ttc" id="namespacetesting_1_1internal2_html_aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383"><div class="ttname"><a href="namespacetesting_1_1internal2.html#aeb8161b0b3ee503347b0662d7028fd57a14aaf98a2547ecf43eef0868d54b1383">testing::internal2::kProtobuf</a></div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l08165">gtest.h:8165</a></div></div>
  702. <div class="ttc" id="classtesting_1_1internal_1_1_test_meta_factory_html_a392ebab15dfdcfa1b54bbe15878aa9cd"><div class="ttname"><a href="classtesting_1_1internal_1_1_test_meta_factory.html#a392ebab15dfdcfa1b54bbe15878aa9cd">testing::internal::TestMetaFactory::ParamType</a></div><div class="ttdeci">typename TestSuite::ParamType ParamType</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l10983">gtest.h:10983</a></div></div>
  703. <div class="ttc" id="classtesting_1_1_test_suite_html_a2ede69fa37985ab8b21128955c56d6d7"><div class="ttname"><a href="classtesting_1_1_test_suite.html#a2ede69fa37985ab8b21128955c56d6d7">testing::TestSuite::elapsed_time</a></div><div class="ttdeci">TimeInMillis elapsed_time() const</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l15494">gtest.h:15494</a></div></div>
  704. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator7_html_a452dadb9cedbc18f539cfc98eb6e5b88"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator7.html#a452dadb9cedbc18f539cfc98eb6e5b88">testing::internal::CartesianProductGenerator7::End</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * End() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l12134">gtest.h:12134</a></div></div>
  705. <div class="ttc" id="namespacetesting_html_a374d4e5fbb4c938058fbe81d4c7ff6a6"><div class="ttname"><a href="namespacetesting.html#a374d4e5fbb4c938058fbe81d4c7ff6a6">testing::Values</a></div><div class="ttdeci">internal::ValueArray&lt; T... &gt; Values(T... v)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l13496">gtest.h:13496</a></div></div>
  706. <div class="ttc" id="classtesting_1_1internal_1_1_cartesian_product_generator6_html_ae9a8a36d7d4a5270a21ffd38744bbfce"><div class="ttname"><a href="classtesting_1_1internal_1_1_cartesian_product_generator6.html#ae9a8a36d7d4a5270a21ffd38744bbfce">testing::internal::CartesianProductGenerator6::Begin</a></div><div class="ttdeci">ParamIteratorInterface&lt; ParamType &gt; * Begin() const override</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l11943">gtest.h:11943</a></div></div>
  707. <div class="ttc" id="namespaceutl_html_a29057d2e164fe6dd3f3095f0d69c6546"><div class="ttname"><a href="namespaceutl.html#a29057d2e164fe6dd3f3095f0d69c6546">utl::get</a></div><div class="ttdeci">constexpr _Tp &amp; get(array&lt; _Tp, _Nm &gt; &amp;arr) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="array_8h_source.html#l00220">array.h:220</a></div></div>
  708. <div class="ttc" id="namespacetesting_1_1internal_html_a83802e7f23324cd512232203662e1a98"><div class="ttname"><a href="namespacetesting_1_1internal.html#a83802e7f23324cd512232203662e1a98">testing::internal::IsAlNum</a></div><div class="ttdeci">bool IsAlNum(char ch)</div><div class="ttdef"><b>Definition:</b> <a href="gtest_8h_source.html#l02236">gtest.h:2236</a></div></div>
  709. </div><!-- fragment --></div><!-- contents -->
  710. </div><!-- doc-content -->
  711. <!-- start footer part -->
  712. <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  713. <ul>
  714. <li class="navelem"><a class="el" href="dir_13e138d54eb8818da29c3992edef070a.html">test</a></li><li class="navelem"><a class="el" href="dir_aaec33bad2bb7a5d6c86281ead709be5.html">eclipse-cygwin</a></li><li class="navelem"><a class="el" href="dir_c2811dd2f770757e67563302be4130d6.html">lib</a></li><li class="navelem"><a class="el" href="dir_a96de09a69cea6234edc1a1514d133f0.html">gtest</a></li><li class="navelem"><a class="el" href="gtest_8h.html">gtest.h</a></li>
  715. <li class="footer">Generated by
  716. <a href="http://www.doxygen.org/index.html">
  717. <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li>
  718. </ul>
  719. </div>
  720. </body>
  721. </html>