﻿/*
	© 2016-2017 FrankHB.

	This file is part of the YSLib project, and may only be used,
	modified, and distributed under the terms of the YSLib project
	license, LICENSE.TXT.  By continuing to use, modify, or distribute
	this file you indicate that you have read the license and
	understand and accept it fully.
*/

/*!	\file ChangeLog.V0.7.txt
\ingroup Documentation
\brief 版本更新历史记录 - V0.7 。
\version r8128
\author FrankHB <frankhb1989@gmail.com>
\since build 700
\par 创建时间:
	2016-06-11 03:16:46 +0800
\par 修改时间:
	2017-07-31 19:05 +0800
\par 文本编码:
	UTF-8
\par 模块名称:
	Documentation::ChangeLog::'V0.7'
*/

// See %Documentation::Meta for meta descriptions.

$import $HISTORY;

// Scope: [b700, $now];

$now
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				+ "operative '$quote'",
					// See $2017-07 @ %Documentation::Workflow::Annual2017.
				+ "operative '$setrec!'",
				+ "operative '$vaue'",
				/ $dev "alternative derivation" @ "operative '$sequence'" $=
				(
					* "used unbound operative" $since b789 $dep_from '$vaue',
					/ "simplified" ^ ($dep_from '$setrec!' ~ 'copy-environment',
						'$lambda' ~ '$vau')
				)
			),
			/ %NPLA $=
			(
				/ @ "class %Environment" $=
				(
					/ "static function %CheckParentEnvironment"
						-> "%CheckParent"
						$= (* "missing check recursively for parent \
							environments of environment list" $since b798),
					/ "static function %ThrowInvalidEnvironmentType"
						=> "%ThrowForInvalidType",
				),
				+ "function %LiftTermObject" ^ ($dep_From
					"%YSLib::SetContentWith", "ValueObject::MakeIndirect")
					@ %YSLib.Core.ValueNode,
				* "copy instead of subterms indirection support"
					@ "functions %LiftTermRef" $since b747 $=
				(
					+ 'const' @ "2nd parameter" @ "function %LiftTermRef#1",
					/ $impl "functions %LiftTermRef#(1, 2)" ^ $dep_from
						"%LiftTermObject"
				)
			),
			/ %NPLA1 $=
			(
				* $comp "missing parent environment type check"
					@ "function %MakeEnvironment" $since b798 $dep_from
					("%Envrionment::CheckParent" @ %NPLA),
				/ "exception message for wrong evironment formal parameter"
					@ "functions %(Vau, VauWithEnvironment)",
				/ @ "vau handler" $=
				(
					+ "type" @ "exception message for invalid environment \
						formal parameter",
					+ "parameter tree check",
						// It is now necessary to keep stored parameter tree \
							well-formed before matching. Note it was always \
							consistent from the source, but API could still \
							provide a bad parameter tree if there is no check.
				),
				/ @ "function %EvaluateIdentifier" $=
				(
					/ "assertion" @ "function %EvaluateIdentifier"
						>> "function %ResolveName",
					(
					/ $impl "simplified" ^ "%EvaluateIdentifier" ^ $dep_from
						"%ListTermRef" ~ "%ValueObject::SetContentIndirect";
						// Note lvalue access of list is still not support as \
							list cannot be replaced in a whole. New \
							intermediate type is required to support \
							first-class list lvalue.
					* $comp "children referenced by copying associated \
						children of variable stored in environment"
						@ "variable referencing" $since b768
						$dep_from ("parameter tree check" @ "vau handler")
						// This also related to uncaught \
							%ystdex::invalid_construction in referencing a \
							list with move-only objects.
					)
				)
			)
		),
		/ %YSLib.Core $=
		(
			/ %ValueNode $=
			(
				+ "function template %SetContentWith",
				- $revert(b747) "all 2 member functions \
					%ValueNode::SetContentIndirect" $dep_from (("%LiftTermRef"
					@ %NPLA, "%EvaluateIdentifier" @ %NPLA1) @ %NPLA)
			),
			/ "function %GetType" @ "class %ValueObject" @ %YObject
				=> "%type"
		)
	)
),

b798
(
	/ %Tools $=
	(
		/ %Scripts $=
		(
			/ @ "%SHBuild-bootstrap.sh" $=
			(
				- "('AR'. 'LD') settings"
					// Since it is intended to be call by compiler driver \
						directly, archiver and linker commands are redundant.
				/ $dev "comments of notes for '-fwhole-program'"
					>> "%SHBuild-build.sh"
			),
			/ $impl @ "%SHBuild-YSLib-common.txt" $=
			(
				/ DLD "lifted %SHBOPT construction",
				/ "reordered user output of variable",
					// To be consistent with %SHBuild-BuildApp.sh.
				/ $forced DLDI "simplified applicative %build-with-conf-opt"
					$dep_from %YFramework.NPL.Dependency
			),
			/ @ "%SHBuild-BuildApp.sh" $=
			(
				* "missing quotes around '$SHBuild_AppBaseDir'"
					@ "function %SHBuild_BuildApp" $since b549,
				+ "variable %SHBuild to specify %SHBuild path with default \
					value 'SHBuild'",
				/ @ "link options" $=
				(
					* "redundant '-Wl,dy' on 'pkg-config' failure"
						@ "variable %SHBuild_YF_Libs_freetype"
						@ !"platform %Win32" $since b,
					* $re_add(b583) "missing quotes of inclusion path for \
						static library builds to protect against spaces in \
						%SHBuild_Bin" $since b561
						// This was introduced in b549, but the requirement \
							started from b561.
				)
			)
		),
		* "missing quotes around '$SHBuild_S1_SHBuild'" @ "%install-sysroot.sh"
			$since b565,
		+ $re_ex(b797) "command line arguments initialization support"
			@ "command %RunNPL" @ %SHBuild.Main
	),
	/ %YFramework $=
	(
		/ %YSLib.Core.YCoreUtilities $=
		(
			* "wrong result when the common type is a signed type not greater \
				than destination" $since b575;
			* "always failed to convert %int to %size_t where they have same \
				width" @ "member function %ArgumentsVector::Reset" $since b797
				// In general, all platform with 64-bit %size_t are effected.
		),
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				/ ("<expression>" -> "<body>" ) @ "<clause>"
					@ "operative '$cond'" $=
					(/ "supported direct evaluation for variadic terms"
						^ "%eval" ~ "(%apply, '$sequence')"),
				+ "applicative %SHBuild_RemovePrefix_",
				/ DLDI "applicative %SHBuild_EchoVar"
					^ ($dep_from "%Environment::Lookup", "%GetValuePtrOf")
					@ %NPLA ~ "%FecthValuePtr",
				/ $forced DLDI "applicative 'copy-ennvironment'" $dep_from
					("%Environment::ParentPtr" @ %NPLA),
				* "applicative 'make-environment'" $since b789 ^ $dep_from
					("%MakeEnvironment" @ %NPLA1),
				+ "applicative 'weaken-environment'"
			),
			/ %NPLA $=
			(
				+ 'using EnvironmentList = vector<ValueObject>;',
				/ @ "class %Environment" $=
				(
					+ "function %LookupName",
					- DLDI "redundant 'YF_API'"
						@ "functions %(Define, Redefine, Remove)",
					/ "support of host environment type" $=
					(
						(
						/ "data member %ParentPtr" => "%Parent";
						+ "static function DefaultRedirect";
						+ "data member %Redirect"
						),
						(
						+ "static function DefaultResolve"
							^ $dep_from "%Lookup";
						+ "data member %Resolve;
						);
						+ "more recursive parent environment support"
							^ $dep_from "%EnvironmentList",
						(
						+ "static functions %(ThrowInvalidEnvironmentType; \
							CheckParentEnvironment";
						+ "2 constructors with parent environment parameter"
						)
					)
				)
			),
			/ %NPLA1 $=
			(
				/ DLDI "simplified %ResolveName"
					^ $dep_from ("%Environment::ResolveName" @ %NPLA)
				/ @ "namespace %Forms" $=
				(
					- DLDI "redundant 'YF_API'" @ "function %SymbolToString",
					/ $forced DLDI "vau handler" ^ ($dep_from
						"%Environment::ParentPtr" @ %NPLA),
					/ DLDI "functions %(VauWithEnvironment, Eval)"
						^ $dep_from "%ResolveEnvironment",
					+ "function %MakeEnvironment" ^ $dep_from
						("(%EnvironmentList, Environment)" @ %NPLA)
				),
				+ "function %ResolveEnvironment" ^ $dep_from
					("%Environment::ThrowInvalidEnvironmentType" @ %NPLA),
				* "rebinding of variadic traling elements had no effect"
					@ "function %BindParameter" $since b777
			)
		)
	)
),

b797
(
	/ %Tools $=
	(
		/ %Scripts $=
		(
			/ "removed building functionality" @ "%SHBuild-YSLib.sh"
				$dep_from "%install-sysroot.sh"
			/ "%SHBuild-YSLib-common.txt" $=
			(
				+ "applicative 'cons-cmd'" ^ $dep_from
					("%append" @ %YFramework.NPL.Dependency);
				/ DLDI "simplified command option construction"
			),
			/ DLDI "simplified command option construction"
				@ %"%SHBuild-YSLib-build.txt" ^ $dep_from
				('cons-cmd' @ "%SHBuild-YSLib-common.txt", 'cmd-get-args'
				@ %SHBuild.Main) ~ "environment variable %args"
		),
		/ %SHBuild.Main $=
		(
			(
			+ "applicative 'cmd-get-args'" @ "loading forms"
				@ "NPL REPL context initialization";
			+ "command line arguments initialization support"
				@ "command %RunNPLFile"
			),
			* "duplicated decoding on command arguments 0 for commands \
				%(RunNPL, RunNPLFile)" $since b758,
			+ "optional options parsing controlled by '--'",
				// This can be useful if passed options are for commands.
			/ @ "help message" $=
			(
				+ "shell syntax descriptions of envionment variables",
				+ "descriptions for exection modes",
				* "misspelled variable %SHBuild_CXXFLAGS"
					$= (/ "%SHBuild_FLAGS" -> "%SHBuild_CXXFLAGS")
			)
		),
		/ $forced "stage 2 YSLib building" @ "%install-sysroot.sh" ^ $dep_from
			("%SHBuild-YSLib-build.txt" @ %Scripts, ("command line arguments \
			initialization support", "optional options parsing controlled by \
			'--'") @ %SHBuild.Main) ~ "%SHBuild-YSLib.sh" 
	),
	/ %YFramework $=
	(
		+ "class %ArgumentsVector" @ %YSLib.Core.YCoreUtilities,
		/ %NPL $=
		(
			+ "applicatives ('list-concat', %append)" @ "loading forms"
				@ "function %LoadNPLContextForSHBuild" @ %Dependency,
			* "missing arity check" @ "function %GetCurrentEnvironment"
				@ "namespace %Forms" @ %NPLA1 $since b785
		)
	)
),

b796
(
	/ %Tools $=
	(
		/ %Scripts $=
		(
			/ ("%SHBuild-YSLib-common.sh", "NPL common library"
				@ "%SHBuild-common-toolchain.sh") -> "NPLA1 script \
				%SHBuild-YSLib-common.txt with CR+LF EOL" $dep_from
				("%(SHBuild_TrimOptions_, load)" @ "%LoadNPLContextForSHBuild"
				@ %YFramework.NPL.Dependency);
			/ "%SHBuild-YSLib-debug.sh" -> "NPLA1 script \
				%SHBuild-YSLib-build.txt with CR+LF EOL";
			/ $forced "%SHBuild-build.sh"
		),
		/ %SHBuild.Main $=
		(
			+ "applicative %load" @ "loading forms"
				@ "NPL REPL context initialization",
			+ "nested exception with name of source"
				@ "loading NPLA1 script failure"
		)
	),
	/ %YFramework.NPL $=
	(
		/ %Lexical $=
		(
			* $lib $impl "wrongly depended on %string_view::const_iterator \
				details" @ "function %Decompose" $since b659,
			+ "%yconstfn function %IgnorePrefix",
			/ @ "functions %(IsGraphicalDelimeter, IsDelimiter)" $=
			(
				+ 'ynothrow',
				/ DLDI "simplified" ^ "%(PDefH, ImplExpr)"
			)
		),
		* "applicative %SHBuild_TrimOptions_" @ "loading forms"
			@ "function %LoadNPLContextForSHBuild" @ %Dependency $since b763
			^ $dep_from ("%IgnorePrefix" @ %Lexical)
	)
),

b795
(
	/ %Tools $=
	(
		/ %Scripts $=
		(
			/ $impl "NPL common library" @ "%SHBuild-common-toolchain.sh" $=
			(
				* "path conversion routine %SHBuild_2u" $since b791,
				+ "operative '$assert-nonempty'" ^ $dep_from ('$binds1?'
					@ "%LoadNPLContextForSHBuild" @ %YFramework.NPL.Dependency),
				+ "applicative 'rmatch?'; uname detection functions"
					^ $dep_from (('regex->string', 'regex-match?')
					@ "%LoadNPLContextForSHBuild" @ %YFramework.NPL.Dependency),
				+ "operative '$set-system-var'" ^ $dep_from ('$binds1?'
					@ "%LoadNPLContextForSHBuild" @ %YFramework.NPL.Dependency)
			),
			(
			/ "reduced bash dependency" @ "%SHBuild-YSLib-common.sh" $=
			(
				/ DLDI "ensruing directories" ^ $dep_from
					"%SHBuild_EnsureDirectory_" @ "%LoadNPLContextForSHBuild"
					@ %YFramework.NPL.Dependency,
				(
				/ "fixed %SHBuild_Host_Platform internally";
					// External settings of %SHBuild_Host_Platform is not \
						supported now.
				- "call of %SHBuild_CheckHostPlatform"
				),
				/ DLDI "simplified build strings as NPL scripts",
				(
				- 'unset CXXFLAGS_COMMON CXXFLAGS',
				- 'export LANG=C',
				- 'export CFLAGS CXXFLAGS CXXFLAGS_COMMON';
				/ "all remained 'export' variables except for %SHBuild_Env_OS"
					-> 'set -a'
					// The remained options are not supported to change.
				),
				/ "initialized variables %(SHBuild_Env_OS, SHBuild_Env_Arch)"
					^ $dep_from ('$set-system-var!', 'SHBuild_CheckUName_Case_',
					'SHBuild_CheckUNameM_Case_')
					@ "%SHBuild-common-toolchain.sh"
					~ "call of %SHBuild_CheckUName",
				- $lib "unused variable %SHBuild_BaseDir",
				/ ("default value setting of variable %YSLib_BaseDir"
					-> "assertion to ensure nonnull when not skipped",
					"assertion for %YSLib_BuildDir)" ^ $dep_from
					'$assert-nonnull' @ "%SHBuild-common-toolchain.sh"
					// Variable %YSLib_BaseDir is now required set in \
						environment as %YSLib_BuildDir.
			),
			/ "supported both %debug and %release configurations with new \
				options" @ "%SHBuild-YSLib.sh";
			- "build command calling" @ "%SHBuild-YSLib.sh"
				// It is reserved now.
			)
		),
		/ "install-sysroot.sh" $=
		(
			+ "support forcing rebuilding stage 1 SHBuild by specyfing non \
				empty value of %SHBuild_Rebuild_S1",
			/ "YSLib build command for both %debug and %release configurations \
				with different arguments" ^ $dep_from "%SHBuild-YSLib.sh"
		)
	),
	* %Documentation.NPL "use of %Check in handlers" $mismatch $since b773,
	/ "loading forms" @ "function %LoadNPLContextForSHBuild"
		@ %YFramework.NPL.Dependency $=
	(
		+ "applicatives ('string->regex', 'regex-match?', \
			%SHBuild_EnsureDirectory_, 'bound?')",
		+ "operative '$binds?'" ^ $dep_from 'bound?'
	)
),

b794
(
	+ "-Wno-noexcept-type" @ "variable %CXXFLAGS_IMPL_WARNING" @ "g++"
		@ "%(SHBuild-common-toolchain.sh, SHBuild-common-options.sh)"
		@ %Tools.Scripts,
		// To eliminate G++ 7 warning: [-Wnoexcept-type] which is enabled by \
			default. Note G++ would ignore if it does not know it, while \
			Clang++ complains it with [-Wunknown-warning-option] and \
			cc1plus warns, too (but only on failing to compile).
	/ %YBase.YStandardEx.Any $=
	(
		/ "supported holder type without member type %value_type"
			@ "class template %holder_handler" $=
		(
			(
			* "static function %manage wrongly ignored holder member" $since
				b352
				$= (/ $impl "switches %(get_ptr, get_type)"
					^ "%holder member function");
			- "static function %get_pointer";
			),
			* "non-local construction with %std::unique_ptr<_tHolder>" $since
				b716;
			- "member type %value_type"
		),
		(
		/ @ "class %holder" $=
		(
			/ $dev $lib 'override' @ "destructor" -> 'virtual';
			- "base class %cloneable, pure virtual function %clone"
				@ "class %holder"
				// It is not used by %any_ops::clone.
		);
		- $forced "overrider %clone"
			@ "class templates %(value_holder, pointer_holder)"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib.Core.YObject $=
		(
			- "overrider %clone"
				@ "class templates %(ValueHolder, PointerHolder, RefHolder)"
				$dep_from ("%ystdex::any_ops::holder" @ %YBase.YStandardEx.Any);
			* $comp $dev "missing polymorphic return type of %clone"
				@ "interface %IValueHolder" $since b362
		),
		/ %NPL $=
		(
			* "insufficient recursive referencing" @ "applicative \
				'copy-environment'" @ "loading forms" @ "function \
				%LoadNPLContextForSHBuild" @ %Dependency $since b789,
			/ %NPLA1 $=
			(
				/ DLDI "simplified function %ReduceCheckedClosure"
					^ "%(ValueNode::CreateWith, ValueObject::MakeMoveCopy)",
				/ @ "namespace %Forms" $=
				(
					+ "function template %CheckSymbol";
					/ "supported return value and %string_view" @ "function \
						template %CheckParameterLeafToken" ^ "%CheckSymbol"
				)
			)
		)
	),
	* "missing exceptional condition of undefined behavior on invalid access \
		of variable reference after rebinding subject to NPLA guarantees" $since
		b767 $=
		(+ "clearified condition of dangling reference in evaluated \
			result after rebinding of corresponding variable")
),

b793
(
	(
	+ "macro %YB_ATTR_fallthrough" @ %YBase.YDefinition;
	/ DLI "marked fallthrough" @ "switch statement" ^ ("%YB_ATTR_fallthrough"
		@ %YBase.YDefinition) $effective @ (("function \
		%DecomposeMakefileDepList" @ %Dependency, "functions %(NPLUnescape, \
		LexicalAnalyzer::ParseByte)" @ %Lexical, "function %EvaluateLeafToken"
		@ %NPLA1, "function %ConvertAttributeNodeString" @ %NPLA) @ %NPL,
		"class specializations %GUCSMapper"
		@ %CHRLib.(StaticMapping, MappingEx)) @ %YFramework
		// To eliminate G++ 7 warning: [-Wimplicit-fallthrough=].
	),
	/ %YFramework $=
	(
		/ $dev @ !"%YCL_Win32" @ "class %Semaphore" @ %YCLib.Host $=
		(
			+ "default constructor %Deleter" ^ "%DefDeCtor",
			- '{}' @ "data member %Referent"
			// To make G++ 7 happy. Note this may be an unconfirmed CWG issue, \
				see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58328.
		),
		/ %YSLib.Core.YObject $=
		(
			* "misspelled %HolerFromPointer" $since b789
				$= (/ "%HolerFromPointer" => "%HolderFromPointer"),
			/ "function %GetHolderPtr" @ "class template %PointerHolder"
				=> "%GetHeld"
				// To avoid confusion with %ValueObject::GetHolderPtr.
		),
		/ DLDI %NPL.NPLA1 $=
		(
			/ "%DefineWithRecursion" $dep_from
				("%HolerFromPointer" @ %YSLib.Core.YObject),
			/ "function %EvaluateIdentifier"
		)
	)
),

b792
(
	/ @ "%SHBuild-YSLib-common.sh" @ %Tools.Scripts $=
	(
		/ "prevented printing message for variables when target is skipped",
		/ DLDI "simplified" ^ $dep_from
			('$let*' @ %YFramework.NPL.Dependency)
	),
	/ %YBase.YStandardEx.Container $=
	(
		+ "function template %extract_mapped",
		- "redundant trivial overload of function template %extract_key",
		* "function template %insert_or_assign" $since b681
	),
	/ %YFramework $=
	(
		/ @ "class %ValueNode" @ %YSLib.Core.ValueNode $=
		(
			- 'const' @ "return type" @ "function template %operator[]",
			* $comp "function templates %insert_or_assign" $since b681 $dep_from
				("%ystdex::insert_or_assign" @ %YBase.YStandardEx.Container),
			/ @ "functions %operator%=" $=
			(
				/ "parameter type 'const ValueNode&&'"
					@ "overload with rvalue reference" -> 'ValueNode&&';
				/ $impl ^ $dep_from "%insert_or_assign" ~ "%operator[]";
				- 'const' @ "return type",
				* $comp "missing setting container" $mismatch $since b502
			),
			* $comp "missing setting container" @ "functions %operator/"
				$dep_from "%operator%=" $mismatch $since b502
		),
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				+ "operative '$let*'",
				/ DLDI "simplified operative '$let'" ^ '$defv!'
					~ ('$def!', '$vau')
			),
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ DD "grammar category for bodies",
					* "%ParameterMismatch thrown uncoditionally to binding to \
						empty list as formal parameter tree"
						@ "function %DefineWithRecursion" $since b780,
						// This would also cause '$letrec' with empty binding \
							list cannot be implemented directly by '$defrec!'.
					/ "exception message" @ "mismatch for empty operand tree"
						@ "function %BindParameter" $=
					(
						* "wrong message of mismatched leaf term for empty \
							operand tree" $since b772,
						+ "subterm number and value type"
					)
				),
				/ "specified %ValueToken::Unspecified as result when operand \
					is empty" @ "function %ReduceOrdered"
					// This has behavior more consistent with other functions \
						for '$sequence', also easier for debugging.
			)
		),
		+ "worked around GCC 7 compilation error" @ "class template %GHEvent"
			@ %YSLib.Core.YEvent
	)
),

b791
(
	/ %YFramework $=
	(
		/ "loading forms" @ "function %LoadNPLContextForSHBuild"
			@ %NPL.Dependency $=
		(
			+ "applicatives ('list-rest', 'first-null?', %(accl, accr))";
			(
			+ "applicatives %(foldr1; map1)" $dep_from "'list-rest', %accr";
			+ "operative '$let'"
			),
			(
			+ "applicative 'unfoldable?'" $dep_from "'first-null?', %accl";
			+ "applicatives ('map-reverse'; 'for-each-ltr')"
			),
			+ "applicatives ('string-empty?'; 'env-empty?')"
		),
		/ %YCLib.Host $=
		(
			/ "returned pipe closing code along with string result"
				@ "function %FetchCommandOutput";
			/ $forced DLDI "function %FetchCachedCommandResult"
		)
	),
	/ %Tools $=
	(
		* "normal line begins with '++' or '-- 'in contents wrongly recognized \
			as special line to indicate source path" @ %RevisionPatcher.Main
			$since b565,
		+ "applicative %system-get" @ "loading forms"
			@ "NPL REPL context initialization" @ %SHBuild.Main ^ $dep_from
			("%FetchCommandOutput" @ %YCLib.Host),
		/ %Scripts $=
		(
			/ "stage 2 YSLib self-hosting" ^ "NPL" $=
			(
				+ $impl "NPL common library" @ "%SHBuild-common-toolchain.sh"
					$dep_from %(SHBuild, YFramework.NPL.Dependency);
				/ "switched NPL" @ "SHBuild-YSLib-common.sh";
				/ $comp "command shown on error by exception thrown from NPL \
					scripts",
					// It would be from 'system-check' routine called from \
						%SHBuild.
				/ $comp "probable more occurances like 'Cygwin WARNING' about \
					'compute FAST_CWD pointer' since the shell is now \
					reentered by %std::system call rather than 'bash'"
					// The illustrated warning were once in Windows 10 Insider \
						rs2 branch, but not in Windows 10 1703. However, other \
						bug introduced during rs2 like CJK mojibake in console \
						may remain.
			);
			/ $forced DLDI "simplified script invocation"
				@ "%(SHBuild-YSLib-debug.sh, SHBuild-YSLib.sh)"
		)
	)
),

b790
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				* "missing applicative %wrap for '$cond' and alternative \
					definition of '$sequence'" $since b789,
				* "missing applicative %head for '$cond'" $since b789,
				+ "operatives ('$and?', '$defw!')",
					// For completeness.
				+ "applicative 'symbol->string'",
					// Ditto.
				/ DLDI "compressed some NPL source text",
				* "compared equality instead of testing containing relationship"
					@ "applicative 'string-contains-ci?'" $orig
					(@ "applicative 'str-contains-ci?'" $since b759),
				/ "applicative %head" => "%first",
					// Replacement of traditional %car; to be consistent with \
						SRFI-1, Racket, Clojure, etc.
				+ "applicative %rest",
					// Replacement of traditional %cdr; to be consistent with \
						Racket, Clojure, etc.
				// Applicative 'list*' is not renamed as SRFI-1 name 'cons*', \
					to stay consistent with Kernel, Racket and Common Lisp.
				/ DLDI "removed redundant '(', ')'"
					@ "combiners (%apply, '$cond')",
				/ "allowed modification to the parent environment" $=
				(
					// This behaves same to Kernel and Scheme dialects, also \
						more convenient.
					/ $forced $impl @ "operative '$vau'" $dep_from
						("function %Forms::Vau" @ %NPLA1),
					/ $comp @ "operatove '$lambda'" $dep_from
						("function %Forms::Lambda" @ %NPLA1)
				)
			),
			/ %NPLA $=
			(
				* "missing '.'" @ "end" @ "warning message"
					@ "function %CheckReducible" $since b734,
				- $revert(b779) "function %AppendTerm" $dep_from
					("%Forms::Cons" @ %NPLA1)
					// Too dangerous to be misused.
			),
			/ @ "namespace %Forms" @ %NPLA1 $=
			(
				* "wrong result caused by silently failed appending children \
					when prefixed index is greater than count of children"
					@ "function %Cons" $since b779
					// This can be occurred for %cons in %eval form.
				$= (/ $impl ^ ($dep_from "%GetLastIndexOf"
					@ %YSLib.Core.ValueNode) ~ ("%AppendTerm" @ %NPLA)),
				(
				/ "always avoided copy of environment" @ "functions %(Lambda, \
					Vau, VauWithEnvironment)";
				- "redundant last parameter"
					@ "functions %(Vau, VauWithEnvironment)"
				),
				(
				/ @ "function %MatchParameter" $=
				(
					- "check for empty argument list for non-empty parameter \
						list";
					/ $comp "threw %ArityMismatch for case of empty argument \
						list for non-empty parameter list"
						~ "%ParameterMismatch"
						// There may be a little more overhead on exception, \
							but the overall branch overhead would be lower.
					* $comp "%ParameterMismatch threw for parameter list with \
						single variable parameter and empty argument list"
						$since b777
				),
				/ "functions %(Lambda, Vau, VauWithEnvironment)" $=
				(
					/ $revert_ex(b786) "binding merged to function \
						%BindParameter",
						// Now both passing parameter and definition use same \
							binding implementation, which is simpler than \
							before.
					/ DLDI "simplified vau handler constructors",
					- DLDI "self reference check assertion" @ "call",
					/ "differentiated shared and weakly shared environment \
						 count" @ "trace message";
					/ $forced "differentiated owning environment" $dep_from
						"%MatchParameter"
						// Otherwise it would cause cyclic references.
				);
				/ "reduced shared context on calling"
				)
			)
		),
		+ "2 functions %GetLastIndexOf" @ %YSLib.Core.ValueNode
			$dep_from %YBase.YStandardEx.Iterator
	),
	/ "missing cv-qualifier for cv-qualified base iterator"
		@ "member type %pointer" @ "class template %transformed_iterator"
		@ %YBase.YStandardEx.Iterator $since b667
),

b789
(
	/ %YFramework $=
	(
		+ "metafunction %HolerFromPointer" @ %YSLib.Core.YObject,
		/ %NPL $=
		(
			/ @ "namespace %Forms" @ %NPLA1 $=
			(
				(
				/ %BindParameter" ^ "binding leaf with copy initialization"
					~ "binding with elision";
				/ $comp "functions %(DefineLazy, DefineWithNoRecursion, \
					DefineWithRecursion)" ^ "binding with copy initialization"
					~ "binding with elision",
					// This is safer and better consistent with vau handlers \
						for definitions. Otherwise, %EvaluateIdentifier would \
						be too easy to introducing dangling references (though \
						easy to work around by explicit copy).
				),
				/ DLDI "simplified function %DefineWithRecursion" ^ $dep_from
					("%HolerFromPointer" @ %YSLib.Core.YObject),
				(
				/ "parent environment" @ "vau handler" ^ $dep_from
					("%Environment::ParentPtr" @ NPLA) ~ "reserved identifier";
				/ $forced "simplified parent environment access"
					@ "function %ResolveName"
				)
			),
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				+ "applicatives %('null?', cons, 'make-environment'; apply)",
				/ "applicative %not" => 'not?',
				+ "object %inert",
				(
				+ "operative '$defrec!'";
				(
				+ "applicative 'list*'";
				+ "operatives ('$when', '$unless'))"
				)
				),
				(
				+ "applicatives ('get-current-environment', \
					'copy-environment')";
				+ "operative '$sequence',
				+ "operative '$cond'" $dep_from "%inert"
				),
				+ "operative '$deflazy!'"
			),
			/ "type" @ "%Environment::ParentPtr" @ %NPLA -> "%ValueObject"
				~ "%weak_ptr<Environment>"
		)
	),
	* DD "'\ingroup' command" @ "Doxygen comments" @ "metafunction \
		%enable_if_transparent_t" @ %YBase.YStandardEx.Functor $since b679
),

b788
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ $revert_ex(b787) "formal parameter tree binding"
						@ "vau handler, recursive thunk" $dep_from
						("%Environment" @ %NPLA) ^ "%ValueObject::MakeMoveCopy"
						~ "%ValueObject::CopyMove",
						// For safety consideration. Now implicit captured \
							reference would not cause dangling references.
					(
					/ $forced $revert_ex(b787) "exposed environment reference \
						in host as %shared_ptr<Environment> or \
						%weak_ptr<Environment> (defaulted to weak pointer) \
						instead of object reference on %Envrionment"
						@ "functions %(VauWithEnvironment, Eval, \
						GetCurrentEnvironment), vau handler"
						$dep_from ("%(Environment, ContextNode)" @ %NPLA);
					* $comp "environment leaked by cyclic references" $since
						b787
					)
				),
				* $re_add(b785) DLDI "missing 'ystdex::' before 'sfmt'"
					@ "argument of exception object constructor"
					@ "function %ResolveName" $since b780,
				(
				/ $forced DLDI "function %ResolveName" $dep_from %NPLA;
				/ "weak pointer binding of parent" @ "functions %(ResolveName, \
					Lambda, Vau), vau handler" ^ $dep
					(("%Environment" ~ "%ContextNode") @ %NPLA)
					$= (/ $impl ^ $dep_from
						"%ContextNode::(ShareRecord, WeakenRecord)" @ %NPLA)
				)
			),
			/ %NPLA $=
			(
				+ 'using YSLib::enable_shared_from_this;',
				+ 'using YSLib::make_shared;',
				+ 'using YSLib::make_weak;',
				+ 'using YSLib::observer_ptr;',
				+ 'using YSLib::shared_ptr;',
				+ 'using YSLib::weak_ptr;',
				/ $lib "parameter type" @ "constructor#2 %NPLException"
					-> 'string_view' ~ 'YSLib::string_view',
				(
				/ @ "class %Environment" $=
				(
					+ "base %enable_shared_from_this<Environment>"
						$dep_from 'using YSLib::enable_shared_from_this;',
					(
					+ "alias %BindingMap";
					/ "private shared binding map, function %GetMapRef"
						-> "data member 'mutable BindingMap Bindings{};'";
					(
					/ $forced "defaulted default constructor";
					/ 'DefDeCopyCtorAssignment(Environment)'
						-> 'DefDeCopyMoveCtorAssignment(Environment)'
					),
					/ $forced DLDI "functions %(GetMapRef, operator==)",
					/ DLDI "simplified functions %(Define, Redefine, \
						Remove)"
					)
				);
				/ @ "class %ContextNode" $=
				(
					(
					/ "data member %Record" -> "private shared pointer data \
						member for environment";
					/ $forced "constructor template" -> "non-template \
						constructor with shared pointer parameter",
					(
					+ "friend function %swap",
					/ $forced "defaulted move constructor"
						-> "non-defaulted move constructor" ^ "%swap"
						// To keep nonnull invariant on private pointer.
					)
					);
					/ $forced "function %GetBindingsRef",
					+ "functions %(ShareRecord; WeakenRecord)"
				),
				/ "parameters" @ "function templates %(LookupName, \
					%FetchValue, FetchValuePtr)" ^ "%Environment"
					~ "%ContextNode"
				),
			),
			/ $re_ex(b787) $forced DLDI "function %LoadNPLContextForSHBuild"
				@ %Dependency $dep_from %NPLA
		),
		+ "function %GetHolderPtr" @ "class template %PointerHolder"
			@ %YSLib.Core.YObject
	),
	/ $re_ex(b787) $forced DLDI %SHBuild.Main $dep_from %YFramework.NPL.NPLA
),

b787
(
	+ "function template %copy_or_move" @ %YBase.YStandardEx.Utilities,
	/ %YFramework $=
	(
		/ %YSLib.Core $=
		(
			+ "function %CopyMove" @ "class %ValueObject" @ %YObject
				^ $dep_from ("%copy_or_move" @ %YBase.YStandardEx.Utilities),
			+ "(static function template %CreateRecursively, function \
				%CreateWith) for non-const container" @ "class %ValueNode"
				@ %ValueNode
		),
		/ %NPL $=
		(
			/ @ "namespace %Forms" @ %NPLA1 $=
			(
				/ @ "class templates %(UnaryExpansion, UnaryAsExpansion, \
					BinaryExpansion, BinaryAsExpansion)" $=
				(
					+ "constructor";
					* "missing %operator!=" $since b773
						$= (+ "friend function %operator!="
							^ "%ystdex::examiners::equal_examiner")
				),
				(
				/ DLDI "all function templates %(RegisterStrictUnary, \
					RegisterStrictBinary)" ^ $dep_from ("constructor"
					@ "class templates %(UnaryExpansion, UnaryAsExpansion, \
					BinaryExpansion, BinaryAsExpansion)")
					~ "brace-initializer",
				/ DLDI "functions %(DefineWithRecursion, Undefine, Vau, \
					VauWithEnvironment, Lambda, SetupTraceDepth, BindParameter)"
					$dep_from ("%(RemoveIdentifier, ContextNode)" @ %NPLA);
				/ "supported environment shared passing directly",
				/ "first-class environment type" -> "%Environment"
					~ "%ContextNode" $=
				(
					+ "2nd parameter of type 'ContextNode&'"
						@ "function %Eval",
					/ $impl "vau handler, functions %(VauWithEnvironment, \
						Eval, GetCurrentEnvironment)"
				),
				(
				/ "formal parameter tree binding" @ "vau handler, \
					recursive thunk" $dep_from ("%Environment" @ %NPLA)
					^ $dep_from ("%ValueObject::CopyMove"
					@ %YSLib.Core.YObject);
					// %ReduceCheckedClosure is also in the scope. It \
						needs to copy or move the target, not the \
						reference, to keep the lifetime sane, as required \
						by %EvaluateIdentifier.
				/ $comp $re_ex(b786)
					@ "binding for vau handler prameter tree" $=
				(
					* $revert_ex(b785) "inconsistency between list and \
						leaf for traling sequence elements" $since b785,
					* "inconsistency between non trailing sequence \
						elements and traling sequence elements" $since b777
				)
				)
			),
			/ %NPLA $=
			(
				+ $re_add(b785) DD "'\warning' directive" @ "Doxygen comments"
					@ "all functions %LiftTermRef",
				(
				+ "class %Environment";
				/ "type" @ "data member %Environment" @ "class %ContextNode"
					-> "%Record",
				/ $forced "functions %(DefineValue, RedefineValue, \
					RemoveIdentifier)" -> "member functions %(Define, \
					Redefine, Remove)" @ "class %Environment",
				+ "member function %ContextNode::GetBindingsRef()",
				/ $forced DLDI "function templates (%InvokePasses#2, all 2 \
					%LookupName), functions %(RegisterContextHandler, \
					RegisterLiteralHandler)"
					^ $dep_from "%ContextNode::GetBindingsRef()"
				)
			),
			/ $forced DLDI "function %LoadNPLContextForSHBuild" @ %Dependency
				$dep_from ("%DefineValue" @ %NPLA)
		)
	),
	/ $forced DLDI %SHBuild.Main $dep_from
		("%DefineValue" @ %YFramework.NPL.NPLA)
),

b786
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "returned result of %bool type" @ "function %RemoveIdentifier"
				@ %NPLA,
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					+ "function %Undefine" $dep_from %NPLA1,
					(
					- "functions %(DefineOrSet; DefineOrSetFor)";
					- "function template %ReduceWithModifier";
					- "all 2 functions %ExtractModifier"
					),
					+ "indirect assertion by calling %RetainN"
						@ "functions %(If, DefineLazy, DefineWithNoRecursion, \
						DefineWithRecursion)",
						// To be consistent.
					+ "functions %(StringToSymbol, SymbolToString)",
					/ "formal parameter tree binding" $=
					(
						/ "allowed modification of bound terms"
							@ "2nd parameter type" @ "function %MatchParameter",
						+ "function template %CheckParameterLeafToken";
						/ $lib $impl "vau handlers" ^ "separated internal \
							handling of binding parameters"
							^ "%CheckParameterLeafToken" ~ "%BindParameter",
						/ DLI "function %DefineWithRecursion"
							^ "%CheckParameterLeafToken" ~ "%BindParameterLeaf";
							// The check is now performed a little earlier. If \
								it fails, no binding has to be established. 
						/ "merged %BindParameterLeaf" -> "%BindParameter"
							^ "direct elision, %CheckParameterLeafToken"
							~ ("%TermNode::CreateRecursively",
							'&ValueObject::MakeMoveCopy', "%MakeMoveCopy");
						/ $comp @ "function %BindParameter" $=
						(
							* $revert_ex(b785) "inconsistency between list and \
								leaf for traling sequence elements" $since b785,
							* "inconsistency between non trailing sequence \
								elements and traling sequence elements" $since
								b777
							// This is in schedule to be done for the vau \
								handler internal implementation.
						)
					),
					* DD "wrong '\exception' command" @ "functions %(Lambda, \
						Vau, VauWithEnvironment)" $mismatch $since b769
				)
			),
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				(
				+ "operative '$def!'",
				+ "applicatives %(eval, unwrap, list)";
				+ "operatives ('$set!', '$defv!')",
				(
				+ "operative '$defl!'";
				/ DLDI "definitions" ^ ('$def!', '$defl!') ~ '$define!';
				- $revert(b760) "operatives ('$define', '$set')"
				)
				),
				+ "applicative 'symbol->string'" ^ $dep_from
					("function %SymbolToString" @ %NPLA1)
			)
		),
		/ %YSLib.Core.YObject $=
		(
			+ "static function %size_t" @ "trait %PointerHolderTraits",
			(
			/ "abstract method %OwnsUnique" @ "interface %IValueHolder"
				-> "%OwnsCount";
			/ $forced "overrider %OwnsUnique"
				@ "class templates %(ValueHolder, RefHolder)" -> "%OwnsCount",
			/ $forced "overrider %OwnsUnique"
				@ "class template %PointerHolder, RefHolder"
				-> "%OwnsCount" ^ $dep_from "%PointerHolderTraits";
			/ @ "class %ValueObject" $=
			(
				+ "function %OwnsCount",
				/ $forced $impl "member function %ValueObject::OwnsUnique"
					^ $dep_from "%OwnsCount"
			)
			)
		)
	),
	/ $dev "readonly local variable in functions" ^ 'declare -r'
		~ 'local' $effective @ ("%(SHBuild-common.sh, \
		GenerateProject.sh)" @ %Scripts, "%install-sysroot.sh") @ %Tools
),

b785
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ @ "function %VauWithEnvironment" $=
					(
						* "target context object wrongly moved even for non \
							destructive vau handlers" $since b781,
						(
						/ "copyied non environment components of context on \
							moving" @ "initialization" @ "vau handler";
						* $comp "crash caused by reduction relying on passes \
							as dangling reference to context components after \
							being moved away by the vau handler" $since b781
						)
					),
					+ "type name output" @ "message on matching failure"
						@ "function %MatchParameter",
					/ "bound values" @ "function %BindParameter"
						^ (('&ValueObject::MakeMoveCopy', "%MakeMoveCopy")
						$dep_from %YSLib.Core.YObject)
						~ "%(IValueHolder::Move, ValueObject::MakeIndirect)",
						// Now function parameters and definition targets are \
							bound with value by default. Unsafe memory \
							reference needs some explicitly notation to make \
							%ReferenceValue called.
					+ "functions %(Wrap, WrapOnce, Unwrap)"
				),
				* DLDI "missing 'ystdex::' before 'sfmt'" @ "argument of \
					exception object constructor" @ "function %ReduceCombined"
					$since b774,
				* "symbol reduction result evaluated again"
					@ "function %EvaluateIdentifier" $since b767,
					// See $2017-02 @ %Documentation::Workflow::Annual2017.
				/ "function %ReduceCheckedClosure transferred list children"
					^ (('&ValueObject::MakeMoveCopy', "%MakeMoveCopy") $dep_from
					%YSLib.Core.YObject) ~ "%IValueHolder::Copy"
			),
			+ DD "'\warning' command" @ "Doxygen comments"
				@ "function %ReferenceValue" @ %NPLA
		),
		/ %YSLib.Core.YObject $=
		(
			+ "static function template %CreateRecursively";
			/ DLDI "simplified static function %CreateRecursively",
			+ "function template %CreateWith"
		)
	)
),

b784
(
	/ %YBase $=
	(
		/ %YStandardEx.Memory $=
		(
			+ "templates %(owns_unique, owns_unique_nonnull) for \
				%std::weak_ptr instances",
			+ "unary type trait %is_sharing with 2 specializations",
			+ "4 overloded function templates %(owns_any, owns_nonnull)"
		),
		/ %YDefinition $=
		(
			+ '#define YB_ALLOCATOR __declspec(allocator)'
				@ '#if YB_IMPL_MSCPP >= 1900 && !defined(__EDG__)'
				// This is supported by Microsoft VC++ 2015 memory profiling \
					functionality. While radically different to \
					'__attribute__((__malloc__))' of GCC, it is the same in \
					aspect of semantic conditions.
			- DLDI ' ' @ "all '__attribute__ ('"
		)
	),
	/ %YFramework $=
	(
		+ ('using ystdex::owns_any;', 'using ystdex::owns_nonnull;')
			@ "inline namespace %references" @ %YCLib.Reference $dep_from
			%YBase.YStandardEx.Memory,
		/ %YSLib $=
		(
			/ @ "namespace %YSLib" @ %Adaptor.YAdaptor $dep_from
				%YCLib.Reference $=
			(
				+ 'using platform::owns_any;',
				+ 'using platform::owns_nonnull;'
			),
			/ %Core.YObject $=
			(
				+ "traits template %PointerHolderTraits" ^ $dep_from
					("%ystdex::is_sharing" @ %YBase.YStandardEx.Memory,
					"%owns_nonnull" @ %Adaptor.YAdaptor);
				/ "class template %PointerHolder" $=
				(
					(
					/ "2nd template parameter" -> "traits parameter with \
						default argument for %unique_ptr instance"
						^ "%PointerHolderTraits";
					/ $comp ^ "%unique_ptr" ~ "%std::unique_ptr"
					),
					+ "alias %traits";
					/ DLDI "aliases %(holder_pointer, pointer, shared), member \
						functions %(get, owns_unique)" ^ "%PointerHolderTraits",
					* "ill-formed functions %(Create, Equals, type) for \
						%weak_ptr instances" $since b783
				)
			)
		),
		/ %NPL.NPLA1 $=
		(
			/ @ "function %ReduceCheckedClosure" $=
			(
				/ $revert_ex(b777) "avoided unconditioanlly copy elision" $=
				(
					/ $impl $revert(b777) "data member %Value of term node \
						moved" ^ "%ValueNode::MakeMoveCopy",
					/ $impl "children nodes moved"
						^ 'CreateWith(IValueHolder::Copy)'
				);
				* $comp "invalid memory access for rewritten result \
					referencing local context" $since b777
					// Essentially the downward funarg problem, again.
			),
			/ "function %Forms::DefineWithRecursion supported recursive \
				function names with proper types"
				// Recursive function name is weakly referenced since it \
					has to be shared and the object it points to cannot be \
					determined when introduced Now derivation of 'list*' as \
					Kenerl can work as expected, when also applied \
					%ReduceCheckedClosure fix.
		),
		/ DLB "allowed non %YCL_Win32 or %YCL_Android hosted platforms"
			@ "constructor %DSApplication" @ %'Helper_(DS)'.DSMain
			// Now YFramework in platform such as Linux can be built. However, \
				related GUI functionality are not guaranteed work, since XCB \
				support is not complete.
	)
),

b783
(
	+ "function templates %(share_copy, share_forward, share_move)"
		@ %YBase.YStandardEx.Memory,
	/ %YFramework $=
	(
		+ ('using ystdex::share_copy;', 'using ystdex::share_forward;',
			'using ystdex::share_move;') @ "inline namespace %references"
			@ %YCLib.Reference $dep_from %YBase.YStandardEx.Memory,
		/ %YSLib $=
		(
			/ @ "namespace %YSLib" @ %Adaptor.YAdaptor $=
			(
				+ 'using platform::owns_unique;',
				+ 'using platform::owns_unique_nonnull;',
				+ ('using platform::share_copy;',
					'using platform::share_forward;',
					'using platform::share_move;') $dep_from %YCLib.Reference
			),
			/ %Core.YObject $=
			(
				+ "constructor for in-place initialization of holder",
					@ "class %YObject",
				/ $doc "allowed shared ownership"
					@ "enum %IValueHolder::Creation::Copy",
				/ @ "class template %PointerHolder" $=
				(
					* $comp "missing declarations for %owns_unique"
						@ "function %OwnsUnique" $dep_from %Adaptor.YAdaptor
						$since b759;
					/ "supported %shared_ptr instances as holder pointer" $=
					(
						/ "type %pointer" ^ "detection from result type of \
							member %get" ~ "%holder_pointer::pointer",
						/ $dev "restricted holder pointer type"
							^ "%ystdex::is_decayed" ~ "%std::is_object"
						(
						+ 'explicit' @ "constructor with parameter type \
							'pointer'";
						+ "constructor with parameter type \
							'const holder_pointer&'",
						+ "constructor with parameter type 'holder_pointer&&'",
						),
						/ ("copied directly if holder pointer can be copied"
							~ "deep copying with \
							%ystdex::clone_monomorphic_ptr")
							@ "copy constructor",
						(
							+ "type %shared";
							+ "shared creation" @ "function %Create" ^ $dep_from
								"%IValueHolder::Creation::Copy"
						)
					)
				)
			),
			/ DLDI "simplified function template %Animate"
				@ %UI.Animation ^ "%share_copy" @ %Adaptor.YAdaptor
		)
		/ %NPL.NPLA1 $=
		(
			* $lib $impl "missing 'YSLib::' before 'Deref'"
				@ "function templates %(CallBinary, CallBinaryAs, \
				CallBinaryFold)" @ "namespace %Forms" $since b758,
			/ DLDI "simplified functions (%DefineWithRecursion, Lambda, Vau, \
				VauWithEnvironment)" @ "namespace %Forms" ^ $dep_from
				("%(share_copy, share_move)" @ %YSLib.Adaptor.YAdaptor)
		)
	),
	/ DLB "avoided %Win32 only features by conditional inclusion" @ %YDE
		$effective @ %(Clock.Main, ImageBrowser.ImageControl)
		// Unused features like clipboards are silently ignored. This allows \
			YDE built in %Linux, although additional patches on %YFramework \
			are still needed and the resulted GUI programs mostly do not work.
),

b782
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA $=
			(
				/ $dev $lib "order of some declarations";
					// Reordered declarations are more easily categorized, and \
						more importantly, allowing adding members with types \
						previously declared afterward to new %ContextNode type.
				/ "alias declaration %ContextNode" -> "class name declaration; \
					class definition with passes data members";
					// Now %ContextNode is not same to %TermNode in sense of \
						type equivalence of C++. The environment is still of \
						type %ValueNode, though.
				/ $forced DLDI "functions %(RegisterContextHandler, \
					RegisterLiteralHandler, DefineValue, RedefineValue, \
					RemoveIdentifier), all 2 function templates \
					%LookupName, function template %InvokePasses#2",
				/ "return type" @ "function %TermToNamePtr"
					-> 'observer_ptr<const TokenValue>'
					~ 'observer_ptr<const string>',
					// To be more consistent under the new order of \
						declarations.
				- $revert(b750)
					"all (functions, function template) %AdjustTermValuePtr"
			),
			/ @ %NPLA1 $=
			(
				(
				/ $forced DLDI "functions %(AccessGuardPassesRef, \
					AccessLeafPassesRef, AccessListPassesRef, \
					AccessLiteralPassesRef, SetupTraceDepth, \
					Forms::(BindParameter, BindParameterLeaf, \
					DefineWithRecursion, Lambda, Vau, VauWithEnvironment))"
					$dep_from ("%ContextNode" @ %NPLA);
				/ DLI "performance improved for reduction calls",
					// About a factor of 5 in Fibonacci test gained by \
						reducing named access of passes.
				- $impl "reserved name for passes access"
				),
				/ @ "namespace %Forms" $=
				(
					/ $forced DLDI "function %ExtractModifier" $dep_from
						("%TermToNode" @ %NPLA),
					/ $dep_from ("%ContextNode" @ %NPLA) $=
					(
						/ $forced DLDI "local context initialization"
							@ "vau handlers";
						/ $comp "copied passes on context passing"
					),
					* "invalid indirection through dangling reference to \
						function owned by static environment on call from \
						recursive definition introduced by function \
						%DefineWithRecursion" $since b780
				)
			)
		),
		* $doc "wrong '\t'" @ "'\pre' command" @ "Doxygen comment"
			@ "member function %c::operator[]"
			@ %YSLib.Service.TextManager $since b616
	)
),

b781
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ @ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ @ ("function %BindParameter"; $comp "vau handler") $=
					(
						/ "allowed body to be empty",
							// Previously only vau handler accept empty body.
						+ "3rd parameter 'bool' to allow moving captured \
							static context" @ "function %Vau"
					),
					+ "function %VauWithEnvironment"
				),
				* $comp "assertion failed when previous object of unexpected \
					target type existed" @ "functions %(SetupTraceDepth, \
					AccessGuardPassesRef, AccessLeafPassesRef, \
					AccessListPassesRef, AccessLiteralPassesRef)" $since b685
					$dep_from ("%ValueNode::Place" @ %YSLib.Core.ValueNode)
			),
			/ $forced DLDI "function %LoadNPLContextForSHBuild" $dep_from
				("%Vau" @ %NPLA1)
		),
		/ DLDI "simplified member function %InputManager::DispatchInput"
			@ %Helper.InputManager ^ "%ystdex::erase_left",
		/ "class %ValueNode" @ %YSLib.Core.ValueNode $=
		(
			(
			+ "function template %PlaceValue";
			/ "function template %PlaceUnchecked",
			/ DLDI "simplified function template %Place"
			),
			/ ("checked access" ^ "%ValueObject::Access"
				~ "%ValueObject::GetObject") @ "function template %Place"
		)
	),
	/ %YBase.YStandardEx.String $=
	(
		* DD "wrong comment" @ "function templates %(erase_left, erase_right)"
			$since b592,
		/ @ "functions %(erase_left, erase_right)" $=
		(
			+ $impl "duplicated underlying algorithms dedicated for %ltrim";
			/ DLDI "%ltrim" ^ "new algorithms";
			/ DLDI "switched %erase_left underlying algorithms",
			+ $impl "contraints to avoid trailing position"
				@ "underlying algorithms for %erase_left";
			/ DLI "removed redundant comparison for trailing position",
			* $comp "wrong assert rejecting position of string size"
				@ "%erase_left" $since b659
		),
		* "wrong greedy erasure" @ "function template %erase_left without \
			positional parameter" $since b592
			$= (/ $impl ^ "%find_first_of" ~ "%find_last_of")
	),
	* DI "missing 'std::' before 'stoul'" @ %Tools.RevisionPatcher.Main $since
		b565
),

b780
(
	- $dev $revert(b767) "all 2 cases to suppress %ystdex::mapped_set leak"
		@ "%DrMemory-YSLib-suppress.txt" @ %Tools,
		// The leaks were caused by cyclic reference in swapping subnode to \
			its parent, fixed in b778.
	/ %YFramework.NPL $=
	(
		/ @ %NPLA1 $=
		(
			/ @ "namespace %Forms" $=
			(
				(
				+ "function %MatchParameter";
				/ DLDI "function %BindParameter" ^ "%MatchParameter";
				+ $comp "trailing sequence support by different forms '.name' \
					in parameter",
					// This supports binding multiple traling sequences at once.
				* "missing check of %TokenValue type for the last subterm of \
					binding target" $since b777
				),
				+ "functions %(DefineLazy, DefineWithNoRecursion, \
					DefineWithRecursion)",
				* "spelling error" @ "exception message"
					@ "function %ResolveName" $since b779,
				- "tracing messages for (context, formal) parameter"
					@ ("function %BindParameter"; $comp "vau handler")
					// Tracing can be derived in user code.
			)
		),
		/ DD %NPLA $=
		(
			+ "'\exception' command" @ "Doxygen comment"
				@ "functions with %std::function instance parameters",
			+ "'\invariant' command" @ "Doxygen comment"
				@ "alias declaration %TokenValue"
		)
	)
),

b779
(
	/ %YBase.YStandardEx $=
	(
		+ "function template %make_weak" @ %Memory,
		/ "relaxed state type requirements" @ "class template %one_shot"
			@ %Functional
			$= (- $dev "static assertion for non-throwing default construction \
				state type"),
		/ ("function template %unique_guard" -> "function templates \
			%(unique_guard, unique_state_guard)") @ %ScopeGuard $=
		(
			* "invalid argument 'true' passed for initialization of guard"
				$since b686;
			+ "trailing parameters support as constructor of %one_shot \
				instances",
			/ "template parameter order"
		)
	),
	/ %YFramework $=
	(
		+ 'using ystdex::make_weak;' @ "inline namespace %references"
			@ %YCLib.Reference $dep_from %YBase.YStandardEx.Memory,
		+ 'using platform::make_weak;' @ %YSLib.Adaptor.YAdaptor $dep_from
			%YCLib,
		/ %NPL $=
		(
			/ @ %NPLA1 $=
			(
				+ "support of %weak_ptr contexts" @ "function %ResoveName",
					// This allows detection of wrong use of environment \
						capture rather than indirection through danling \
						references.
				/ @ "namespace %Forms" $=
				(
					/ "parent context reference" @ ("function %BindParameter";
						$comp "vau handler") ^ "%weak_ptr" ~ "%shared_ptr",
					+ "functions %(IsSymbol, Cons)"
				)
			),
		),
		/ %NPLA $=
		(
			* "changed name of terms" @ "functions %(LiftTerm; LiftFirst)"
				$since b778
				// This was once unspecified but it is really unexpected to \
					have the change of the name of term nodes. Now it also \
					avoid breaking the key in associative container and \
					excessive object creation of %Value.
			+ "function %AppendTerm"
		)
	)
),

b778
(
	/ %YFramework $=
	(
		- DLD "redundant 'YB_ATTR(returns_nonnnull)'"
			@ "unused allocation declarations" @ %YSLib.Adaptor.YNew,
		/ %NPL $=
		(
			/ %NPLA $=
			(
				(
				* "invalid referencing subnodes" @ "functions %LiftTerm" $since
					b745
				* $comp "memory leak caused by circular reference of subnodes"
					@ "functions %(LiftTerm, LiftFirst)" $since b745
				),
				* "possible invalid referencing subnodes value"
					@ "functions %(DefineValue, RedefineValue)" $since b731
			),
			/ @ %NPLA1 $=
			(
				* $comp "memory leak caused by circular reference of subnodes"
					@ "function %Reduce" $since b745 $dep_from
					("%LiftFirst" @ %NPLA),
					// This can be very serious, esp. in recursion calls.
				/ DLDI "function %TransformForSeparator" ^ "%ValueNode::emplace"
					~ "%ValueNode::operator+=",
				/ DLDI "function %ResolveName" ^ "%ValueObject::GetType"
			),
			- DLI "%Validate call" @ "functions %Analyze" @ %SContext
				// This can improve performance a little.
		),
		/ @ "class %ValueNode" %YSLib.Core.ValueNode $=
		(
			+ DD "'\warning' commands" @ "Doxygen comments"
				@ "member functions %(SetChildren, SetContent)",
			/ DLI "avoided unnecessary element construction when there existed \
				already a subnode with equivalent key" @ "all 4 functions \
				%AddChild" ^ "%(try_emplace, try_emplace_hint)"
				~ "%(emplace, emplace_hint)",
			* $impl "wrong insertion target"
				@ "function template %SplitChildren" $since b680,
			/ "merged static function %AddValueTo" -> "function %AddValue",
				// To be consistent with %AddChild.
			+ "function %AddValue with hint" ^ "%try_emplace_hint"
				// Ditto.
		)
	),
	* "missing 'ynothrow'" @ "function %deallocate" @ "class template \
		%class_allocator" @ %YBase.YStandardEx.Memory $since b746,
	* "'!' for negation in test conditions clashed with bash history expansion"
		@ "%SHBuild-common-options.sh" @ %Tools $since b561
),

b777
(
	/ %YFramework.NPL $=
	(
		/ @ %NPLA1 $=
		(
			+ "support for '...' binding a list of variadic trailing elements \
				in the operand" @ ("function %BindParameter";
				$comp "vau handler") @ "namespace %Forms",
			(
			+ "function %ResolveName with parent context lookup support";
			/ @ "function %EvaluateIdentifier" $=
			(
				/ "resolved name" ^ "%ResolveName" ~ "%LookupName";
				* $doc "wrong description" $mismatch $since b768
			),
			/ "functions %(InvokeGuard, InvokeLeaf, InvokeList, \
				InvokeLiteral) supported parent context lookup";
				// This actual make it slower (in a factor about 2) \
					compared to only fixed special name being copied in \
					static context binding. However this simplified the \
					implementation, and the performance regression can be \
					fixed later by separated memorization passes.
			/ DLI "simplified static context binding" @ "vau handlers"
				// Since the parent pointer was already set, it sipmly \
					removes redundant copies. This boosts performance a \
					lot (in a typical naive Fibonacci recursion call \
					test, it can be a factor of 10).
			),
			/ "forced elision on return" @ "function %ReduceCheckedClosure"
				^ "%ValueNode::SetContent" ~ "%ValueObject::MakeMoveCopy"
		),
		/ %NPLA $=
		(
			+ "function template %InvokePasses with node pointer parameter";
			/ DLDI "simplified %InvokePasses with name parameter";
			- 'using YSLib::AccessChildPtr;'
		)
	),
	/ @ "class template %mapped_set" @ %YBase.YStandardEx.Set $=
	(
		* "constructor with rvalue reference and allocator parameters"
			 $since b665,
		/ DLI "copy %operator=" ^ "underlying %operator=" ~ "%swap"
			// To reuse underyling nodes so less nodes need to be copied, if \
				possible.
	)
),

b776
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "form %'$or'" => '$or?' @ "loading forms"
				@ "function %LoadNPLContextForSHBuild" @ %Dependency,
			/ @ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					+ "2 functions %BindParameterLeaf";
					/ @ "function %BindParameter"
					(
					/ $impl "simplified" ^ "%BindParameterLeaf";
					* $comp "wrong term name added on binding leaf nodes"
						$since b774,
					/ $comp "allowed rebinding for duplicated symbols to be \
						bound" ~ "throwing %InvalidSyntax"
						// See $2017-03 @ %Documentation::Workflow::Annual2017.
					),
					(
					/ "lifted context parameter as 1st parameter"
						@ "function %BindParameter";
						// To be consistent with %BindParameterLeaf.
					/ $forced DLDI "vau handler"
					),
					/ DLDI "simplified function %ReduceCheckedClosure"
						^ $dep_from ("%YSLib::ValueNode::SetChildren"
						@ %YSLib.Core.ValueNode)
				),
			)
		),
		/ $re_add(b774) @ "class %ValueNode" @ %YSLib.Core.ValueNode $=
		(
			/ $re_add(b774) "avoiding copy"
			(
				/ "function %SetContent with 2 parameters"
					-> "function template";
				/ "function %ClearTo" -> "2 overloads avoiding copy on move"
			),
			+ "function %SetChildren with node parameter"
		)
	)
),

b775
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ @ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ "vau handler" $=
					(
						/ $term "log message",
						+ $lib $design "assertion to exclude self reference of \
							static context",
						* "shared context destroyed too early when it is \
							captured by vau handlers in subterms" $orig
							(@ "function %Lambda" $since b735)
					),
					- $revert(b766) "function %Apply"
						// The applicative 'apply' can be derived in more \
							flexible ways (e.g. with environment argument). \
							The list passes should also better be followed \
							like it in %Reduce call. Using derivation like \
							Kernel also provides unwrapping check for \
							applicatives directly.
				)
			),
			(
			/ "categoried token consisted with '+-' to symbols"
				@ "function %IsNPLAExtendedLiteral" @ %NPLA;
			/ %Dependency $=
			(
				/ "allowed symbols consisted with '+-'"
					@ "function %LoadNPLContextForSHBuild"
					^ $dep_from ("%IsNPLAExtendedLiteral" @ %NPLA);
				* "treated '++' as literal" @ %NPLA1 $since b770
			)
			)
		)
	)
),

b774
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ @ %NPLA1 $=
			(
				/ "function %ReduceContextFirst" -> "function %ReduceCombined"
					$= (/ $term "exception message"
						@ "function %ReduceContextFirst"),
				/ @ "function %EvaluateIdentifier" $=
				(
					/ DLDI "simplified" ^ "%IsLeaf",
					* "missing keeping list term retained from wrongly forced \
						reduced again" $since b757
						$= (/ "specified result %ReductionStatus::Retained"
							~ "%ReductionStatus::Retrying")
				),
				/ "vau handler" @ "namespace %Forms" $=
				(
					/ DLDI "simplified" ^ "%IsBranch",
					/ $impl "simplified" ^ "%RemoveHead" ~ "separated operand"
				),
				/ DLDI "simplified (function %ReduceOrdered, member function \
					%StrictContextHandler::operator())" ^ "%IsBranch",
				/ DLDI "simplified function %BindParameter" ^ $dep_from
					("%ValueNode::AddChild" @ %YSLib.Core.ValueNode),
				/ DLI "function %ReduceFirst" -> "non-lnline function",
				+ "empty list as head to indicate combined terms"
					@ "function %SetupDefaultInterpretation" ^ $dep_from
					("%ReduceHeadEmptyList" @ %NPLA);
					// It is needed to allow vau handler call without operand.
				- $revert_ex(b773) "empty list removal"
					@ "member function %StrictContextHandler::operator()"
					// See $2017-03 @ %Documentation::Workflow::Annual2017.
			),
			+ "functions %(ReduceToList, ReduceHeadEmptyList)" @ %NPLA,
			+ "function %IsList" @ %SContext
		),
		/ @ "class %ValueNode" @ %YSLib.Core.ValueNode $=
		(
			/ "function %SetChildren"  -> "2 overloads avoiding copy on move",
				// This is simlilar to avoid unifying move assignment for \
					containers since they can be swapped without copy.
			+ "2 function templates %AddChild"
		)
	)
),

b773
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ @ %NPLA1 $=
			(
				(
				/ "function %ReduceArguments" -> "3 overloads";
				/ DLDI "simplified member function \
					%StrictContextHandler::operator()"
				),
				(
				+ "3 functions %ReduceChildrenOrdered";
				/ DLDI "simplified function %ReduceOrdered"
				),
				/ @ "namespace %Forms" $=
				(
					+ $doc "referential grammar" @ "Doxygen comments"
					/ "missing 'YF_API'" @ "function %BindParameter" $since
						b772,
					/ $design "exception message" @ "vau handler",
					/ $design "exception message" @ "function %BindParameter",
					(
					* "missing %operator==" @ "class templates \
						%(UnaryExpansion, UnaryAsExpansion, BinaryExpansion, \
						BinaryAsExpansion)" $since b741
						$= (+ "friend function %operator=="
							^ "%ystdex::examiners::equal_examiner");
					* $comp "ill-formed handlers registration when \
						instantiated from implicit epansion register function \
						templates for handler target types" $since b754
						// For example, 'RegisterStrictUnary<ContextHandler>' \
							could not work.
					)
				),
				/ $revert(b773) "empty argument handling"
					@ "member function %FormContextHandler"
					>> "member function %StrictContextHandler::operator()"
					// This caused empty list operand wrongly handled as no \
						arguments.
			)
		),
		+ 'using BaseType::target;' @ "class template specialization %GHEvent"
			@ %YSLib.Core.YEvent
	),
	+ $re_add(b708) $repo "glob pattern '.vs/*'" @ "file %.hgignore",
	/ $build "updated to Microsoft VC++ 2017"
		~ "Microsoft VC++ 2015" @ "Microsoft VC++ projects" $effective
		@ %(YBase, YFramework, Tools.(CreationTimeManager,
		PredefinedMacroDetector))
		$= (/ $re_ex(b617) "updated platform toolset" -> "v141" ~ "v140")
),

b772
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "base class" @ "%ArityMismatch" -> "%ParameterMismatch"
				~ "%NPLException" @ %NPLA,
			/ @ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ "vau handler" $=
					(
						* $term "exception message" $mismatch(Documentation.NPL)
							$since b771
							$= (/ $re_add(b771) !^ "argument"),
						* "missing binding environment" $since b771,
						/ DLDI "simplified duplication symbol check" !^ "%set"
					),
					/ @ "function %DefineOrSetFor" $=
					(
						/ "1st parameter type 'const string&'" -> 'string_view',
						+ "assertion to ensure non empty data pointer of 1st \
							parameter"
					),
					(
					/ "function %Eval" => "%EvaluateUnit";
					+ "function %Eval"
					)
				),
				/ "retained and evaluated head term" @ "function %ReduceOrdered"
					// This is simpler. And all auxiliary reduction functions \
						have no precondition about non-empty term now.
					$= (/ $impl !^ "%RemoveHead"),
				(
				/ "moved handler and saved as automatic object before \
					invocation" @ "function %ReduceContextFirst";
				* $comp "invalid subterm operations making handler being \
					called out of lifetime" $effective @ ("function %Reduce",
					"functions %((Forms::(And, Or, If, Apply, Eval), \
					ReduceOrdered), %Reduce), vau handler") $since b685
				)
			)
		)
	)
),

b771
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA $=
			(
				+ "exception class %ParameterMismatch",
				/ "functions %(CategorizeBasicLexeme; CategorizeLexeme) assert \
					for non-null string input",
				(
				* "function %IsNPLAExtendedLiteralPrefix missing digit prefix"
					$since b770 $=
				(
					+ "%IsNPLAExtendedLiteralNonDigitPrefix";
					/ $impl "function %IsNPLAExtendedLiteralPrefix"
				);
				+ "function %IsNPLAExtendedLiteral";
				* "accepted numeric literals as symbols"
					@ ("function %CategorizeLexeme";
					$comp "function %IsNPLASymbol)" $since b770
				)
			),
			/ @ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ "vau handler" $=
					(
						/ $term "error message" ^ 'composition' ~ 'application',
						(
						/ "delayed formal parameters check to composition";
						/ "suppored parameter tree" ~ "parameter list"
							$dep_from ("%IsNPLASymbol" @ %NPLA) $=
						(
							+ "recursive list support",
							+ "empty list of support",
							+ "'#ignore' support"
						);
						* $comp "accepted non-symbol parameter" $since b770
						),
						* "wrong bound environment" $since b769
							// The bound environment was local environment. It \
								should denote the dynamic environment.
					),
					/ @ "function %DefineOrSetFor" $=
					(
						* "missing empty string check" $since b735,
						/ "exception message perserved token"
					)
				)
			)
		),
		/ "avoided to initialize DSi SD device 'sd' when detected DSi mode"
			@ "constuctor %platform_ex::FileSystem" @ "platform %DS"
			@ %YCLib.NativeAPI
			// See $2017-03 @ %Documentation::Workflow::Annual2017.
	)
),

b770
(
	/ %YFramework.NPL $=
	(
		/ %NPLA $=
		(
			(
			/ "enum %LiteralCategory" -> "%LexemeCategory"
			/ "function %CategorizeLiteral" -> "%CategorizeBasicLexeme";
			+ "function %IsNPLAExtendedLiteralPrefix",
			+ "functions %(CategorizeLexeme; IsNPLASymbol)"
			),
			/ "function %TermToName" => "%TermToNamePtr"
		),
		/ "function %LoadNPLContextForSHBuild" @ %Dependency $=
		(
			/ "simplified" ^ $dep_from ("%IsNPLAExtendedLiteralPrefix" @ %NPLA),
			* "extended literal handling" $mismatch(Documentation.NPL) $since
				b758
				$= (/ "threw %InvalidSyntax for unsupported literals"
					@ "literal handler")
		),
		/ @ %NPLA1 $=
		(
			/ @ "namespace %Forms" $=
			(
				/ "vau handler" $=
				(
					/ $impl ^ $dep_from ("%IsNPLASymbol" @ %NPLA),
					/ $comp "symbol detection would not involve literal \
						handlers",
					* "crashed when the context parameter is a list" $since
						b769,
					* "missing check of identifier" @ "parameter list" $orig
						(@ "function %ExtractLambdaParameters" $since b735)
				),
				* "extended literal allowed to be redefined"
					@ "function %DefineOrSetFor" $since b735
					$= (/ $impl ^ $dep_from ("%IsNPLASymbol" @ %NPLA)),
				/ "invalid term" @ "function %DefineOrSet" $=
				(
					* "thrown exception type %NPLException instead of \
						%InvalidSyntax specified by documentation" $mismatch
						$since b735,
					/ "exception message"
				)
			),
			/ $re_add(b674) DLDI "functions %(TransformForSeparator, \
				TransformForSeparatorRecursive)" ^ "explicit %TermNode"
				// Result of %AsIndexNode should be used with explicit \
					initialization because %ValueNode is not guaranteed the \
					same with %TermNode as the interface contract.
		)
	)
),

b769
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			+ "form %'$vau'" @ "loading forms"
				@ "function %LoadNPLContextForSHBuild" @ %Dependency,
			+ "function %CheckNorm" @ %NPLA,
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					(
					/ "simplified function %(Lambda, Vau)" $=
					(
						/ DLDI ^ $dep_from "%CheckNorm",
						/ $impl "moved term with name into the closure",
						/ DLDI "lifted context handling"
					);
					- "function %ExtractParameters",
						// This is binding-construct-specific and it is better \
							to be private not to ease the evolution.
					/ "supported context parameter as 3rd subterm"
						@ "function %Vau",
						// Now it is similar to the Kernel language.
					/ DLDI "function %Lambda",
					/ "syntax error message for sufficient terms for context \
						parameter"
						// There can be other syntax error now, i.e. when the \
							context parameter is not a symbol or '#ignore'.
					),
					- $revert_ex(b766) "setting %ValueToken::Null as the value \
						for %ReductionStatus::Retained"
						@ "function %ReduceContextFirst",
						// This changes simplified overall handling strategy \
							on representation of evaluated terms.
					/ $revert_ex(b767) "empty list representation"
						@ "function %Apply" ^ "empty node"
						~ "%ValueToken::Null",
						// Ditto.
				),
				/ "empty parameter handling"
					@ "member function %StrictContextHandler"
					>> "member function %FormContextHandler::operator()"
			)
		),
		/ "function template %Emplace" @ "class template %GAccessList"
			%YSLib.Service.AccessHistory -> "%emplace" ^ "%DefFwdTmpl"
	),
	/ $forced DLDI "member function %ReadingList::Insert" @ %YReader.ReadingList
		$dep_from %YFramework.YSLib.Service.AccessHistory
),

b768
(
	/ %YFramework $=
	(
		/ %YSLib.Core $=
		(
			/ DLDI "static function template %AddValueTo"
				@ "class %ValueNode" ^ "%ystdex::try_emplace"
				~ "%equal_range",
			/ DLDI "simplified equality comparison for function objects"
				@ "class template %GHEvent" @ %YEvent $=
			(
				^ "%ystdex::examiners::equal_examiner::are_equal";
				/ "simplified friend %operator=="
			)
		),
		/ %NPL.NPLA1 $=
		(
			/ @ "vau handler" @ "namespace %Forms" $=
			(
				/ DLDI ^ "%ystdex::search_map_by" ~ "%equal_range",
				* "missing %ReductionStatus::Retained support for retained \
					values" $since b767,
				/ "set %Value to %ValueToken::Unspecified uniformly"
					@ "function %DefineOrSet"
			),
			/ @ "function %EvaluateIdentifier" $=
			(
				* "missing lifting list children" $since b767;
				* $re_add(b767) "missing retrying evluation on unevaluated \
					list terms" $since b753
			)
		),
		/ "separated copy and move" ~ "unifying %operator=" $=
		(
			/ "avoided redundant copy" @ ("class %HBitmap" @ %Adaptor.Image,
				($revert(b331) "class %Message" @ %Core.YMessage, $revert(b510)
				"class %ValueNode" @ %ValueNode) @ %Core, ($revert(b476)
				"class %CompactPixmap", $revert(b566) "class %CompactPixmap")
				@ %Service.YGDI) @ %YSLib ^ ($dep_from ("%ystdex::copy_and_swap"
				@ %YBase.YStandardEx.Utilities), "%DefDeMoveAssignment"),
				// The change would break the exception expected by some cases.
			/ $lib $revert_ex(b710) "changed misleading parameter type"
				@ "class %ScreenBuffer" @ %YCLib.HostedGUI
				// This is not copyable.
		)
	),
	+ "function template %copy_and_swap" @ %YBase.YStandardEx.Utilities
),

b767
(
	/ $dev "%DrMemory-YSLib-suppress.txt" @ %Tools $=
	(
		+ "1 case for MinGW-w64 command line arguments",
			// This is a known issue.
		+ "2 cases to suppress %ystdex::mapped_set leak"
			// False positive cases verified by valgrind in Linux.
	),
	+ "3 function templates %invoke_value_or" @ %YBase.YStandardEx.Functional,
	/ %YFramework $=
	(
		/ DLDI "simplified member function %ValueObject::OwnsUnique" @ %YObject
			^ (($dep_from "%ystdex::invoke_value_or"
			~ "%ystdex::(call_value_or, bind1)")
			@ %YBase.YStandardEx.Functional),
		/ %YSLib.Core $=
		(
			/ @ "class %ValueNode" @ %YSLib.Core.ValueNode $=
			(
				* $re_add(b667) "invalid redundant 'const'"
					@ "forwarding template %emplace" $since b667,
					// The old interface would only work when the key is \
						'mutable'.
				- $lib "all 'std::' before parameter types" @ "constructors",
				(
				+ "static function %CreateRecursively";
				+ "function %CreateWith"
				)
			),
		),
		/ %NPL.NPLA1 $=
		(
			* "missing proper handling of unevaluated %TokenValue terms"
				@ "function %EvaluateIdentifier" $since b753;
			/ @ "namespace %Forms" $=
			(
				+ $impl "vau handler" ^ $dep_from
					("%ValueNode::CreateWith" @ %YSLib.Core.ValueNode);
				/ "function %Lambda" $=
				(
					/ DLDI "simplified";
					/ $comp "retained list parameters moved from argument list",
					/ $comp "captured retained list copied from enclosing \
						context",
					/ $comp "lambda abstraction tracing message"
				),
				+ "function %Vau"
			)
		)
	)
),

b766
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ $re_ex(b738) "removed ':', '!' and '%' as graphical delimeter"
				@ "function %IsGraphicalDelimeter" @ %Lexical,
				// Now modifier in %A1::Forms::ExtractModifier should be a \
					single token. These removed delimeter cannot be treated as \
					separator like ';' and then transformed by preprocessing \
					pass simply, but as prefix of tokens, they can handled as \
					literals.
			/ %NPLA1 $=
			(
				/ "function %ExtractLambdaParameters" @ "namespace %Forms"
					=> "%ExtractParameters",
				/ "function %EvaluateContextFirst" -> "%ReduceContextFirst"
					$= (/ "set %ValueToken::Null on empty %TermNode::Value \
						when the result is %ReductionStatus::Retained"),
						// To allow empty lists handled uniformly.
				(
				/ "functions %(ReduceArguments; \
					StrictContextHandler::operator()) allowed single form with \
					no argument silently";
				/ DLDI "simplified member function \
					%StrictContextHandler::operator()" $=
				(
					+ "assertion for postcondition of %ReduceArguments";
					- "removing unreached throw-expression"
				),
				+ "function %Apply" $dep_from "%EvaluateContextFirst"
					// The simplified implementation need both \
						%ValueToken::Null identification (to differentiate \
						from leaf node which is not a parameter list) and \
						single term reduction in strict context handler. \
						Otherwise, the term to apply needs one more empty \
						subterm as the 2nd argument at end in the case of call \
						without argument, to satisfy the logic in \
						%StrictContextHandler::operator().
				)
			)
		),
		/ @ "class %Terminal" %YCLib.Host $=
		(
			+ "supported for callable types" @ "constructor %Guard";
			/ DLDI "simplified" @ "function %LockForeColor" !^ "%ystdex::bind1"
		)
	)
),

b765
(
	/ %YFramework $=
	(
		/ "supported callable types" @ ("function template %ActOnHover"
			@ %Hover, "member function template \
			%TextPlaceholder::BindByFocus" @ %TextBox) @ %YSLib.UI
			^ "%ystdex::invoke",
		/ DLDI "simplified member functions %FileDescriptor::(FullRead, \
			FullWrite)" @ %YCLib.FileIO ^ "%ystdex::invoke" ~ "%std::bind",
		/ ("functions %(Quote, QuoteN)" => "%(Retain, RetainN)")
			@ "namespace %Forms" @ %NPL.NPLA1
			// Quotation is now unsupported due to preference on explicit \
				evaluation style, like the Kernel language.
	),
	/ DLDI "simplified constructor %ShlExplorer" @ %YReader.ShlExplorer
		$dep_from %YFramework.YSLib.UI.TextBox,
	/ "cleanup ending '.'" @ "exception messages" @ "throwing exception \
		derived from %std::system_error" $effective
		@ %YFramework.(YSLib.Service.FileSystem, YCLib.FileIO)
		// To avoid followed by column-headed clause directly in \
			%std::system_error::what. Note the string is embedded in the \
			constructors of %std::system_error in libstdc++ as inititalizer of \
			%std::runtime_error, whose %what would return the message literally.
),

b764
(
	/ "all 'file name'" @ "string literal for messages" -> 'filename'
		$effective @ %(Tools.CreationTimeManager.Main,
		YFramework.YCLib.FileSystem),
	/ %YFramework $=
	(
		/ %YSLib.Core.YObject $=
		(
			+ "2 function templates %CreateHolderInPlace",
			/ @ "static member function template %IValueHolder::CreateHolder" $=
			(
				/ $impl "simplified" ^ $dep_from "%CreateHolderInPlace";
				* $comp "ill-formed if %Creation::Copy or %Creation::Copy \
					arguments cannot be satisfied" $since b761
					// This would cause move-only objects fail to initialize \
						%ValueObject, for example.
			)
		),
		/ %NPL $=
		(
			/ %NPLA ^ "%ReductionStatus" ~ 'bool' $=
			(
				/ "return type" @ "handler function signature"
					@ "%(LiteralHandler, (PassesCombinator::operator(); \
					GPasses))";
				/ $comp "alias templates %(TermPasses, EvaluationPasses)"
			),
			/ %NPLA1 $=
			(
				* "function %ReduceCheckedClosure moved possibly shared value \
					away" $since b761
					^ (($dep_from "%ValueObject::MakeMoveCopy")
					~ "%ValueObject::MakeMove" @ %YSLib.Core.YObject),
				/ $forced DLDI "simplified status conversion" @ "functions \
					%(InvokeLeaf, InvokeList, Reduce, ReduceFirst, \
					ReplaceSeparatedChildren, EvaluateContextFirst, \
					EvaluateIdentifier)" $dep_from %NPLA,
					// The internal compiler error of G++ would be remained in \
						the client code if callback returning type is wrongly \
						being %bool instead of %ReductionStatus, but \
						well-formed programs would be OK.
				(
				* "wrong result of last term other than %Value on \
					%ReductionStauts::Clean" @ "function %ReduceOrdered" $since
					b754 $=
				(
					/ "return type" -> "%ReductionStatus" ~ "%void",
					/ $impl ^ "%ystdex::default_last_value" ~ "%ReduceChildre",
					/ "set container of last term as well as %Value"
				);
				* "possible wrong reduction status"
					@ "ordered sequence evaluation handler"
					@ "function %RegisterSequenceContextTransformer" $since b754
					$dep_from %NPLA
					// This would effect evaluation result like '; quote x' \
						where ';' is ordered sequence seperator and 'quote' is \
						the form merely returning %ReductionStatus::Retained.
				)
			),
			/ $forced DLDI "function %LoadNPLContextForSHBuild" $dep_from %NPLA
		),
		/ DLDI "simplified" @ %'YCLib_(DS)'.DSIO !^ "%(ystdex::bind1, std::ref)"
	),
	* "wrongly overridden %AR with default value 'ar'"
		@ "%SHBuild-common-options.sh" %Tools.Scripts $since b763
),

b763
(
	/ @ "SHBuild-common-options.sh" @ %Tools.Scripts $=
	(
		+ "detection to ensure non empty $CXX at beginning with default value \
			'g++' by including source %SHBuild-common-toolchain.sh",
		+ $re_ex(b561) $build "GC flag sanity check" @ "platform %Win32"
	),
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %Lexical $=
			(
				/ @ "class %LexicalAnalyzer" $=
				(
					/ DLDI "simplified member function %Literalize",
					+ "member function %ParseRaw"
				),
				/ DLDI "simplified member function %UnescapeContext::PopIf#2"
					^ ("%ystdex::pop_back_val" @ %YBase.YStandardEx.Container)
			),
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				+ "form %'$lambda'",
				* $comp "space character in quoted string not properly handled"
					@ "form %SHBuild_TrimOptions_" $since b761 ^ ("%Session",
					$dep_from "%LexicalAnalyzer::ParseRaw" @ %Lexical)
			)
		),
		/ DLDI %'YCLib_(DS)'.DSIO ^ "%ystdex::invoke" ~ "%std::mem_fn"
			$dep_from %YBase.YStandardEx.Functional
	),
	/ %YBase.YStandardEx $=
	(
		/ @ ("function template %invoke",
			$comp "function template %invoke_nonvoid") %Functional $=
		(
			* "ill-formed call for pointer to members as callable type" $since
				b612
			/ "forwarded member object pm-expression as left operand of '.*'"
				// See $2017-01 @ %Documentation::Workflow::Annual2017.
		),
		/ DLDI "simplified template arguments" @ %YBase.YStandardEx.Rational
	)
),

b762
(
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			* "spelling error" @ "message for waiting tasks"
				@ "member function %BuildContext::Build" $since b624,
			+ "form %env-set" @ "loading forms"
				@ "NPL REPL context initialization"
		),
		/ %Scripts $=
		(
			* "default value initialization"
				@ "%SHBuild-common-options.sh" $since b585 $=
			(
				* "%CXXFLAGS_WARNING wrongly include C_CXXFLAGS_IMPL_WARNING \
					second time";
					// Variable %CFLAGS_WARNING already has the default value.
				* $comp "default value of %C_CXXFLAGS_IMPL_WARNING duplicated"
					@ "%CXXFLAGS"
			),
			/ $re_ex(b554) $dev $build 'ANDROID_SDKVER := 21.1.1'
				-> 'ANDROID_SDKVER := 25.0.2' @ "%Toolchain.Android.mk"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ '#undef SetEnvironmentVariable' @ "platform %Win32"
				@ %NativeAPI;
			+ "function %SetEnvironmentVariable" @ %Host
		),
		* "wrong behavior when target is not existed" @ "form \
			%SHBuild_BuildGCH_existed_" @ "function %LoadNPLContextForSHBuild"
			@ %NPL.Dependency $since b758,
			// The parameter call for copying header is wrong, so the source \
				header would be deleted rather than copied.
		* "always failed to initialize configuration file caused by wrong \
			prarameter passed to %UniqueLockedOutputFileStream"
			@ "function %LoadNPLA1File" @ %Helper.Initialization $since b727
	)
),

b751
(
	/ %YFramework $=
	(
		/ %YSLib.Core $=
		(
			/ @ "class %ValueNode" @ %ValueNode $=
			(
				+ "forwarding template %erase";
				/ DLDI "simplified 2 function %Remove" ^ "%erase"
			),
			/ %YObject $=
			(
				/ @ "interface %IValueHolder" $=
				(
					+ "enum %Creation";
					/ "abstract method %Refer" -> "%Create",
					+ "static function %CreateHolder"
				);
				/ $forced DLDI "overrider %Refer" @ "class templates \
					%(ValueHolder, PointerHolder, RefHolder)" -> "%Create",
				/ @ "class %ValueObject" $=
				(
					+ "function %Create";
					/ $forced DLDI "function %MakeIndirect",
					+ "functions %(MakeCopy, MakeMove)"
				)
			)
		),
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				+ "forms %('string<-', SHBuild_SQuote_)",
				/ "form %'str-contains-ci?'" -> "%'string-contains-ci?'"
					^ "%RegisterStrictBinary" ~ "%RegisterStrict",
				* $comp "undefined behavior for self-referenced term setting \
					or defining" @ "%('$define', '$set')" $dep_from
					"functions %(DefineOrSetFor, Lambda)" %NPLA1
			),
			/ %NPLA1 $=
			(
				(
				+ "function %AssertBranch";
				/ "function %FetchArgumentN" @ "namespace %Forms"
					>> "%namespace %A1" ^ "%AssertBranch" ~ "%Quote",
				),
				/ "exception message" @ "function EvaluateContextFirst" $=
				(
					/ "shown mismatched source term type in failure",
					* "wrong argument numbers" $since b697
						$= (/ $impl $dep_from ^ "%FetchArgumentN")
				),
				/ @ "namespace %Forms" $=
				(
					/ "simplified function %Quote" ^ $dep_from
						"%AssertBranch",
					/ DLDI "simplified function %Lambda by changing the \
						context initialization order to avoid redundant \
						binding insertion to the context",
					/ @ "functions %(DefineOrSetFor, Lambda)" $=
					(
						/ $revert_ex(b736)
							"avoided delayed term wrapping for moved term"
							$= (/ $revert(b757) $impl !^ "%DelayedTerm");
							// Now delayed term have to be explicity constructed.
						* $comp "self-referenced term referenced invalid \
							binding" $since b736
					),
					(
					/ "function %ReduceCheckedClosure returned indirectly \
						moved term for reference" ^ $dep_from
						("%ValueObject::MakeMove" @ %YSLib.Core.YObject);
					* $comp "returned danling reference to variable in local \
						context created by %Lambda" $since b735
						// This would effectively cause undefined behavior in \
							the host program.
					)
				),
				(
				+ "function overload %EvaluateDelayed with 2 parameters";
				/ DLDI "simplified function %EvaluateDelayed#1"
				)
			)
		),
		* "explicit initialization of byte data" @ "static function \
			%Decode for fast decoding" @ "class template specialization \
			%GUCSMapper<CharSet::UTF_8>" @ %CHRLib.StaticMapping $since b595
			// It should have been initialized normally by %FillByte, but this \
				was not documented and required behavior. Since there is ADL \
				call, uninitialized access is better to be prevented here by \
				extra initialization. Also to eliminate G++ warning: \
				[-Wmaybe-uninitialized] under '-Og'
	),
	/ @ "%SHBuild-YSLib-common.sh" @ %Tools.Scripts $=
	(
		* "missing passing environment variables %(CXX, CXXFLAGS) to NPL \
			command to build PCH" $since b758,
			// Variable %CXX is usually exported previously, so the effect \
				would be missing flags in building PCH, which would cause \
				invalid PCH (warned by the subsequent build).
		* $lib "redundant duplicate %YBase header directory included"
			@ "build command for library %YFramework" $orig
			(@ "%Tools/Scripts/SHBuild-YSLib.sh" $since b546)
	)
),

b761
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA $=
			(
				/ DLDI "function %TokenizeTerm" ^ "%ValueObject::emplace"
					~ "assignment",
				+ "function %ReferenceValue"
			),
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				/ DLDI "simplified form %SHBuild_SDot_"
					$= (/ $re_add(b623) "reduced redundant 'return std::move'"
						@ "return-statement"),
				+ "form %ref" ^ $dep_from ("%ReferenceValue" @ %NPLA),
				/ DLDI "simplified forms %(define, set)" ^ "%ystdex::bind1"
					~ "%std::bind",
				/ "check" $dep_from ("class %FormContextHandler" @ %NPLA1) $=
				(
					* $comp "missing branch check" $mismatch(Documentation.NPL)
						$since b758,
						// The separated precondition check is mandated since \
							b733 in the documentation.
					/ DLDI "simplified" !^ "%IsBranch"
				)
			),
			/ %NPLA1 $=
			(
				* $comp "wrong reduced terms produced by registered handlers"
					@ $since b769 $dep_from
					("%EmplaceCallResult" @ %YSLib.Core.YObject),
				/ "function template %RegisterFormContextHandler"
					=> "%RegisterForm",
				(
				/ "default initializer" @ "data member %Check"
					@ "class %FormContextHandler" -> '{IsBranch}' ~ '{}';
					// Branch node is the normal case. Check in namespace \
						%Forms mostly relies on %Forms::Quote indirectly, \
						which is not responsible to leaf nodes (it would only \
						assert).
				/ $comp "handler registation with %IsBranch as form check \
					implicitly";
				/ DLDI "simplified (all 2 function templates \
					%Forms::RegisterStrictUnary, function \
					%RegisterSequenceContextTransformer)" !^ "%IsBranch"
				),
				/ @ "namespace %Forms" $=
				(
					/ @ "function template %operator()" @ "class templates \
						%(UnaryExpansion, UnaryAsExpansion)" $=
					(
						+ 'const',
						- "1st parameter"
							// This is now handled by the subsequent parameter \
								pack.
					),
					/ @ "function templates %(CallBinary, CallBinaryAs)" $=
					(
						// To be more consistent with unary ones.
						/ "supported forwarding additional parameters",
						+ '&&' @ "1st parameter type"
					),
					(
					+ "class templates %(BinaryExpansion, BinaryAsExpansion)";
					+ "2 function templates %RegisterBinary"
					)
				),
				* "hard-coded %ContextHandler"
					@ "function templates %WrapContextHandler" $since b751
			)
		),
		/ %YSLib.Core.YObject $=
		(
			(
			* "wrong function template called"
				@ "function template %EmplaceCallResult#4" $since b769;
			* "wrong result dispatched"
				@ "function templates %EmplaceCallResult#5" $since b769
			),
			/ DLDI ("simplified functions %(MakeIndirect, OwnsUnique)"
				^ "%GetHolderPtr") @ "class %ValueObject",
			/ DLDI "simplified function %Reset"
				@ "class template %GDependency" ^ "%(PDefH, ImplExpr)"
		)
	),
	* "wrong Doxygen command '\post'" @ "default constructor %any"
		@ %YBase.YStandardEx.Any $since b717
),

b759
(
	/ %YBase.YStandardEx.Memory $=
	(
		+ "3 function templates %(owns_unique, owns_unique_nonnull)"
		+ "deleter template parameter"
			@ "function template %reset for %std::unique_ptr instances"
	),
	/ %Tools.Scripts $=
	(
		* "compiler flag test for %(C_CXXFLAGS_GC, LDFLAGS_GC)"
			@ !"platform %Win32" @ "%SHBuild-common-options.sh" $since b561,
		* "message for finishing building YSLib libraries"
			@ "%SHBuild-YSLib-common.sh" $since b758
	),
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "loading forms" @ "function %LoadNPLContextForSHBuild"
				@ %Dependency $=
			(
				- "unused form %SHBuild_EchoVar_E_",
				+ "forms %('root-context', '$set', '$or', 'eqv?', not, \
					'str-contains-ci?', value-of)",
				/ DLDI "avoided redundant capture" @ "form %SHBuild_SDot_",
				/ DLDI "formatted loaded text to avoid trailing '(' before EOL"
			),
			/ %NPLA1 $=
			(
				/ @ "function templates %(CallUnary, CallBinary, CallBinaryAs)"
					$=
				(
					/ "assignment took place when the result is of \
						%ValueObject or its references" ^ $dep_from
						("%YSLib::EmplaceCallResult" ~ "%YSLib::EmplaceFromCall"
						@ %YSLib.Core.YObject);
					/ "allowed callable types" ^ "%ystdex::invoke_nonvoid"
						~ "direct call"
				),
				/ DLDI "simplified function %CallSystem"
					^ "%std::(mem_fn, ystdex::compose)" ~ "lambda expression",
				/ "allowed %ystdex::pseudo_output result" @ "function template \
					%CallBinaryFold"
					$= (/ $impl ^ $dep_from ("%YSLib::EmplaceCallResult"
						~ "%YSLib::EmplaceFromCall" @ %YSLib.Core.YObject),
				/ DLDI "function %EvaluateLeafToken"
					^ ($dep_from "%ValueObject::emplace" @ %YSLib.Core.YObject)
					~ "assignment, %to_string call"
			)
		),
		/ @ "inline namespace %references" @ %YCLib.Reference $dep_from
			%YBase.YStandardEx.Memory $=
		(
			+ 'using ystdex::owns_unique;',
			+ 'using ystdex::owns_unique_nonnull;'
		),
		/ %YSLib $=
		(
			+ $comp "aliases %(owns_unique, owns_unique_nonnull)"
				@ "namespace %YSLib" @ %Adaptor.YAdaptor,
			/ %Core.YObject $=
			(
				+ "abstract method %IValueHolder::OwnsUnique";
				+ $forced "overrider %OwnsUnique"
					@ "class templates %(ValueHolder, PointerHolder, RefHolder)"
					$= (/ $impl ^ $dep_from ("%owns_unique" @ %Adaptor));
				/ @ "class %ValueObject" $=
				(
					+ "function %OwnsUnique" $dep_from "%IValueHolder",
					/ $revert_ex(b678) "all 2 function templates %Emplace"
						=> "%emplace"
				),
				+ "5 function templates %EmplaceCallResult"
					^ $dep_from "%ValueObject::emplace",
					// The emplaced nested %ValueObject is usually unexpected. \
						If the emplacement is really needed, it can be \
						directly by construction of explicit value.
				- $revert(b748) "all 3 function templates %EmplaceFromCall"
					$dep_from ("%(CallUnary, CallBinary, CallBinaryAs)"
					@ %NPL.NPLA1)
				- $revert(b748) "all 3 function templates %EmplaceFromInvoke"
			)
		)
	)
),

b758
(
	/ %YFramework.NPL $=
	(
		/ %NPLA1 $=
		(
			+ "function templates %(CallBinary, CallBinaryAs, CallBinaryFold)"
				@ "namespace %Forms",
			+ "2 functions %LoadFrom" @ "class %REPLContext"
		),
		/ %Dependency $=
		(
			/ "clarified error message before copying"
				@ "function %InstallFile#1",
			+ "function %A1::Forms::LoadNPLContextForSHBuild"
		)
	),
	/ %Tools $=
	(
		/ $dev "updated %LIBS for extra NPL dependencies"
			@ "%SHBuild-bootstrap.sh" @ %Scripts,
		/ %Tools.SHBuild.Main $=
		(
			+ "commands %(RunNPL, RunNPLFile)" ^ $dep_from
				("%LoadNPLContextForSHBuild" @ %YFramework.NPL.Dependency)
				$dep_from "%SHBuild-bootstrap.sh" @ %Scripts,
			/ "help messages" $=
			(
				+ "message for commands %(RunNPL, RunNPLFile)",
				* "wrong message for %InstallExecutable command" $since b659
			)
		)
	)
),

b757
(
	/ DLDI "simplified aliases" @ %Pointer ^ (("%(add_ptr_t, add_ref_t)"
		~ "%ystdex::(add_pointer_t, add_lvalue_reference_t)")
		@ %TypeTraits) @ %YBase.YStandardEx,
	/ %YFramework $=
	(
		/ "function tempalte %Add" @ "class %ValueNode" @ %YSLib.Core.ValueNode
			=> "%AddValue",
			// To avoid confusion.
		/ %NPL $=
		(
			/ %NPLA $=
			(
				/ @ "namespace %Forms" $=
				(
					/ "alias %DelayedTerm diverged to %TermNode"
						^ "%ystdex::derived_entity" $dep_from
						("%(Lambda, DefineOrSetFor)" @ %NPLA1),
					/ "closure" @ "function %Lambda captured context by \
						reference",
						// Capture of context by value would effectively copy \
							all bindings, which would be unexpected most time.
					+ "function %ValueOf"
				),
				/ $forced DLDI "%DefineValue" $dep_from %YSLib.Core.ValueNode,
				(
				/ @ "enum %ReductionStatus" $=
				(
					+ "enumerator %Retained" $dep_from
						("%EvaluateLeafToken" @ %NPLA1),
					/ "enumerator %Success" => "%Clean",
					/ "enumerator %NeedRetry" => "%Retrying"
				);
				/ $forced DLDI "function %CheckReducible"
				)
			),
			/ %NPLA1 $=
			(
				* $comp "type same to %TermNode cannot be treated as value type"
					@ "function %EvaluateDelayed" $orig
					(@ "function %EvaluateIdentifier" $since b607) $dep_from
					("%DelayedTerm" @ %NPLA),
				/ "namespace %Forms" $=
				(
					/ DLDI "function %Lambda, DefineOrSetFor" ^ "%DelayedTerm",
					/ "function %Quote returned" $dep_from
						("%ReductionStatus::Retained" @ %NPLA)
				),
				/ DLDI "simplified function %ReduceLeafToken",
				/ DLDI "simplified function %EvaluateLeafToken"
					^ "%CheckReducible",
				(
				/ $impl "function %RegisterSequenceContextTransformer"
					^ $dep_from ("%ReductionStatus::Retained" @ %NPLA);
				* $comp "wrongly cleared quoted term contents"
					@ "function %EvaluateContextFirst" $since b755 $dep_from
					"%Forms::Quote",
				),
				(
				+ "2 constructor templates" @ "class template \
					%WrappedContextHandler";
				/ DLDI "function template %WrapContextHandler",
				(
				/ @ "class template %WrappedContextHandler, \
					classes %(FormContextHandler, StrictContextHandler)" $=
				(
					+ "(copy, move) (constructor, %operator=)"
						^ "%DefDeCopyMoveCtorAssignment";
					/ "supported '!='"
						$= (+ "private base" ^ "%ystdex::equality_comparable")
				);
				* $comp "infinite recursive equality comparison caused by \
					wrong %operator!= for %GHEvent instances used"
					@ "%WrappedContextHandler" $since b751,
				* $comp "inconsistent '!=' comparison to '=='" @ ("class \
					template %FormContextHandler", "class %StrictContextHandler"
					$orig (@ "class %FunctionContextHandler")) $since b748
				)
				)
			)
		)
	),
	/ %Test $=
	(
		/ $impl "cast to 'double' explictly" @ "case for %ystdex::apply"
			@ %YBase;
			// To eliminate G++ warning: [-Wdouble-promotion].
		- $revert(b595) "test to adding '-Wno-double-promotion'"
			@ "%CXXFLAGS" @ "%test.sh"
			// Though still unsupported formally in YSLib, it also works \
				around the problem of null device in WSL (showing \
				"operation not permitted" error for 'grep'). See also \
				https://github.com/Microsoft/BashOnWindows/issues/1259.
	)
),

b756
(
	/ %YBase.YStandardEx $=
	(
		+ "transformation traits %(id_t, add_ptr_t, add_ref_t, add_rref_t)"
			@ %TypeTraits,
		+ "conversion operator to pointer" @ "metafunction %id" @ %Functor
			^ $dep_from ("%add_ptr_t" @ %TypeTraits),
		+ "class template %derived_entity" @ %Base
	),
	/ %YFramework $=
	(
		+ "converstion to %std::ios_base manipulator" @ "class %Terminal::Guard"
			@ %YCLib.Host ^ ($dep_from ("%add_ptr_t" @ %TypeTraits,
			"%ystdex::id" @ %Functor) @ %YBase.YStandardEx),
		/ $dev $lib "simplified" %CHRLib.MappingEx
			^ ($dep_from "%ystdex::(add_ptr_t, add_ref_t)"
			~ "%ystdex::(add_pointer_t, add_lvalue_reference_t)")
			@ %YBase.YStandardEx.TypeTraits,
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				* "looped forever for 'if' statement without 3rd clause"
					@ "function %If" @ "namespace %Forms" $sincce b750,
				/ "1st parameter type" @ "function templates %(CallUnary, \
					CallUnaryAs)" -> '_func&&' ~ '_func',
					// Because it is based on expanded caller. See also \
						$2014-04 @ %Documentation::Workflow::Annual2014.
				* "missing correct equality comparison"
					@ "class template %WrappedContextHandler" $since b751 $=
				(
					+ "friend %operator==" ^ "%YSLib::AreEqualHeld";
					* $comp "infinite recursive equality comparison caused by \
						wrong %operator== for %GHEvent instances used" $since
						b751
				)
			),
			/ $lib "simplified class %TokenValue" -> "alias"
				^ ("%ystdex::derived_entity" @ %YBase.YStandardEx.Base)
		),
		* "empty value comparison caused indirecting to null pointer target"
			@ "equality comparer" @ "class %GHEvent" @ %YSLib.Core.YEvent $since
			b748
	)
),

b755
(
	/ %YFramework $=
	(
		/ %NPL.NPLA1 $=
		(
			/ "cleanup subterms if result is %ReductionStatus::Success before \
				branch reduction returning" @ "function %EvaluateContextFirst";
			* $comp "missing subterm cleanup" @ "functions %(EqualReference, \
				EqualVaue)" @ "namespace %Forms" $since b748,
			/ "simplified by removal of subterm cleanup" @ "function \
				%(DefineOrSet, Lambda, function templates %CallUnary)"
				// This is safe now since all forms are delegated in \
					%EvaluateContextFirst so far.
		),
		/ %YCLib $=
		(
			/ "class %Terminal" @ %Host $=
			(
				+ "function %Clear",
				/ DLDI ^ "%ystdex::(call_value_orystdex, bind1)",
				/ @ "class %Guard" $=
				(
					/ DLI "avoided duplication of attribute restore"
						^ "%tidy_ptr";
						// Though multiple attribute restore is supported \
							correctly, it is redundant.
					+ $forced "move %(constructor, operator=)"
				),
				+ "function %LockForeColor"
			),
			/ "alias template %tidy_ptr" @ %Reference
				-> 'using ystdex::tidy_ptr;' $dep_from %YBase.YStandardEx.Memory
		)
	),
	/ %YBase.YStandardEx.Memory $=
	(
		+ "explicit dependency to %Pointer";
		/ "class template %observer_ptr, all function templates for \
			%observer_ptr" >> %Pointer;
		+ "alias template %tidy_ptr" @ %Pointer
	)
),

b754
(
	/ %YFramework $=
	(
		/ %NPL.NPLA1 $=
		(
			/ "recognized token value" @ "exception message"
				@ "function %EvaluateContextFirst",
				// This would normally not occur since undeclared identifier \
					would cause error even before, however, direct call is \
					still possible.
			+ "functions %(And, Or)" @ "namespace %Forms",
			+ "function %ReduceOrdered",
			/ "function %RegisterSequenceContextTransformer" $=
			(
				/ DLDI ^ "%ystdex::compose",
				(
				+ "%bool parameter to allow specifying ordered or not",
				/ DLDI "simplified"
					^ ($dep_from "%ReduceOrdered", "%ReduceChildren");
				/ $comp "guaranteed value to be the last subterm (if any) \
					after evaluation when the evaluation is specified to be \
					ordered"
					// To make it convenient to be subexpressions.
				)
			),
			* "confusion of evaluation strategy and form in API name"
				$mismatch(Documentation.NPL) $since b696
				$=
			(
				/ "class %FunctionContextHandler" => "%StrictContextHandler",
				/ "all 2 function templates %RegisterFunction"
					=> "%RegisterStrict"
			)
		),
		/ @ %YSLib.Core.ValueNode $=
		(
			+ "function %Remove with %const_iterator parameter"
				@ "class %ValueNode",
			/ DLDI "simplified 2 function templates %(AccessNode, \
				AccessNodePtr)" ^ "%ystdex::is_interoperable"
				~ "%(ystdex::or_, std::is_constructible)"
				// NOTE: These function templates had implied the key type \
					should be implicitly convertible to string or vice versa, \
					not necessarily explicitly castable, since equivalent keys \
					compared in transparent associative container are used \
					without explicit cast.
		)
	)
),

b753
(
	/ %YFramework $=
	(
		/ @ "class %ValueObject" @ %YSLib.Core.YObject $=
		(
			+ "2 function templates %(operator==; operator!=)",
			/ DLI "improved %operator(!, bool)" ^ "%any::has_value"
				~ "%any::get_holder"
				// Since the content is private, it is safe to assume every \
					value is held with holder, specifically, dereived class \
					object of %IValueHolder.
		),		
		/ %NPL $=
		(
			/ "function %HasValue" -> "function template" @ %SContext,
				// To replace the original function rather than just adding a \
					new function template would lead less forced \
					modification elsewhere, e.g. for bind expressions.
			/ %NPLA1 $=
			(
				/ DLI $dep_from %SContext $=
				(
					/ $forced $design "functions %(TransformForSeparator, \
						TransformForSeparatorRecursive, \
						ReplaceSeparatedChildren)",
					/ $comp "improved term node comparison"
				),
				(
				/ @ "function %Reduce" $=
				(
					/ "simplified normal form detection" ^ "%CheckReducible"
						~ "%DetectReducible",
					- "%ValueToken::Null transformation for empty list",
					/ DLDI "simplified return-statement to allow more \
						%ReductionStatus enumerators in future"
						// This would also need changes in implementation of \
							%CheckReducible.
				);
				/ $forced DLDI "function FunctionContextHandler::operator()"
					$= (/ "%ValueToken::Null handling" -> "empty node handling")
				),
				* $doc "wrong '\exception' command" @ "functions \
					%(ReduceChecked, ReduceCheckedClosure)" $since b735,
				/ $forced $dep_from "%TermToNode" @ %NPLA $=
				(
					/ "function %REPL::Perform transformed token node"
						$= (/ $impl ^ ("%TokenizeTerm" @ %NPLA)),
					/ "functions %(ExtractLambdaParameters, \
						ReplaceSeparatedChildren)"
						^ $dep_from ("%TokenValue" @ %NPLA) ~ "%string",
					/ "type" @ "token value parameter"
						@ "functions %(TransformForSeparator, \
						TransformForSeparatorRecursive, \
						RegisterSequenceContextTransformer)"
						-> $dep_from ("%TokenValue" @ %NPLA) ~ "%string";
					* "missing nomalization property on %string value \
						reduction when %ReductionStatus::NeedRetry is met"
						$mismatch(Documentation.NPL) $since b732
						// Before the change, it would loop forever if a \
							string is evaluated from an identifier with same \
							name easily, which is not intended in general.
				)
			),
			/ %NPLA $=
			(
				/ $dep_from ("%Reduce" @ %NPLA1) $=
				(
					- $revert(b697) "function %DetectReducible";
					- $revert(b752)
						"functions %(IsNormalForm, %NormalizeBranch)"
				),
				(
				+ DD "Doxygen group %ThunkType";
				+ DD "%(DelayedTerm, ContextHandler, LiteralHandler)"
					@ "Doxygen group %ThunkType",
				(
				+ "class %TokenValue; function %TokenizeTerm";
				/ "%TermToName accessed %TermValue" ~ "%string"
				)
				)
			)
		)
	)
),

b752
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			+ $dev $lib 'yimpl' @ "alias %TermNode" @ %SContext,
			/ %NPLA $=
			(
				(
				+ "alias %DelayedTerm";
				(
				+ "functions %(IsNormalForm, NormalizeBranch)";
				/ DLDI "simplified function %DetectReducible"
					^ "%(NormalizeBranch, IsNormalForm)"
				),
				+ "function %LiftDelayed"
				),
				+ $dev $lib 'yimpl' @ "alias %ContextNode"
			),
			/ %NPLA1 $=
			(
				/ "function %EvaluateTermNode" => "%EvaluateDelayed",
				/ DLDI "simplified %FunctionContextHandler::operator()"
					^ "%HasValue",
				/ "%InvalidSyntax exception message string" @ "function %If"
					@ "namespace %Forms"
			)
		),
		/ %YSLib.Core.YObject $=
		(
			(
			+ "abstract method %Equals" @ "%interface %IValueHolder";
			+ $forced "overrider %Equals"
				@ "class templates %(ValueHolder, PointerHolder, RefHolder)";
			/ DLDI "member function %ValueObject" ^ "%IValueHolder::Equals"
				~ "%IValueHolder::operator==";
			- $foced "overrider %operator=="
				@ "class templates %(ValueHolder, PointerHolder, RefHolder)"
			),
			/ @ "class %ValueObject" $=
			(
				+ "function %GetHolderPtr",
				+ "function %GetHolderRef",
				+ "function %EqualsUnchecked" ^ $dep_from
					("%GetHolderRef", "%IValueHolder::Equals"),
				(
				+ "function %EqualsRaw" ^ $dep_from "%IValueHolder::Equals";
				+ "(function template, function) %Equals";
				/ $impl $src $since b673 "simplified friend function \
					%operator==" -> "inline function" ^ "%Equals"
				)
			)
		)
	)
),

b752
(
	/ %YFramework $=
	(
		* "invalid indirection for values without holder (i.e. empty \
			%ValueObject)" @ "member function %ValueObject::MakeIndirect"
			@ %YSLib.Core.YObject $since b747,
		/ %NPL $=
		(
			/ %NPLA $=
			(
				* $comp "crashed lifting %TermNode with empty %Value data \
					member" @ "functions %LiftTermRef" @ %NPLA $since b747
					$dep_from %YSLib.Core.YObject,
				/ "function %DetectReducible recognized leaf non empty nodes \
					as reducible term",
					// To allow identifier to be further reduced.
				/ "return type" @ "alias %ContextHandler" -> 'ReductionStatus'
					~ 'void'
					// To allow reduction status propagated out from context \
						handlers.
			),
			/ %NPLA1 $=
			(
				* $comp "crashed evaluating child node with empty %Value data \
					member" @ "functions %(EvaluateIdentifier, \
					EvaluateTermNode)" $since b747 $dep_from
					("%LiftTermRef" @ %NPLA),
					// Since empty node has explicitly been allowed in IR in \
						general as per the documentation, it was a bug.
				/ "called %DetectReducible for leaf non empty nodes"
					@ "function %EvaluateTermNode",
				(
				+ "class template %WrappedContextHandler";
				+ "3 function templates %WrapContextHandler"
				),
				(
				/ $forced "support for void and non-void handler result"
					@ "class %FormContextHandler" $dep_from
					("%ContextHandler" @ %NPLA)
					$= (/ "constructor templates" ^ $dep_from
						"WrapContextHandler");									
				/ "supported reduction status propagation"
					@ "function %operator()" @ "class templates \
					%(FormContextHandler, FunctionContextHandler)" $=
				(
					/ "return type" -> 'ReductionStatus' ~ 'void',
					/ $forced "returned with handler returning value"
				);
				/ "supported reduction status propagation"
					@ "function %EvaluateContextFirst";
				* $comp "%Forms::If result missing proplerly reevaluation"
					$since b750
				)
			)
		)
	),
	/ @ "static function templates %(call, invoke)"
		@ "class template %call_projection" @ %YBase.YStandardEx.Functional $=
	(
		* "wrong 'std::move'" @ "some overloads" $since b634,
		+ 'yimpl'
			@ "trailing-return-type except for call to overloads of same name"
	)
),

b750
(
	/ %YBase.YStandardEx $=
	(
		/ @ '__cpp_lib_transparent_operators >= 201210 \
			|| __cplusplus >= 201402L' $=
		(
			* "missing 'using std::bit_or;'" @ "transparent operators available"
				@ %Functor $since b679;
			* $comp "ill-formed %bitseg_traits::project" @ %BitSegment $since
				b728
		),
		/ %DefererenceOperation $=
		(
			/ $dev $lib "specified 'yimpl'" @ "trailing-return-type"
				@ "function templates %(nonnull_or, call_nonnull_or, value_or, \
				call_value_or)#(2, 3)",
			* "missing 'yforward' call on pointer value"
				@ "trailing-return-type" @ "function templates %(nonnull_or, \
				value_or)#2" $since b749
		),
		* "missing check for first element in non empty sequence"
			@ "function templates %(for_each_equal, for_each_if)" @ %Algorithm
			$since b531
	),
	/ %YFramework $=
	(
		/ %	NPL $=
		(
			/ %NPLA1 $=
			(
				/ DLDI "function %EvaluateContextFirst"
					^ "%ystdex::call_value_or",
				/ @ "namespace %Forms" $=
				(
					/ @ "function %Lambda" $=
					(
						/ DLDI "function %Lambda" ^ "%Quote" ~ "assertion",
						* "closure wrongly moved even bound to defined variable"
							$since b747
							// This was not shown until the unconditionally \
								value copy in %EvaluateIdentifier is avoided.
					),
					+ "function %If"
				),
			),
			+ "(2 functions, function template) %AdjustTermValuePtr" @ %NPLA
		),
		* "missing check for first child node" @ "function templates \
			%(SelectChildren, SplitChildren)" @ "class %ValueNode"
			@ %Core.ValueNode $since b664 $dep_from
			("%ystdex::for_each_if" @ %YBase.YStandardEx.Algorithm)
	)
),

b749
(
	/ @ "function templates %(nonnull_or, call_nonnull_or, value_or, \
		call_value_or)" @ %YBase.YStandardEx.DereferenceOperation $=
	(
		(
		- "function default argument"
			@ "overload with other optional parameter";
		+ "overload without other optional parameter"
		),
		+ '&&' @ "parameter types except for function parameters",
		+ 'yforward'
			@ "use of parameters except for function and pointer null check"
	),
	/ %YFramework $=
	(
		/ %NPL.NPLA $=
		(
			/ @ "function template %FetchValuePtr" $=
			(
				* "wrong internal linkage caused by redundant 'static'" $since
					b747
				/ DLDI "simplified" ^ ("%GetValuePtrOf" @ %YSLib.Core.ValueNode)
			),
			/ DLDI "simplified function template %FetchValue"
				^ ("%GetValueOf" @ %YSLib.Core.ValueNode)
		),
		/ %YSLib.Core $=
		(
			/ %ValueNode $=
			(
				/ "merged 2 function template %AccessPtr for node \
					%observer_ptr instance parameters" -> "function template \
					for arbitrary level of %observer_ptr to node type",
					// Also to eliminate possible ambiguity.
				+ "functions %(GetValueOf, GetValuePtrOf)"
			),
			+ "2 function templates %AccessPtr for %ValueObject" @ %YObject
				// To make %AccessPtr available in same manner as %ValueNode.
		),
		/ DLDI "simplified function %GetWindowPtrOf" %Helper.HostedUI
			^ "%(PDefH, ImplRet)"
	),
	/ $forced DLDI "simplified" $dep_from ("%ystdex::call_value_or"
		@ %DereferenceOperation) $effective @ ("function template \
		%get_nested_exception_ptr" @ %YBase.YStandardEx.Exception, ("function \
		%GetWindowPtrOf" %Helper.HostedUI, ("function template \
		%(FetchValuePtr, InvokePasses), function %SXML::ConvertStringNode"
		@ %NPLA1, "function %DecomposeMakefileDepList" @ %Dependency) @ %NPL,
		"member function %FontCache::GetTypefacePtr" @ %YSLib.Adaptor.Font)
		@ %YFramework,
	/ $forced DLDI "simplified" $dep_from "%ystdex::value_or" $effective
		@ ("function %ParseNPLANodeString" @ %YFramework.NPL.NPLA)
),

b748
(
	/ %YFramework $=
	(
		/ %NPL.NPLA1 $=
		(
			+ "friend function %operator==" @ "classes %(FormContextHandler; \
				FunctionContextHandler)",
				// To make it easy to implement equivalence predicates with \
					semantic properties like 'eqv?' in Scheme. It is also the \
					only appropriate place to propagate the well-defined \
					behavior of %operator== (from %GEvent) specifed by the \
					user-provided functors.
			/ @ "namespace %A1" $=
			(
				/ $forced DLDI "function template %CallUnary"
					$dep_from ("%ValueObject::EmplaceFromCall"
					@ %YSLib.Core.YObject),
				+ "function %EqualReference" $dep_from
					("%HoldSame" @ %YSLib.Core.YObject),
				+ "function %EqualValue"
			)
		),
		/ %YSLib.Core $=
		(
			/ @ "function template %GHEvent" @ %YEvent $=
			(
				(
				+ 'using BaseType::target_type;';
				/ DLDI "simplified" @ 'defined(YF_DLL) || defined(YF_BUILD_DLL)'
					@ "friend function %operator=="
				),
				/ DLI "null pointer check before comparing" -> "assertions"
					@ "equality comparer"
					// %Comparer has still to be a pointer due to defaulted \
						special member functions and 'constexpr' functions.
			),
			/ %YObject $=
			(
				(
				/ @ "class %ValueObject" $=
				(
					+ "alias %Content";
					+ "function %GetContent"
				);
				+ "function %HoldSame" ^ $dep_from ("%ystdex::hold_same for \
					%ystdex::any" @ %YBase.YStandardEx.Any)
				),
				/ ("all function templates %(EmplaceFromCall, \
					EmplaceFromInvoke, EmplaceIfEmpty)" @ "class %ValueObject"
					-> "non-member function templates"
			)
		)
	),
	/ @ %YBase.YStandardEx.Any $=
	(
		+ "inline function %hold_same for 'const holder&'"
			@ "namespace %any_ops",
		+ "inline function %hold_same for 'any'"
	)
),

b747
(
	/ %YBase.YStandardEx.Any $=
	(
		/ DLDI "function %clone" @ "class template %value_holder"
			^ "%ystdex::clone_monomorphic",
		/ "handling of %get_ptr" @ "static function %manage"
			@ "class templates %(value_handler, ref_handler, holder_handler)"
			@ "namespace %any_ops" $=
		(
			/ $impl "simplified" ^ "%pvoid" ~ 'static_cast';
			* $comp "ill-formed for cv-qualified %value_type" $since b717
		)
	),
	/ DLDI "simplified classes" ^ "%DefDeCopyMoveCtorAssignment"
		~ "%(DefDeCopyCtor, DefDeMoveCtor, DefDeCopyAssignment, \
		DefDeMoveAssignment)" $effective @ ("class template %ValueHolder"
		@ %Core.YObject, "class %View" @ %UI.YWidgetView) @ %YFramework.YSLib,
	/ %YFramework $=
	(
		/ %YSLib.Core $=
		(
			/ %YObject $=
			(
				* "unsupported comparison across different holder tepmlates"
					@ "%operator==" @ "class templates %(value_holder, \
					pointer_holder)" $since b332,
				(
				+ "default template argument 'void'"
					@ "class template %OwnershipTag";
				+ "constructor with reference and %OwnershipTag<> parameters \
					to support non-owning initalization"
					@ "class %ValueObject"
				),
				/ @ "interface %IValueHolder" $=
				(
					+ $doc "explicit requirement of %EqualityComparable"
						@ "abstract method %operator==",
					+ "abstract method %Refer"
				),
				+ "class template %RefHolder",
				+ $forced DLDI "overrider %Refer"
					@ "class templates %(ValueHolder, PointerHolder)" $dep_from
					"%IValueHolder::Refer"
					$= (/ $impl ^ $dep_from "%RefHolder"),
				+ "function %MakeIndirect" @ "class %ValueObject" ^ $dep_from
					"%IValueHolder::Refer"
			),
			+ "2 functions %SetContentIndirect" ^ $dep_from
				("%ValueObject::MakeIndirect" @ %YObject)
		), 
		/ %NPL $=
		(
			/ %NPLA $=
			(
				+ "3 functions %LiftTermRef" ^ $dep_from
					("%ValueNode::SetContentIndirect" @ %ValueNode,
					"%ValueObject::MakeIndirect" @ %YObject) @ %YSLib.Core,
				+ "function template %FetchValuePtr"
			);
			/ @ "function %(EvaluateTermNode, EvaluateIdentifier)" @ %NPLA1 $=
			(
				/ "fetching value by reference" ~ "fetching value by copy"
					^ ("%(LiftTermRef, FetchValuePtr)" @ %NPLA)
					~ "%(LiftTerm, FetchValuePtr)";
				* "%ystdex::invalid_construction thrown when reference to \
					variable denoting an object cannot be copied" $since b726
			)
		)
	)
),

b746
(
	/ %YBase.YStandardEx $=
	(
		/ %DereferenceOperation $=
		(
			+ "2 function templates %call_nonnull_or",
			/ "swapped 2nd and 3rd template parameters"
				@ "all 2 function template %call_value_or"
				// The function type is less likely to be specified explicitly \
					and it will effectively prevent the types follows it being \
					explicitly specified when it is an anonymous type (e.g. a \
					closure type), so the result type parameter is better in \
					the front. Also to be consistent with %value_or.
		),
		/ %Memory $=
		(
			+ "type traits %(has_mem_new, has_mem_delete)",
			(
			+ $doc "Doxygen group %allocators";
			+ "class template %class_allocator; alias template %local_allocator"
			),
			/ @ "function template %clone_monomorphic" $=
			(
				* "allocated memory leaked on constructor throwing" $since b625
					$= (/ DLDI ^ "%ystdex::(make_allocator_guard, \
						construct_within)"),
				/ "default argument" ^ $dep_from "%local_allocator"
					~ "%std::allocator"
			),
			(
			+ "function template %create_with_allocator";
			(
			/ "function templates %(clone_monomorphic, clone_polymorphic) \
				with pointer pointing object to be cloned"
				-> "with object reference to be cloned";
			+ "function templates %(clone_monomorphic_ptr, \
				clone_polymorphic_ptr)"
			),
			+ "function template %try_create_with_allocator"
			),
			/ "split function template %clone_monomorphic with no allocator \
				overload"
				// Note %std::allocator is not safe to interact with raw 'new'.
		),
		/ DLDI "class template %pointer_holder" @ %Any $=
		(
			/ "simplified copy constructor" ^ $dep_from
				"%ystdex::clone_monomorphic_ptr",
			/ "function %clone" ^ $dep_from "%ystdex::clone_monomorphic"
		)
	),
	/ %YFramework.YSLib $=
	(
		/ $forced DLDI "copy constructor" @ (("class template \
			%GEventPointerWrapper" @ %YEvent, "function %GetCopyOnWritePtr"
			@ "class template %GDependency" @ %YObject) @ %Core,
			("class %YWidget" @ %YWidget, "class %BufferedRenderer"
			@ %YRenderer) @ %UI) $dep_from ("%ystdex::clone_polymorphic"
			@ %YBase.YStandardEx.Memory) ^ "%Deref",
		/ DLDI "simplified copy constructor"
			@ "class template %PointerHolder" @ %Core.YObject ^ $dep_from
			"%ystdex::clone_monomorphic_ptr"
	)
),

b745
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ @ "function %DetectBOM with stream buffer parameter"
					@ %TextFile $=
				(
					* "not null result returned as encoding for any stream \
						with size greater than 4" $since b743 $dep_to
						"wrong stream size test for BOM",
					/ DLDI "cast to %std::streamoff on BOM size to be tested"
						// To eliminate warning: [-Wsign-conversion] when \
							the compiler is not able to analyze the value is \
							always positive.
				),
				/ @ "class %TextManager" @ %TextManager $=
				(
					* $comp "wrong encoding detected for file with size greater \
						than 4" $since b744 $dep_from
						"wrong stream size test for BOM",
					/ DLDI "cast to %std::streamoff on position"
						@ "function %Seek"
						*// To eliminate warning: [-Wsign-conversion] when \
							compiler is not able to analyze the value is \
							always positive.
				)
			),
			/ %Core $=
			(
				/ %YCoreUtilities $=
				(
					* $lib "wrong cast location"
						@ "function template %CheckUpperBound" $since b703,
					* $comp "wrong common types for types equivalent to \
						%std::uint64_t mixed with signed integers" @ "function \
						templates %(CheckUpperBound, CheckLowerBound)" $since
						b744 $dep_from "hard-coded widen integer limitation"
						// Also to eliminate warning: [-Wsign-conversion].
				),
				* "wrong constructed value always with %Container or being \
					ill-formed for data member %Value by constructor with 3 \
					tuple parameters" @ "class %ValueNode" $since b735
			)
		),
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ "1st parameter type" @ "function %Eval" -> 'TermNode&'
						~ 'const string&',
					/ "function template %CallUnary supported functor with \
						parameter omission" ^ "%ystdex::make_expanded"
				),
				/ @ "function %EvaluateIdentifier" $=
				(
					+ 'const' @ "2nd parameter type",
						// Context would not be modified here, though it can \
							be modified elsewhere (e.g. for literal passes).
					/ DLDI "simplified" ^ $dep_from "%EvaluateTermNode"
				),
				+ "function %EvaluateTermNode",
				/ DLDI "simplified %ReduceCheckedClosure" ^ $dep_from
					("%LiftTerm" @ %NPLA)
			),
			/ %NPLA $=
			(
				/ DLDI "simplified function %LiftTerm#1"
					^ "%TermNode::SetContent",
				+ "2 function %LiftTerm overloads with %ValueObject parameters"
					$dep_to "new term lifting overloads"
			)
		)
	),
	* $comp "BOM ignored and encoding detected wrongly for file with size \
		greater than 4" @ %YReader.ShlTextReader $since b744 $dep_from
		%YFramework.YSLib.Service.TextManager,
	/ %YBase.YStandardEx $=
	(
		/ @ "transformation trait %make_widen_int" @ %CStandardInteger $=
		(
			/ DLDI "simplified %make_widen_int" ^ "%_t",
			* "hard-coded type limitation" $orig (@ "%fixed_multiplicative"
				@ %Rational $since b260) $dep_to
				"hard-coded widen integer limitation"
			(
				/ "supported detection for arbitrary 64-bit type boundary";
				- "specialization for hard-coded 64-bit types";
				* $comp "signedness argument ignored when the type argument is \
					in %std::(int64_t, uint64_t)" $since b587
			)
		),
		* $comp "signedness lost and only %std::(int64_t, uint64_t) supported \
			as 64-bit integers for intermediate result"
			@ "class template %fixed_point" @ %Rational $since b260 $dep_from
			"hard-coded widen integer limitation"
	)
),

b744
(
	/ %YFramework.YSLib $=
	(
		/ %Service $=
		(
			/ @ "class %TextFileBuffer" @ %TextManager $=
			(
				/ "protected data member %File" -> 'std::streambuf&'
					~ 'std::istream&',
				/ "type" @ ("1st parameter" @ "constructor", "protected data \
					member %File") -> 'std::streambuf&' ~ 'std::istream&';
				+ "function %Seek",
				/ $forced "functions %TextFileBuffer::(operator[], \
					GetIterator, GetPosition)"
				(
					- "assertion to ensure nonnull file";
					/ $impl "sentry" ^ "%std::istreambuf_iterator"
						~ "%std::istream_iterator",
					/ $impl "simplified" ^ $dep_from "%Seek";
					* $comp "missing error handling for seeking failure" $since
						b273
				)
			)
		),
		/ DLDI "simplified function templates %(CheckLowerBound, \
			CheckUpperBound)" @ %Core.YCoreUtilities ^ $dep_from
			"%ystdex::common_int_type" @ %YBase.YStandardEx.CStandardInt
	),
	/ @ "class %DualScreenReader" @ %YReader.DSReader $=
	(
		+ "function %ShowError",
		/ DLDI "function %LoadText" $=
		(
			(
			/ $forced "buffer initialization argument";
			- "set of %std::ios_base::skipws" 
			),
			/ "showed different error message when buffer loading failed"
				^ $dep_from "%ShowError"
		),
		* $doc "missing parameter name" @ "'\param' command"
			@ "function %ScrollByPixel" $since b292
	),
	/ %YBase.YStandardEx $=
	(
		(
		/ "transformation trait %wrap_handler" @ %AnyIterator >> %Any;
		/ $lib "merged 2 constructor templates with single parameter %any"
			^ "%wrap_handler" @ %Any
		),
		+ "transformation trait %common_int_type" @ %CStandardInt
	)
),

b743
(
	/ %YBase.YStandardEx $=
	(
		/ %Any $=
		(
			+ "class %void_any_ref",
			* "formed reference as parameter type for %ref_handler due to \
				%unwrap_reference_t" @ "constructor template with reference \
				wrapper parameter" @ "class %any" $since b732
		),
		/ %AnyIterator $=
		(
			/ "reference type argument %void_ref"
				@ "alias template %input_monomorphic_iterator" -> $dep_from
				("%void_ref_any" @ %Any),
			(
			/ @ "all iterator handler class templates %(iterator_handler, \
				input_iterator_handler, forward_iterator_handler, \
				bidirectional_iterator_handler) $=
			(
				+ "reference as 2nd template parameter";
				/ "embedded reference type into dereference operation" $dep_from
					"class %any" @ %Any
			);
			/ $forced DLDI "embedded reference type into handler type"
				@ "constructor template"
				@ "class templates %(any_input_iterator, any_forward_iterator)";
			/ $comp "supported non reference types used as %reference"
				@ "class template %any_input_iterator"
			);
			* $comp "missing supported for non reference types as %reference"
				@ "alias template %input_monomorphic_iterator" $orig (@ "class \
				template %input_monomorphic_iterator" @ %Iterator $since b247)
		)
	),
	/ %YFramework.YSLib $=
	(
		+ "functions %(VerifyEncoding; DetectBOM) overload for \
			'std::streambuf&'" @ %Service.TextFile,
		/ "emergent expected exception logging" @ "!defined %NDEBUG"
			@ "member function %Application::OnGotMessage" @ %Core.YApplication
			^ "%ExtractAndTrace"
	),
	/ DLD "minor patches" @ "%Readme.en-US.txt"
		@ %Tools.(CreationTimeManager, PredefinedMacroDetector)
),

b742
(
	/ $lib "move contructor non-throwing exception specification conditionally"
		@ "class template %mapped set" @ %YBase.YStandardEx.Set,
		// This is depends on the underlying container implementation, which \
			can be either throwing or non-throwing according to ISO C++.
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				* "missing 'YF_API'" @ "function %Eval" @ "namespace %A1" $since
					b741,
				/ @ "class %REPLContext" $=
				(
					+ "3 function %Process";
					/ DLDI "simlified %Perform" ^ "%Process"
				)
			),
			/ "avoided locale and state operations"
				@ "function %DecomposeMakefileDepList" @ %Dependency $=
			(
				+ "overload for %std::streambuf",
				/ DLDI "simplified" ^ "%std::istreambuf_iterator"
					~ "%std::istream_iterator";
				- "set of %std::ios_base::skipws"
			)
		),
		/ %YCLib $=
		(
			/ "2nd parameter type" @ "function EncodeArg#2" -> 'string_view'
				~ 'const string&',
			+ "function %Echo" @ %YCLib.Debug
		),
		+ 'using platform::Echo;' @ %YSLib.Adaptor.YAdaptor $dep_from
			%YCLib.Debug,

	)
),

b741
(
	/ "supported destination prefix after '-xd,' as prefix of %SHBOPT default \
		value" @ "SHBuild-BuildApp.sh" @ %Tools.Scripts,
	+ "%SHBuild_BuildPrefix with default value '.$SHBuild_Host_Platform/'"
		@ "%build-all.sh" @ %YDE,
		// To support build files for different hosts in same repository by \
			default.
	/ %YFramework $=
	(
		/ @ "namespace %Forms" @ %NPL.NPLA1 $=
		(
			(
			/ "supported parameter pack" @ "function templates %(CallUnary, \
				CallUnaryAs)",
			/ "supported redundant parameters" ^ "%ystdex::make_expanded"
				$dep_from %YBase.YStandardEx.Functional;
			+ "class templates %(UnaryExpansion, UnaryAsExpansion)";
			/ "function template %RegisterUnaryFunction" -> "2 function \
				templates with optional type parameter and additional \
				parameter pack"
			),
			* $lib "wrong 1st parameter type"
				@ "function %RegisterUnaryFunction" $since b736 $=
				// This is currently compatible because %TermNode and \
					%ContextNode are same type, which should not be relied on.
				(/ 'TermNode&' -> 'ContextNode&'),
			+ "functions %(CallSystem, Eval)"
		)
	),
	/ "removed return type check" @ "function templates" @ "class template \
		specializations %call_projection" @ %YBase.YStandardEx.Functional
		// This is consistent with %ystdex::expanded_proxy. And now return \
			type parameter is not used at all.
		$= (/ "return type in function template signatures"
			-> "'auto', trailing-return-type")
),

b740
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			+ "class %REPLContext" @ %NPLA1,
			+ "function template %LookupName with 'ContextNode&' paraemter"
				@ %NPLA
		),
		* "ill-formed function %UpdatePixmapBuffer" @ %YCLib.XCB $since b728,
		/ DLDI "simplified functions %(FetchDefaultFontCache, \
			FetchMIMEBiMapping)" @ %Helper.Initialization ^ "%FetchRoot"
			~ "%FetchEnvironment"
	),
	/ DLDI 'source' -> '.' @ "%SHBuild-YSLib.sh" @ %YReader,
	/ %Tools $=
	(
		/ %Scripts $=
		(
			/ $re_add(b739) "specified build subdirectory with host platform \
				name" @ "%(SHBuild-self-host.sh, SHBuild-self-host-DLL.sh)"
				^ ("%SHBuild_CheckHostPlatform" @ "%SHBuild-common.sh")
				%Scripts,
				// The DLL host script is still relying on hard-coded library \
					location.
			* "wrong quoted paths for headers in command line"
				@ "%SHBuild-YSLib-common.sh" $since b739,
			/ @ "%SHBuild-build.sh" $=
			(
				+ "vairable %SHBuild_Output with default value 'SHBuild' as \
					output path argument",
				(
				/ DLDI "simplified" ^ $dep_from ("%SHBuild_CheckPCH"
					@ "%SHBuild-common.sh") ~ "%SHBuild_CheckPCH_";
				- "function %SHBuild_CheckPCH_"
				),
				+ "vairable %SHBuild_PCH_stdinc_h with default value \
					'stdinc.h' as output path argument for following \
					compiliation"
					// This is actually unnecessary for headers to be \
						included, but necessary for generated '.gch' files, to \
						avoid files from different host clash. Note different \
						configuration in same host is still not supported.
			),
			/ @ "%SHBuild-YSLib-common.sh" $=
			(
				/ $forced "updated default path of stage 1 SHBuild"
					$dep_from "%install-sysroot.sh",
				- "function %SHBuild_CheckPCH_" $dep_from
					"%(SHBuild-YSLib.sh, SHBuild-YSLib-debug.sh)"
			),
			(
			+ "function %SHBuild_CheckPCH" @ "%SHBuild-common.sh";
			/ DLDI "simplified %(SHBuild-YSLib.sh, SHBuild-YSLib-debug.sh, \
				SHBuild-build.sh)" ^ "%SHBuild_CheckPCH" ~ "%SHBuild_CheckPCH_"
			)
		),
		* "wrong command test" @ "%install-sysroot.sh" $since b739
			$= ('/dev/nul' -> '/dev/null'),
		/ @ "%install-sysroot.sh" $=
		(
			/ "normalized YSLib base path %YSLib_BaseDir",
				// To avoid redundant "Tools/Scripts/../.." causing %__FILE__ \
					too long, e.g. in assertions strings.
			/ "switched stage 1 SHBuild path by redirecting tool path as \
				'$YSLib_BuildDir/.stage1/SHBuild' in following commands and \
				setting %SHBuild_Output with this path for %SHBuild-build.sh \
				invocation",
				// This allows multiple hosts of stage 1 SHBuild coexisted in \
					same repository.
			/ "exported %SHBuild_PCH_stdinc_h as path \
				'$SHBuild_S1_BuildDir/stdinc.h'"
		)
	),
	/ %Test $=
	(
		/ "set test build directory as \
			'$YSLib_BaseDir/build/$SHBuild_Host_Platform/.test'",
			// Also to avoid files for different hosts clash.
		(
		* "ill-formed 1 case for %ystdex::compose"
			@ "group %YStandard.Functional" @ %YBase $since b735
			$= (/ 'compose' -> 'compose_n');
		* $comp "failed to build" @ %Test.YBase $since b735 $dep_from
			%YBase.YStandardEx.Functional $dep_to "compose test"
		),
		* "undefined behavior due to out-of-lifetime temporary access"
			@ "2 cases" @ "group %YStandard.String" $since b640
			// Occasionally it did not crash on MinGW32. It would crash on
			//	Arch Linux x86_64.
	),
	* "wrong return type" @ "function template %compose_n#1"
		@ %YBase.YStandardEx.Functional $since b735,
	+ $re_add(b730) $repo "bookmark 'engineering-fault-b739'" @ b735
		@ "engineering fault bookmarks" $dep_from "compose test"
		// Failed to build test.
),

b739
(
	/ %Tools $=
	(
		/ %Scripts $=
		(
			+ "function %SHBuild_CheckHostPlatform" @ "%SHBuild-common.sh",
			/ @ "%SHBuild-bootstrap.sh" $=
			(
				* "unknown %SHBuild_Puts evaluated before including the source"
					$since b735,
				* "wrong Win32 source file" $since b735
			),
			/ "asserted %YSLib_BuildDir as nonempty variable"
				@ "%SHBuild-YSLib-common.sh",
				// This should be provided externally, e.g. from \
					%install-sysroot.sh.
			/ "path for headers and libraries" @ "%(SHBuild-YSLib-common.sh, \
				SHBuild-bootstrap.sh, SHBuild-YSLib-debug.sh, SHBuild-YSLib.sh)"
				^ "absoluted paths based on %YSLib_BaseDir" ~ '../..',
			/ @ "function %SHBuild_BuildApp" @ "%SHBuild-BuildApp.sh" $=
			(
				+ "assertion to ensure non empty path %SHBuild_AppBaseDir",
				+ "printed value of %SHBuild_AppBaseDir before build"
			)
		),
		/ @ "%install-sysroot.sh" $=
		(
			/ "specified build subdirectory with host platform name and \
				exported as %YSLib_BuildDir" $dep_from
				("%SHBuild-YSLib-common.sh" @ %Scripts)
				^ ("%SHBuild_CheckHostPlatform" @ "%SHBuild-common.sh");
				// This allows multiple hosts coexisted in same repository. \
					Note stage 1 SHBuild is not covered here. Since the build \
					directory is changed to one of the subdirectories, \
					relative paths in other scripts may be invalidated, so \
					absolute paths should be used instead in those scripts.
			/ "ensured %YSLib_BuildDir existd by 'mkdir -p'"
			/ "hid stage 1 SHBuild test command",
			/ "quoted found stage1 SHBuild path in output message",
			/ "exported %YSLib_BaseDir"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			* "ill-formed constructor %Terminal" @ !"platform %Win32" @ %Host
				$since b720,
			/ DLD "function %platform_ex::LogAssert" @ %Debug
				// To avoid warning for %YB_NONNULL from compiler confused by \
					try-catch statement.
			/ DLD "cast to %size_t" @ !"platform %(DS, Win32)"
				@ "function %ReadLink" @ %FileSystem,
				// To eliminate warning: [-Wsign-conversion] when the compiler \
					is not able to analyze the value is always positive.
			* "ill-formed constructor %MappedFile when %UniqueFile size is not \
				wider than %size_t" @ %MemoryMapping $since b709 $=
				(/ DLDI ^ ("%ystdex::not_widen" @ %YBase.YStandardEx.Cast)
					~ "%ystdex::narrow")
		),
		/ "supported lossless encoding" @ "static function template \
			%EncodeChar" @ "struct %UCSMapperBase" @ %CHRLib.StaticMapping
			^ $dep_from ("%ystdex::not_widen_cast" @ %YBase.YStandardEx.Cast)
			~ "%narrow_cast"
	),
	/ "specified build subdirectory with host platform name"
		@ "%SHBuild-YSTest.sh" @ %YReader
		^ ("%SHBuild_CheckHostPlatform" @ "%SHBuild-common.sh" @ %Tools),
	/ %YBase.YStandardEx $=
	(
		/ %Cast $=
		(
			/ @ "function template %narrow_cast" $=
			(
				// These are complained by G++ 6.3. However, G++ 5.2 (and \
					older versions) does not complain them at all.
				/ DLD "removed unused field for cast test" ;
					// To eliminate warning: [-Wmissing-field-initializers].
				* "wrong test result retuned caused ill-formed instantiation"
					$since b709
			),
			+ "function templates %(not_widen_cast; not_widen)"
		),
		/ $dev "disabled warning '-Wnonnull-compare' by pragma for G++ 6 above"
			@ %CAssert,
		* $revert(b738) "invalid 'yconstfn'" @ "(function, function templates) \
			%(toupper, tolower)" @ %CCType $since b738
	)
),

b738
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ "removed '#' as graphical delimeter"
				@ "function %IsGraphicalDelimeter" @ %Lexical,
			/ %NPLA $=
			(
				- "numeric literal detection" @ "function %CategorizeLiteral";
				/ ("enumerator %Numeric" -> "%Extended")
					@ "enum class %LiteralCategory",
					// Now extended literals are not distinguished with \
						non-literals here.
				+ "alias %LiteralPasses",
				+ "trailing parameter pack support"
					@ "function template %InvokePasses"
			),
			/ %NPLA1 $=
			(
				/ $dep_from ("%InvokePasses" @ %NPLA) $=
				(
					/ $forced DLDI
						"functions %(InvokeGuard, InvokeLeaf, InvokeList)",
					+ "function %InvokeLiteral"
				),
				+ "function %AccessListPassesRef",
				/ @ "function %EvaluateLeafToken" $=
				(
					/ "evaluated string literal to string value",
					* "missing assertion" $mismatch $since b736,
					+ "handling for literal passes" ^ $dep_from "%InvokeLiteral"
				//	/ "evaluated numeric literals" ^ $dep_from
					//	"%EvaluateExtended",
				//	/ "handling for tokens beginning with '+', '-' or \
					//	'#' for possible extended literals" $dep_from
					//	("%LiteralCategoryCategory" @ %NPLA)
				)
			)
		)
	),
	/ %YBase.YStandardEx.CCharacterType $=
	(
		+ DD "MSVCRT bug workaround" @ "function %isdigit",
		+ 'ynothrow' @ "functions %(iscntrl_C0, iscntrl_C1, iscntrl_ASCII, \
			iscntrl_ISO8859_11, iscntrl_ISO8859_1, isprint_ASCII, \
			isprint_ISO8859_1, isprint, isdigit, tolower, toupper), function \
			templates %(tolower, toupper)",
		/ "all 'inline'" @ "function, function templates %(tolower, toupper)"
			-> 'yconstfn'
	)
),

b737
(
	/ %YBase.YStandardEx $=
	(
		/ "class %invalid_construction, function %throw_invalid_construction"
			@ "namespace %any_ops" @ %Any >> ("namespace %ystdex" @ %Exception),
		+ "function template %try_new" @ %Memory,
		* "ill-formed member function template %(emplace_with_handler; all 3 \
			emplace)" @ "class %any" @ %Any $since b687
	),
	/ %YFramework $=
	(
		/ %YSLib.YObject $=
		(
			/ "function %clone supported noncopyable types"
				@ "class template %ValueHolder" ^ $dep_from
				("%ystdex::try_new" @ %YBase.YStandardEx.Memory),
			+ "3 function templates %(EmplaceFromCall, EmplaceFromInvoke)"
				@ "class %ValueObject"
		),
		/ %NPL $=
		(
			- "function %Analyze with %string_view parameter" @ %SContext,
				// To avoid ambiguity.
			/ @ "namespace %Forms" @ %NPLA1 $=
			(
				/ "function templates %(CallUnary, CallUnaryAs) supported \
					setting value to term" ^ $dep_from
					("%ValueObject::EmplaceFromCall" @ %YSLib.YObject)
			)
		),
		* "missing consle encoding conversion from UTF-8" @ "default sender"
			@ "static member function %Logger::FetchDefaultSender"
			@ %YCLib.Debug $since b498
	),
	/ $revert_ex(b661) ^ "%yfsig" ~ '"::main"' @ "error description"
		@ "exception filtering call" @ "main function" @ %YReader.Main
		// To be consistent with other programs except %Tools.SHBuild.Main \
			which has own customized handling of error filter. Note only GUI \
			program needs to call %TraceForOutermost.
),

b736
(
	/ %YFramework.NPL.NPLA1 $=
	(
		/ @ "namespace %Forms" $=
		(
			+ "function template %RegisterUnaryFunction",
			/ "function %DefineOrSetFor moved term instead of value"
				// To allow unevaluated expressions like quoted \
					expressions, also to be same to lambda parameters \
					passing.
		),
		+ "functions %(EvaluateLeafToken; ReduceLeafToken; \
			SetupDefaultInterpretation)",
		/ DLDI "simplified functions %(TransformForSeparator, \
			TransformForSeparatorRecursive)"
	)
),

b735
(
	/ %YBase.YStandardEx $=
	(
		/ %Functional $=
		(
			+ 'yconstfn' @ "all static member functions"
				@ "class template %call_projection specializations";
			/ $lib 'inline' @ "function template %apply" -> 'yconstfn',
			(
				// Multivariate compositions should be used with new specific \
					templates.
				+ "class template %composed_n";
				+ "2 function templates %compose_n",
				(
				/ "first level composition" @ "alias template %get_less"
					^ "%composed_n" ~ "%composed";
					// The change is intended: if the front levels of the \
						compositions have meaning of "broadcast" to all \
						parameters, it should be with explicit '_n'.
				/ "changed last level parameter pack expansion to 1st level"
					@ "class template %composed"
					// This is changed because of preprosition "on" for 1st \
						parameter is better for the new behavior for \
						multivariate cases, i.e. with a unary function as 1st \
						argument, it should be 'compose' rather than \
						'compose_n'.
				)
			),
			+ 'yconstfn' @ "function template %compose#1",
			+ "noexcept-specification" @ "function template %operator()"
				@ "class template %composed",
			+ "class template %generalized_composed; function template \
				%generalized_compose"
		),
		+ "function %make_from_tuple" @ %Tuple
	),
	/ %YFramework $=
	(
		/ DLDI "simplified 3 constructor templates %ValueNode with tuple \
			parameters" @ %YSLib.Core.ValueNode ^ $dep_from
			"%ystdex::make_from_tuple" @ %YBase.YStandardEx.Tuple,
		/ @ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ @ "namespace %Forms" $=
				(
					/ @ "function %EvaluateIdentifier" $=
					(
						/ $revert(b733) "1st parameter type 'ValueObject&'"
							-> 'TermNode&';
						/ "handled %TermNode as value to be reduced again"
					),
					+ "functions %(ExtractLambdaParameters; Lambda)",
					+ "function %DefineOrSetFor";
					+ "function %DefineOrSet"
				),
				+ "functions %(ReduceChecked; %ReduceCheckedClosure)"
					^ $dep_from ("%CheckedReduceWith" @ %NPLA),
				/ @ "namespace %Forms" $=
				(
					+ "function %DefineOrSetFor",
					(
					+ "function %ExtractLambdaParameters";
					+ "function %Lambda" ^ $dep_from
						("%CheckedReduceWith" @ %NPLA)
					);
					+ "function %DefineOrSet"
				)
			),
			+ "function template %CheckedReduceWith" @ %NPLA
		),
	),
	/ %Tools.Scripts $=
	(
		* $re_add(b610) $build
			"missing updating %LIBS for %YFramework.YCLib.NativeAPI"
			@ "%SHBuild-bootstrap.sh" @ %Tools.Scripts $since b713,
		* "incomplete message output" @ "function %SHBuild_BuildGCH"
			@ "%SHBuild-common.sh" $since b732 ^ "%SHBuild_Puts" ~ 'printf'
	)
),

b734
(
	/ %YFramework $=
	(
		/ @ %NPL $=
		(
			/ @ "namespace %Forms" %NPLA1 $=
			(
				+ "function templates %(CallUnary; CallUnaryAs)",
				/ "preserved first child term" @ "function %ExtractModifier"
			),
			/ %NPLA $=
			(
				+ "enum class %LiteralCategory; function %CategorizeLiteral",
				(
				+ "function %CheckReducible",
				/ DLDI "function %DetectReducible" ^ "%CheckReducible"
				)
			)
		),
		/ %YSLib $=
		(
			/ $forced DLDI @ "function %GetEvent" @ %UI.YWidgetEvent $dep_from
				("%search_map" @ %YBase.YStandardEx.Container),
			+ "3 functions %SetContent" @ "class %ValueNode" @ %Core.ValueNode
		),
		/ @ "Microsoft VC++ project" $=
		(
			/ $revert(b459) $dev $build "disabled warning C4800";
				// It seems that now it would not occur.
			* $dev $build "missing disabling warnings"
				@ "configuration %release" $since b459
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Set $=
		(
			* "ill-formed implementation for non-pair key"
				@ "all 2 function templates %equal_range"
				@ "using generic lookup" @ "class template %mapped_set"
				$since b678,
			* DLDI "defined wrong macro" @ !"using generic lookup" $since b680
		),
		/ %Container $=
		(
			* "unexpected overload for %search_map" $since b680
				$= (/ "%search_map with functor parameter" => "%search_map_by");
				// Also to avoid this function template recursively calling \
					itself in Microsoft VC++ with VisualCppTools \
					14.0.24604-Pre (compiler version 19.10.24604.0).
			/ $forced DLDI "function templates %(try_emplace, try_emplace_hint)"
		)
	),
	/ $dev $build "improved standard compliance"
		@ "all Microsoft VC++ projects with VC++ compiler options available" $=
	(
		+ "specified '/Zc:rvalueCast'",
		+ $re_ex(b458) "specified '/Za'";
		/ $forced "removed '/Za' for separated file relying on WinSDK headers"
			$effective @ %YFramework.('Helper_(DS)'.(DSMain.cpp, DSScreen,
			DSWindow, Shell_DS), 'YCLib_(DS)'.DSVideo,
			'Helper_(Win32)'.Win32Control, 'YCLib_(Win32)'.(Consoles, MinGW32,
			NLS, Registry), Helper.(GUIApplication, GUIShell, Environment,
			HostedUI, HostRenderer, HostWindow, Initialization, InputManager,
			ScreenBuffer, ShellHelper, YGlobal), YCLib.(Debug, FileIO,
			FileSystem, Host, HostedGUI, Input, Keys, MemoryMapping, NativeAPI,
			Timer, Video, YCommon), YSLib.Adaptor.(Font, Image))
	)
),

b733
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ $lib "simplified 'TermNode::iterator'" -> 'TNITer' $effective
				@ ("function %ReduceChildren#1" @ %NPLA1),
			/ @ "namespace %NPL::A1" @ %NPLA1 $=
			(
				+ "function %ReduceTail",
				/ @ "namespace %Forms" $=
				(
					+ "function template %ReduceWithModifier" ^ $dep_from
						("%IsBranch" @ %SContext),
					(
					/ "parameter type 'TermNode&'"
						@ "functions %(Quote, QuoteN)" -> 'TermNode&',
					+ "function %FetchArgumentN";
					/ @ "function %QuoteN" $=
					(
						/ DLDI "simplified %QuoteN" ^ $dep_from
							"%FetchArgumentN",
						/ "returned number of term arguments",
					)
					),
					(
					/ @ "all 2 functions %ExtractModifier" $=
					(
						/ "removed first node at first";
						+ $doc "required nonempty term node",
						* $comp "ordinal of subterm" $mismatch $since b732
					);
					/ $forced DLDI "function template %ReduceWithModifier"
					),
					/ DLDI "assertion" @ "function %Quote" ^ $dep_from
						("%IsBranch" @ %SContext)
				),
				/ DLDI "functions %(Reduce, ReduceFirst, \
					TransformForSeparator, TransformForSeparatorRecursive, \
					EvaluateContextFirst), member function \
					%FormContextHandler::operator()"
					^ $dep_from ("%IsBranch" @ %SContext),
				/ DLDI "simplified functions" ^ "%ystdex::bind1"
					~ "%std::(bind, placeholders::_1)" $=
				(
					/ "%(TransformForSeparator, \
						TransformForSeparatorRecursive)"
					/ $forced "%Reduce" $dep_from ("%DetectReducible" @ %NPLA)
				),
				(
				/ @ "class %FormContextHandler" $=
				(
					+ "data member \
						'std::function<bool(const TermNode&)> Check{};'";
					+ "constructor template with 2 parameters",
					/ "function %operator()" $=
					(
						/ "check" ^ "%Check";
						/ $comp "removed check of branch term by default"
					)
				);
				/ @ "struct %FunctionContextHandler" $=
				(
					/ DLD "class-key" -> 'class' ~ 'struct',
					/ $comp "removed check of branch term by default" $dep_from
						"%FormContextHandler::operator()",
					+ "constructor template with 2 parameters"
						@ "class %FunctionContextHandler" $dep_from
						("constructor template with 2 parameters
						@ "%FormContextHandler")
				);
				/ "function templates %(RegisterFormContextHandler, \
					ToContextHandler; RegisterFunction)" $=
				(
					/ "supported variadic parameters",
					/ $comp "removed check of branch term by default" $dep_from
						"%(FormContextHandler, \
						FunctionContextHandler)::operator()"
				);
				/ $forced DLDI "function %RegisterSequenceContextTransformer"
					$dep_from "%RegisterFormContextHandler"
					^ $dep_from ("%IsBranch" @ %SContext)
				),
				/ "1st parameter type 'TermNode&'"
					@ "function %EvaluateIdentifier" -> 'ValueObject&'
			),
			+ "functions %(IsBranch, IsLeaf, IsEmpty)" @ %SContext,
			/ %NPLA $=
			(
				/ @ "functions %(LiftFirst, LiftLast)" $=
				(
					+ "assertion" ^ $dep_from ("%IsBranch" @ %SContext);
					* $comp "nonexisted precondition" $mismatch $since b685
				),
				/ DLDI "functions %(PrintSyntaxNode, DetectReducible)"
					 ^ $dep_from ("%IsBranch" @ %SContext),
				/ "swapped 1st and 2nd parameters" @ "function %DetectReducible"
			)
		),
		/ @ "macros %(DefBitmaskAnd, DefBitmaskOr, DefBitmaskXor, \
			DefBitmaskNot, DefBitmaskAndAssignment, DefBitmaskOrAssignment, \
			DefBitmaskXorAssignment)" @ %DefBitmaskAnd $=
		(
			/ DLDI "simplified" ^ "%PDefHOp",
			+ 'ynothrow',
			/ "all 'inline'" -> 'yconstfn_relaxed'
		),
		/ DLDI "simplified function %RemoveEmptyChildren"
			@ %YSLib.Core.ValueNode ^ "%(std::mem_fn, ValueNode::operator!)"
			~ "lambda-expression" 
	)
),

b732
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA $=
			(
				/ DLI "simplified function %RemoveIdentifier" !^ 'catch',
				+ "functions %(RedefineValue, TermToName)"
			),
			/ %NPLA1 $=
			(
				+ "enumerators %(Undefined, Unspecified)" @ "enum %ValueToken",
				+ "namespace %Forms" $=
				(
					+ "functions %(Quote; QuoteCheckedN)"
					+ "function %ExtractModifier" ^ $dep_from
						("%TermToName" @ %NPLA)
				)
			)
		),
		/ %YSLib.Core $=
		(
			* "data member unexpectedly exposed" @ "class %ValueObject"
				@ %YObject $since b332 $=
			(
				/ "public data member %content" -> "private data member";
				* $comp "exposed data member name violated naming convention"
					$mismatch(Documentation.CommonRules) $since b332
			),
			+ "function %ClearTo" @ "class %ValueNode" @ %ValueNode
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ @ "function %filter_self" @ "class template %path" @ %Path $=
		(
			/ DLDI "simplified" !^ "lambda capture '&'",
			+ 'ynothrow'
		),
		/ %Ref $=
		(
			+ '&' @ "resulted %type" @ "reference wrapper specializations"
				@ "type trait %unwrap_reference",
				// To be consistent with WG21 P0318R0.
			+ "type traits %(decay_unwrap; decay_unwrap_t)"
				// See also WG21 P0318R0.
		),
		/ DLDI %AnyIterator $dep_from ("%unwrap_reference" @ %Ref) $=
		(
			/ $forced "alias %value_type"
				@ "type trait %any_ops::wrap_handler" ^ "%remove_reference_t",
			/ "simplified static assertion" @ "protected constructor \
				templates %(any_input_iterator, any_forward_iterator)"
				^ "%decay_unwrap_t" ~ "%(unwrap_reference_t, decay_t)"
		),
		/ $forced %Thunk $dep_from ("%unwrap_reference" @ %Ref) $=
		(
			/ DLDI "constructor template" @ "class template %thunk_caller",
			/ "template default argument" @ "class template %thunk"
		),
		/ DLDI "simplified constructor %any#3" %Any ^ $dep_from
			("%decay_unwrap_t" @ %Ref) ~ "%(unwrap_reference_t, decay_t)"
	),
	/ %Tools $=
	(
		/ @ "%SHBuild-common.sh" %Scripts $=
		(
			+ "function %SHBuild_Put" ^ 'printf',
			+ "function %SHBuild_Puts allowing configurable line ending by \
				external %SHBuild_EOL with default detection with %COMSPEC"
				^ 'printf'
		),
		(
		/ "all text with newline at end ensured with CR+LF for Windows \
			file output" ^ $dep_from ("%SHBuild_Puts" @ "%SHBuild-common.sh"
			~ 'echo -n' $effective @ %("install-sysroot.sh",
			("SHBuild-common.sh", "SHBuild-BuildApp.sh", "GenerateProject.sh",
			"PatchRevision.sh", "SHBuild-bootstrap.sh", "SHBuild-build.sh",
			"SHBuild-common-option.sh", "SHBuild-self-host-DLL.sh",
			"SHBuild-self-host.sh", "SHBuild-YSLib-common.sh",
			"SHBuild-YSLib.sh", "SHBuild-YSLib-debug.sh") @ %Scripts);
		* $comp $re_add(b547) "strict POSIX shell compatibility" 
			// Since 'echo -n' has unspecified behavior, it should not be used \
				by default for unknown platforms. However, 'echo -ne' is still \
				not replaced yet.
		),
		/ "command echo" ^ $dep_from ("%SHBuild_Put" @ "%SHBuild-common.sh"
			@ %Srcipts) ~ 'echo' $effective @ "%(SHBuild-common.sh, \
			SHBuild-common-options.sh, PatchRevision)" @ %Scripts
			// Now command output is no longer newline-terminated.
	)
),

b731
(
	/ %YFramework $=
	(
		/ %YCLib.FileIO $=
		(
			* "stray trailing NUL remained" @ "template function \
				specialization %FetchCurrentWorkingDirectory for %u16string"
				@ "platform %Win32" $orig
				(@ "%TryGetCurrentWorkingDirectory" $since b707)
		),
		/ %NPL $=
		(
			/ %NPLA $=
			(
				* "expcetion propageted disabled leading to %terminate called"
					@ 'YB_Use_StrictNoThrow' @ "function template %operator()"
					@ "class %PassesCombiner" $since b727
					$= (- $revert(b727) 'ynothrowv')
				* "wrong length identifier printed for %string_view not ends \
					as NTCTS" @ "constructor %BadIdentifier" $since b726,
				+ "functions %(DefineValue, RemoveIdentifier)"
			),
			/ "inline function %Deliteralize" -> "%DeliteralizeUnchecked"
			@ %Lexical,
			/ %NPLA1 $=
			(
				/ DLDI "simplified function %RegisterSequenceContextTransformer"
					^ "%RegisterFormContextHandler"
					~ "%NPL::RegisterContextHandler"
			)
		),
		* $dev "stray source file 'Source/UI/YBrush.cpp'"
			@ "Microsoft VC++ project" $since b555
	),
	/ $comp @ %YReader.ShlExplorer @ "platform %Win32" $=
	(
		* "stray trailing NUL remained" @ "function %FetchDefaultShellDirectory"
			$since b707 $dep_from %YCLib.FileIO;
		* $comp "file list entry cannot be located" @ "class %ShlExplorer"
			$since b730
			// Since there is trailing NUL and %String constructor now does \
				not use NTCTS any longer, the NUL character would be in the \
				middle of the path and path concatnation would fail, as a \
				result any path would be treated as a directory path.
	),
	/ %YBase.YStandardEx $=
	(
		* "function template %compose#2 would instantiate to itself recursively"
			@ %Functional $since b536,
		/ DLDI "constructor %bitseg_iterator" %BitSegment $=
		(
			^ 'yconstraint' ~ 'yassume',
			/ "cast to 'unsigned char'" @ "2nd initalizer"
				// To eliminate Microsoft VC++ 2015 warning: C4267.
		),
		/ @ "class template %lref" @ %Ref $=
		(
			+ 'yconstfn' @ "all defined functions",
			+ "function template %operator()"
		)
	),
	/ $re_ex(b708) $repo "glob pattern 'packages/VisualCppTools.*'"
		@ ".hgignore" -> 'packages/*'
),

b730
(
	+ $re_add(b725) $repo "bookmark 'engineering-fault-b729'" @ b728
		@ "engineering fault bookmarks",
		// Failed to build for platform %DS.
	/ %YFramework $=
	(
		/ $re_add(b729) $lib ("2nd parameter " @ "non owning constructor \
			%ImageTag" @ %Adaptror.Image, DLI "workaround for G++"
			@ %Service.Pixel) ^ "%ystdex::false_" ~ "%std::false_type",
		/ %NPL $=
		(
			/ %NPLA $=
			(
				(
				+ "enum class %ReductionStatus";
				/ "function %DetectReducible" ^ "%ReductionStatus" ~ 'bool'
				// Return type of %GEvent based passes are not changed to \
					%ReductionStatus to avoid internal compiler error: \
					"error reporting routines re-entered" in current versions \
					of G++ on instantiating passes.
				),
				/ "functions %(LookupName, FetchValue)"
					-> "function templates with template parameter as name"
			),
			/ %NPLA1 $=
			(
				/ "functions %(InvokeLeaf, InvokeList, Reduce, ReduceFirst, \
					ReplaceSeparatedChildren, EvaluateContextFirst, \
					EvaluateIdentifier)" ^ $dep_from
					("%ReductionStatus" @ %NPLA) ~ 'bool',
				/ @ "function %EvaluateIdentifier" $=
				(
					/ "3rd parameter type"
						-> "%string_view" ~ 'const string&' $dep_from
						("%FetchValue" @ %NPLA1),
					+ "assertion to ensure nonnull data pointer fo 3rd \
						parameter"
				)
			),
			/ %Lexical $=
			(
				/ DLDI "%CheckLiteral" ^ "%string_view::length"
					~ "%string_view::size",
					// To be consistent with other places.
				(
				+ "overloaded function %Deliteralize with %bool parameter";
				/ DLDI "simplified function %Deliteralize with 1 parameter"
				)
			)
		),
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ ("constructor template with \
					'const std::basic_string<_tChar>&' parameter"
					-> "constructor template with \
					'basic_string<_tChar, _tTraits, _tAlloc>'")
					@ "class %String" @ %YString $=
				(
					/ @ "parameter type" $=
					(
						- 'std::',
						+ "traits and allocator template parameter support"
					),
					/ $re(b641) "supporting character string range" ~ "NTCTS"
						$= (/ "intialization" ^ "%basic_string_view instance \
							with known length from string" ~ "%c_str()")
					// This would crash previously (since b641). It was \
						suspicious as a G++ bug, like https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67795. \
						However, this can work just now, but that bug is still \
						not fixed.
				),
				/ %ValueNode $=
				(
					/ @ "class %ValueNode" $=
					(
						+ "static functions %(ThrowWrongNameFound, \
							ThrowIndexOutOfRange)",
						+ "friend function templates %operator(==, 2 <, 2 >) \
							with template parameter as key"
							// To simplify, not all operators are supported. \
								This cannot be suppoted by %ystdex::operators. \
								It cannot be set for all types need to \
								compare, and even it can, there would be \
								ambiguity between array and %string_view \
								arguments.
					),
					+ "support for generic associative lookup"
						@ "%(AccessNode, AccessNodePtr)" $=
					(
						+ "function templates with template parameter as key \
							paired with non-inline functions",
						/ "inline functions" -> "function templates"
					),
					/ DLDI "simplified functions %AccessNode"
						^ $dep_from "%ValueNode::(ThrowWrongNameFound, \
						ThrowIndexOutOfRange)"
				)
			)
			/ "constructor template with default encoding argument"
				@ "class %Path" @ %Service.FileSystem
				-> "2 constructor templates without default argument"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ $re_add(b729) DLDI "simplified" @ %(Cast, Container, Enum, Future,
			Operators, Pointer, Rational, Ref, TypeTraits, String, Variadic,
			Utilities) ^ "%(false_, true_)" ~ "%std::(false_type, true_type)",
		* "missing 'const'" @ "%operator()" @ "class templates %fseq::(plus, \
			minus)" @ %IntegerSequence $since b728
	)
),

b729
(
	/ %YFramework $=
	(
		/ %YCLib.Video $=
		(
			/ $impl ^ "nested %(integer, array)" ~ "%(IntegerType, ArrayType)"
				@ "class templates %(BGRA, RGBA, ARGB)" $dep_to
				"simplified aliases",
			/ "class %template %AXYZValueTrait" -> "%AXYZValueTraits" $=
			(
				- "aliases %(IntegerType, ArrayType)" $dep_from
					"simplified aliases",
				- $dev "static assertion"
					// This is covered by %ystdex::bitseg_trait implementation.
			),
			/ "alias templates %(AXYZTrait, XYZATrait)"
				=> "%AXYZTraits, XYZATratis",
			/ "member alias %Trait" @ "class templates %(BGRA, RGBA, ARGB)"
				=> "%Traits";
			(
			+ "class template %PixelQuadruple";
			/ "class templates %(BGRA, RGBA, ARGB)"
				-> ("alias templates" ^ "%PixelQuadruple")
			+ "alias template %ABGR" ^ "%PixelQuadruple"
			)
		),
		/ %YSLib $=
		(
			/ $forced $re_ex(b728) %YAdaptor.Adaptor $dep_from %YCLib.Video $=
			(
				/ 'using platform::AXYZTrait;' -> 'using platform::AXYZTraits;',
				/ 'using platform::XYZATrait;' -> 'using platform::XYZATraits;'
			),
			/ DLDI "simplified %HasOwnershipOf" @ %Core.YObject
				!^ "%ystdex::bool_constant"
			),
			/ %Service $=
			(
				/ $lib %(YBrush, YBlit) ^ "%ystdex::(bool_, true_, false_)"
					~ "%std::(bool_constant, true_type, false_type)"
				/ $forced $re_ex(b728) "workaround" @ %YPixel $dep_from
					%Adaptor.YAdaptor,
				/ $forced $impl "class template %BlitAlphaPoint" $dep_from
					%YCLib.Video,
				(
				/ %YPixel $=
				(
					* "missing update of %Drawing::MaskTrait" $since b728,
					* "wrong %GBlender specialization instiated for pixel type \
						with masked format XYZA5551" $since b728 $dep_from
						%Adaptor.YAdaptor;
					* $comp "ill-fored specialization %GBlender"
						@ '!YB_IMPL_GNUCPP' $since b728
				);
				* "assertion failed"
					@ "function template %BlendComponent instantiation"
					@ %ImageProcessing @ "platform %DS" $since b728
				)
			)
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %BitSegment $=
		(
			/ "%(bitseg_trait, mapped_bitseg_trait)"
				=> "%(bitseg_traits, ordered_bitseg_traits)",
			/ @ "class template %ordered_bitseg_traits" $=
			(
				+ "member templates %(inversed_map; \
					inversed_mapped_component_t)",
				+ $dev "static assertion to ensure index count equal to \
					component count"
			)
		),
		/ %TypeTraits $=
		(
			(
			+ "alias template %bool_";
			+ "aliases %(true_, false_)";
			/ DLDI "simplified alias template %bool_constant"
			),
			+ "alias templates %(char_, int_, llong_, long_, short_, uint_, \
				ullong_, ulong_, ushort_, ptrdiff_t_, size_t_)"
		),
		* "missing BaseCharacteristic" @ "transformation trait \
			%make_signed_c" @ %CStandardInteger $mismatch $since b590
			$= (/ DLDI "member %type" -> "base class"),
		/ DLDI "simplified integral constant types" @ %(CStandardInteger,
			BitSegment, Functional, Placement, Tuple, Variadic, Any, Pointer,
			Rational, TypeOperation, TypePun) ^ $dep_from
			("%(size_t_, true_, false_, bool_)" @ %TypeTraits)
			~ "%(integral_constant, true_type, false_type, bool_constant)",
		/ DLDI "simplfied" @ %Cast !^ "%bool_constant"
	)
),

b728
(
	/ %YFramework $=
	(
		/ DLDI "cast for parameter" @ "function %FetchModuleFileName"
			@ %'YCLib_(Win32)'.MinGW32,
			// To eliminate Clang++ warning: [-Wshorten-64-to-32].
		/ %YCLib.Video $=
		(
			/ "aliases %(BType, GType, RType)" @ "trait %XYZATrait"
				=> "%(XType, YType, ZType)",
			(
			+ "inline namespace %IndexSpace" $=
			(
				+ "namespace %AXYZComponents"
					$= (+ "enum %AXYZ");
				+ "namespace %AXYZMapping"
					$= (+ "enum %ABGR"),
				+ "namespace %AZYXMapping"
					$= (+ "enum %ABGR")
			);
			/ "class templates %(XYZATrait, XYZAMaskTrait, AXYZMaskTrait)"
				-> "%(class template AXYZValueTrait; aliase templates \
				%(XYZATrait, %AXYZTrait))" ^ $dep_from
				("%ystdex::mapped_bitseg_trait" @ %YBase.YStandardEx.BitSegment)
				$dep_to "merged mask traits"
			);
			(
			/ $forced @ "class templates %(BGRA, RGBA, ARGB)" $=
			(
				+ "enum %ComponentMapping";
				+ "aliases %(AType, BType, GType, RType)",
				- 'Trait::' @ "component type names",
				/ "%(Trait, MaskTrait)" -> "%Traits"
			);
			/ DLDI "constructors %(BGRA, RGBA, ARGB)"
			),
			* "parameter types" @ "constructor with component parameters"
				@ "class template %RGBA" $since b441,
		),
		/ $forced %YSLib $dep_from "merged mask traits" $=
		(
			/ %Adaptor.YAdaptor $=
			(
				/ 'using platform::XYZAMaskTrait;'
					-> 'using platform::XYZATrait;
				/ 'using platform::AXYZMaskTrait;'
					-> 'using platform::AXYZTrait;
			);
			/ DLDI "workaround for GCC" @ "class template %GBlender"
				@ %Service.YPixel
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "namespace %fseq" $=
		(
			+ "function templates %(front, pop_front, 2 fold, 2 vfold) for \
				%(empty_base, integer_sequence) sequences"
				@ %(Variadic, IntegerSequence),
			+ "functors %(plus, minus)" @ %IntegerSequence
		),
		+ "traits templates %(bitseg_trait; mapped_bitseg_trait)" @ %BitSegment
			^ $dep_from ("%fseq::(fold, plus, vfold)" @ %IntegerSequence)
	)
),

b727
(
	/ %YFramework $=
	(
		+ 'ynothrowv' @ "member function %PassesCombiner::operator()"
			@ %NPL.NPLA,
		/ %YCLib $=
		(
			* "ill-formed 'yconstfn' due to tag with virtual bases as parameter"
				@ $since b693 $=
			(
				+ "macro %YCL_Tag_constfn" @ %YCommon;
				/ "all functions with tag type" ^ "%YCL_Tag_constfn"
					~ 'yconstfn' $effective
					@ "%(FetchSeparator_P, IsSeparator_P)" @ %FileSystem
					// Also to avoid Clang++ errors like "function's 1st \
						parameter is not a literal type".
			),
			- DLDI "inclusion conditions ('__GLIBCXX__ > 20140922', \
				'YB_IMPL_GNUCPP >= 50000 && __GLIBCXX__ > 20140922')" @ %FileIO
				$dep_from %Documentation.Dependencies
		),
		/ %YSLib $=
		(
			/ %Service.File $=
			(
				/ @ "class %SharedInputMappedFileStream" $=
				(
					- "workaround" $dep_from %Documentation.Dependencies;
					* $comp "workaround did not support Clang++ with libstdc++ \
						4.9" $since b724,
				),
				* "constructor templates %UniqueLockedOutputFileStream \
					redefined if the implementation uses \
					'std::ios_base::openmode' same to 'int'" $since b724
					// For example, Microsoft VC++ 2015.
					$= (/ "swapped first two parmeters" @ "constructor#2")
			),
			/ DLDI "type conversion for font metrics range check" %Adaptor.Font,
				// To eliminate G++ warning: [-Wsign-compare].
			- DLDI "inclusion condition \
				'defined(_GLIBCXX_DEBUG) && YB_IMPL_GNUCPP < 40902'"
				@ %UI.TreeView $dep_from %Documentation.Dependencies
		),
		/ $foced DLDI "function %SaveConfiguration" @ %Helper.Initialization
			$dep_from ("%UniqueLockedOutputFileStream" @ %YSLib.Service.File)
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %TypeOperation $=
			(
				+ "metafunctions %(min_, max)",
				- "inclusion condition 'YB_IMPL_GNUCPP >= 40600'"
			),
			(
			/ "loosed requirement of %DefaultConstrucible of token type"
				@ "class %tagged_value" @ %Placement;
			* $comp $impl "ill-formed reference token type initialization"
				@ "class tmplate %state_guard_impl" @ %ScopeGuard $since b718
			),
			- "inclusion condition 'YB_IMPL_GNUCPP >= 50000'"
				@ %(Cast, TypeTraits) $dep_from %Documentation.Dependencies,
			- DLDI "inclusion conditions \
				'YB_IMPL_GNUCPP && YB_IMPL_GNUCPP < 50000', \
				'!(YB_IMPL_GNUCPP && YB_IMPL_GNUCPP < 50000)'"
				@ %Iterator $dep_from %Documentation.Dependencies
		),
		/ %LibDefect.Exception $=
		(
			/ DLDI "all 'throw()'" -> 'noexcept',
				// To eliminate Clang++ warning: [-Wdeprecated].
			+ "platform %Android Clang++ support" $=
			(
				+ "workaround for lacking of %__ARM_EABI_UNWINDER__",
				/ "renamed fake atomic routines"
					// Otherwise Clang++ 3.5 will crash.
			)
		),
		/ %CMath @ "Clang++" ^ 'inline' ~ 'constexpr'
			// To avoid Clang++ error: [-Winvalid-constexpr]. See \
				https://llvm.org/bugs/show_bug.cgi?id=18327 for details.
	),
	/ %Tools $=
	(
		/ "updated toolchain version for NDK r10c" @ "command line options"
			@ "%make-clang-android.sh" $=
		(
			/ '--toolchain=arm-linux-androideabi-4.9'
				-> '--toolchain=arm-linux-androideabi-5',
			/ '--llvm-version=3.5' -> '--llvm-version=3.7'
		),
		+ "exported %TARGET_LIB_PATH" @ "%Toolchain.Android.mk" @ %Script
	),
	(
	/ "supported standalone toolchain from CrystaX NDK"
		~ "Android NDK" @ "Makefile" @ "platform %Android" @ %YReader
	(
		+ "%LIBCRYSTAX_STATIC" $dep_from %Tools.Script;
		+ "stub library 'libcrystax.a' generation for static linking";
			// Like 'sources/crystax/libs/empty/libcrystax.a' in CrystaX NDK \
				10.3.2.
		+ "static libcrystax support" $dep_from %'3rdparty'
	);
	+ $doc "removed G++ 4 support" @ %Documentation.Dependencies;
	/ DLDI "simplified member function %TextInfoBox::Refresh"
		@ %YReader.ShlReader
	)
),

b726
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ "functions %(EvaluateGuard, EvaluateLeafPasses, \
					EvaluateListPasses)"
					=> "%(InvokeGuard, InvokeLeaf, InvokeList)",
				/ $forced "function %RewriteLiteral" -> "%EvaluateIdentifier"
					$dep_from ("%UndeclaredIdentifier" @ %NPLA)
					// This exception should not necessarily relate to \
						declarations. Unknown identifier is not always \
						undeclared. Duplicate identifier may be not allowed in \
						some contexts while duplicate declarations are allowed.
				/ DLDI "simplified function %ReplaceSeparatedChildren"
					^ "%ystdex::bind1" ~ "%std::(bind, placeholders::_1)",
				+ "function %RegisterSequenceContextTransformer",
				/ "threw %InvlidSyntax for term container without sufficient \
					children" @ "function %ReduceArguments"
					~ "threw %LoggedEvent",
				+ "function template %RegisterFormContextHandler",
				/ $forced DLDI "simlified function %Reduce" $dep_from
					("%DetectReducible" @ %NPLA,
					"%ystdex::bind1" ~ "%std::(bind, placeholders::_1)")
			),
			/ %NPLA $=
			(
				- $revert(b691) "function %ThrowArityMismatch",
					// Similar functions would be too many here, without \
						obvious benifits.
				+ "default argument 'YSLib::RecordLevel lv = YSLib::Err'"
					@ "constructor %ArityMismatch",
					// To be consistent to its base.
				/ "class %UndeclaredIdentifier" -> "class %BadIdentifier",
				/ @ "function %DetectReducible" $=
				(
					/ "swapped parameter order",
					+ 'ynothrow'
				)
			)
		),
		/ "default level of handling %std::exception" @ "function template \
			%Invoke" @ %YSLib.Core.YException -> "implicit %Err" ~ "%Emergent",
			// Not all exception is emergent by default. Also it is OK to have \
				more low level value for %TryExecute as default since an \
				exception object caught by %std::exception should always be \
				handled at first, and other exception is still %Emergent.
	)
),

b725
(
	+ $re_add(b711) $repo "bookmark 'engineering-fault-b723'" @ b717
		@ "engineering fault bookmarks",
		// Failed to build for platform %DS.
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ "class template %atomic" @ %Mutex,
			* "%errno always treated as %std::errc::bad_file_descriptor when \
				opening file failed" @ "constructor %MappedFile with path \
				paramater" @ %MemoryMapping $since b719
				$= (/ DLDI ^ "%YCL_Raise_SysE"),
			/ DLDI "simplified function %LockCommandCache" @ %Host
				!^ "%ystdex::parameterize_static_object"
				// Use of %ystdex::parameterize_static_object is not necessary \
					here. It is fit where block scope is inconvenient, \
					otherwise the template parameters usually are to be reused \
					or publicly known.
			* "referenced undeclared identifiers" @ "constant-expression"
				@ "enumerator %AccessMode" @ '!O_ACCMODE'
				@ "enum class %OpenMode" @ %NativeAPI $since b722
				$= (/ DLDI "changed enumerator declaration order")
		),
		/ %Helper $=
		(
			/ %Initialization $=
			(
				/ "trace strings" @ "function %LoadNPLA1File",
				/ DLDI "function %LoadComponents" ^ "%Application::AddExit"
					~ "%Application::AddExitGuard",
				* $comp "possible race existed in initializing exit guard"
					$since b425 $dep_from %YSLib.Core.YApplication,
					// It was also unsafe for CHRLib uninitialization since \
						earlier versions, but that would not occurred on wrong \
						use of gloable uninitialization (causing multiple \
						deletion), so the interface was OK.
				* "initialization of object after allocation might have race"
					@ ("function %FetchDefaultFontCache" $since b425,
					"function %FetchMIMEBiMapping" $since b450) $=
					(/ DLDI ^ $dep_from ("%LockAddExit" ~ "%AddExitGuard"
						@ "%Application" @ %YSLib.Core.YApplication)),
				(
				/ DLDI "simplified functions \
					%(FetchDefaultFontCache, FetchMIMEBiMapping)";
				/ $comp "set log disabled when calling %FetchMIMEBiMapping"
					@ "platform %DS"
					// Though this is actually not happened before \
						%FetchDefaultFontCache is called.
				),
				(
				+ "function %InitializeKeyModule";
				/ DLDI "simplified function %InitializeKeyModule"
					^ "%InitializeKeyModule" ~ "%ExtractInitException";
				- $revert(b690) "function %ExtractInitException" $dep_from
					("constructor %Environment" @ %Environment)
				)
			),
			/ %GUIApplication $=
			(
				/ "supported atomic data members"
					@ 'YF_Multithread != 1 && YF_Host' @ "class %GUIHost"
					^ $dep_from ("%atomic" @ %YCLib.Mutex) ~ "%std::atomic",
				* $doc "Doxygen comment" @ "constructor %GUIApplication" $since
					b398
			),
			/ "supported atomic data members"
				@ ("class %WindowThread" @ %HostRenderer) ^ $dep_from
				("%atomic" @ %YCLib.Mutex) ~ "%std::atomic",
			/ @ "constructor %Environment" @ %Environment $=
			(
				/ DLI ^ "%InitializeKeyModule" ~ "%ExtractInitException";
				+ $comp "recorded detailed message on exception"
					@ "file system initialization" @ "platform %DS",
				* $comp "outdated function name" @ "exception message"
					 $since b690
			)
		),
		/ @ "class %Application" @ %YSLib.Core.YApplication $=
		(
			+ "locked guarantee" @ "function templates %(AddExit, AddGuard)",
			+ "function template %LockAddExit"
		),
		+ "function %RewriteLiteral" @ %NPL.NPLA1
	),
	/ %YBase.YStandardEx $=
	(
		* "ill-formed 'yconstfn'" @ "function template %dismiss with %one_shot \
			parameter" @ %ScopeGuard $since b702,
		* "ill-formed move %operator=" @ "class tmeplate %lock_base"
			@ %PseudoMutex $since b722
	)
),

b724
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Debug $=
			(
				/ "macro %YCL_TraceRaw" => "%YF_TraceRaw",
					// It should be useful in %YSLib.
				/ "macro %YCL_Trace" => "%YF_Trace",
					// Though it is not used in %YSLib, but may be useful in \
						future.
				/ "macro %YCL_Use_TraceSrc" => "%YF_Use_TraceSrc",
					// Ditto.
			),
			* "wrong branch hint" @ "destructor %platform_ex::FileSystem"
				@ "platform %DS" @ %NativeAPI $since b690
		),
		(
		/ $forced $dev $dep_from ("%YCL_TraceRaw" @ %YCLib.Debug)
			$effective @ (%YSLib.Core.YException, YCLib.(NativeAPI, Debug));
		* $comp $dev "'YCL_*' reserved macros used" @ %YSLib $effective
			@ %YSLib.Core.YException $mismatch(%Documentation.YSLib $since b481)
			$since b591
		),
		/ $forced $dev $dep_from ("%YCL_Trace" @ %YCLib.Debug)
			$effective @ (%Helper.(GUIApplication, Environment), YCLib.Debug),
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ @ "(function, function template) %CheckBOM" @ %TextFile $=
				(
					+ "assertion to ensure nonnull pointer" ^ "%Nonnull",
					+ "2 overloads for %std::istream&"
				),
				/ %File $=
				(
					+ "class %UniqueLockedOutputFileStream",
					+ "class %SharedInputMappedFileStream" ^ $dep_from
						("%MappedFile" @ %Adaptor.YAdaptor,
						%YBase.YStandardEx.PseudoMutex)
				)
			),
			+ 'using platform::MappedFile' @ %Adaptor.YAdaptor
		),
		/ %Helper $=
		(
			/ %Initialization $=
			(
				/ @ "function %LoadNPLA1File" $=
				(
					/ "simplified BOM detection" ^ $dep_from
						("%CheckBOM#4" @ %YSLib.Service.TextFile);
					* $comp "possible unitialized memory access when length of \
						text in external file is less than BOM length" $since
						b619,
					* "missing indirect assertion to ensure nonnull pointer \
						parameter" $mismatch $since b516
						$= (+ "assertion" ^ "%Nonnull"),
					+ "separated message for memory stream fallback with level \
						'Notice'",
					/ "merged corrupted configuration message with level 'Err'",
					/ DLDI "optimized without BOM for memory stream fallback".
					/ DLDI "reading file content" ^ $dep_from
						("%SharedInputMappedFileStream" @ %YSLib.Service.File)
						~ "%(MappedFile, SharedIndirectLockGuard<const \
						UniqueFile>, ystdex::membuf, std::istream)",
					/ "protected file creation before reading to allow \
						trapping into fallback on failure" ^ "%TryInvoke",
					/ "handling missing expected BOM" ^ "tracing with level \
						'Warning'" ~ "threw %GeneralEvent"
				),
				* "mapping and assertion failed when writing configuration file"
					$since b723
					@ "functions %(LoadNPLA1File, SaveConfiguration)"
					$= (/ $revert_ex(b723) $impl ^ $dep_from
						("%UniqueLockedOutputFileStream" @ %YSLib.Service.File)
						~ "%(UniqueFile, IndirectLockGuard<const UniqueFile>)")
					// Crash on release configuration. This was caused by \
						unlocking out of life %UniqueFile.
			),
			* "ill-formed code" @ "class %Environment" @ "platform %DS"
				@ %Environment $since b717
				$= (/ $re_add(b717) DLDI ^ "%ystdex::in_place"
					~ "%ystdex::any_ops::in_place_t")
		),
		* DLDI "wrong branch hint" @ "platform %DS" @ %'YCLib(DS)'.DSIO $since
			b611
	),
	/ %YBase.YStandardEx.PseudoMutex $=
	(
		* "missing defaulted move %operator="
			@ "class template %lock_base without check enabled" $since b723,
		* $comp "defaulted deleted move %operator=" @ "class templates \
			%(unique_lock, shared_lock) without check enabled" $since b723
	)
),

b723
(
	/ %YFramework $=
	(
		/ %YCLib_('Win32').MinGW32 $=
		(
			/ @ "class %Win32Exception" $=
			(
				/ "printed with error number text" @ "error category".
				/ "trimmed right" @ "result" @ "static function %FormatMessage"
					^ "%ystdex::rtrim"
			),
			/ "printed with error message text" @ "macro %YCL_Trace_Win32E"
				^ "%platform_ex::Win32Exception::FormatMessage"
		),
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				/ "printed with error message text" @ "macro %YCL_Trace_SysE"
					^ "%std::strerror",
				/ "function %operator* returning %int"
					-> "2 functions returning self reference"
			),
			/ @ "namespace %Concurrency" @ %Mutex $=
			(
				(
				+ 'using ystdex::threading::lockable_adaptor;' $dep_from
					("%ystdex::threading::lockable_adaptor"
					@ %YBase.YStandardEx.PseudoMutex);
				+ "alias templates %(AdaptedLock, AdaptedLockGuard)";
				+ "alias templates %(IndirectLock, IndirectLockGuard)"
					^ $dep_from ("%AdaptedLock", "%AdaptedLockGuard",
					("%ystdex::indirect_ref_adaptor" @ %YBase.YStandardEx.Ref))
				),
				(
				+ 'using ystdex::threading::shared_lockable_adaptor;';
				(
				+ "alias templates %(SharedAdaptedLock, \
					SharedAdaptedLockGuard)";
				+ "alias templates %(SharedIndirectLock, \
					SharedAdaptedLockGuard)" ^ $dep_from ("%SharedAdaptedLock",
					"%SharedAdaptedLockGuard)", ("%ystdex::indirect_ref_adaptor"
					@ %YBase.YStandardEx.Ref))
				),
				/ DLDI "simplified %shared_lock_guard"
				)
			),
			+ "function %GetUniqueFile" @ "class %MappedFile" @ %MemoryMapping
		),
		/ DLDI %Helper.Initialization $=
		(
			/ "simplified functions %(LoadNPLA1File, SaveConfiguration)"
				^ $dep_from ("%IndirectLockGuard" @ %YCLib.Mutex)
				~ "%unique_lock",
			/ "simplified functions %LoadNPLA1File"
				^ $dep_from (("%SharedIndirectLockGuard" @ %YCLib.Mutex)
				~ "%shared_lock_guard", ("%MappedFile::GetUniqueFile"
				~ "%MappedFile::GetFile" @ %YCLib.FileMapping))
				$dep_from "shared locking cause %std::terminate called"
		),
		* "missing %what() message" @ "funcction template %TryInvoke"
			@ %YSLib.Core.YException $since b701
			$= (^ "%ExtractAndTrace" ~ "%TraceExceptionType")
			// This was caused by %TraceExceptionType implementation fix.
	),
	/ %YBase.YStandardEx $=
	(
		+ "noexcept-specification" @ "%operator()" @ "all functors with all \
			specializations %(first, get, indirect, second)" @ "namespace \
			%iterator_transformation" @ %Iterator,
			// To eliminate G++ warning: [-Wnoexcept].
		/ @ "namespace %threading" @ %PseudoMutex $=
		(
			+ "class template %shared_lockable_adaptor",
			/ "supported custom references"
				@ "class template %shared_lockable_adaptor" $=
			(
				+ "2nd parameter with default argument as stored reference",
				/ "%lockable_type" => "%holder_type"
					// Now the 1st template parameter does not need to be \
						lockable.
			),
			* "throwing conflict with wrong noexcept-specification even when \
				check is enabled" @ "members" @ "%(lock_base, lock_guard, \
				shared_lock)" $orig (@ "namespace %single_thread" $since b605)
				$dep_to "shared locking cause %std::terminate called"
				$= (- $revert_ex(b605) "'yimpl(ynothrow)' when check is \
					enabled")
		),
		+ "class template %indirect_ref_adaptor" @ %Ref,
		+ "alias templates %(conjunction, disjunction, negation)" @ %TypeTraits,
			// Which implements WG21 P0013R1.
		/ %TypeOperation $=
		(
			+ "metafunctions %(cond_or; cond_or_t)";
			/ DLDI "simplified %common_nonvoid_t" ^ "%cond_or_t"
		),
		/ DLDI "simplified %defer_element" @ %Memory ^ $dep_from
			("%cond_or" @ %TypeOperation),
		/ @ "class %task_pool" @ %Concurrency $=
		(
			+ "function %reset with task number";
			/ DLDI "simplified function %reset without parameter"
		)
	)
),

b722
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ ("enum class %OpenMode"; 'DefBitmaskEnum(OpenMode)')
				@ "namespace %platform" @ %NativeAPI,
			/ @ "class %FileDescriptor" $=
			(
				/ @ "member functions %(try_lock, try_lock_shared)" $=
				(
					* "always failed to lock" @ "platform %DS" $since b721
						$= (/ "returned always true" ~ "alywas false"),
					* "missing locking call" @ !"platforms %(DS, Win32)"
						$= (^ 'YCL_TraceCallF_CAPI(::flock'
						~ 'YCL_TraceCallF_CAPI(, ::flock')
				),
				* "wrong length specified for locking which would cause \
					unlocking out of range" @ "platform %Win32"
					@ "functions %(lock_shared, try_lock, try_lock_shared)"
					$since b721
					// This would cause error 158 on calling %::UnlockFileEx: \
						"The segment is already unlocked." Then assertion \
						in %unlock or %unlock_shared fails.
					$= (/ DLDI ^ 'std::uint64_t(-1)' ~ 'size_t(-1)')
			),
			/ @ %Mutex $=
			(
				+ "yconstexpr object %UseLockDebug";
				+ "alias templates %(shared_lock, shared_lock_guard)"
					@ "namespace %Concurrency" ^ $dep_from
					("%ystdex::threading::(shared_lock, \
					shared_lockable_adaptor, lock_guard)"
					@ %YBase.YStandardEx.PseudoMutex)
			)
		),
		/ DLDI "simplified" ^ "%OpenMode" @ %(YCLib.(FileIO, Host,
			MemoryMapping), 'YCLib_(DS)'.DSIO) ^ $dep_from
			("%OpenMode" @ %YCLib.NativeAPI) ~ 'O_*',
		/ re_ex(b721) DLI "function %LoadNPLA1File" @ %Helper.Initialization
			^ $dep_from ("%shared_lock_guard" @ %YCLib.Mutex)
			~ "%lock_guard"
	),
	/ %YBase.YStandardEx.PseudoMutex $=
	(
		/ @ "namespace %single_thread" $=
		(
			/ "tag types %(defer_lock_t, try_to_lock_t, adopt_lock_t) and \
				objects %(defer_lock, try_to_lock, adopt_lock)" $=
			(
				>> "namespace %threading";
				+ $forced "aliases"
			),
			+ "class shared_timed_mutex",
			(
			/ "class templates %(lock_guard, unique_lock)"
				-> "alias templates based on class templates with same"
				^ $dep_from "%threading::(lock_guard, unique_lock)";
			+ $comp DLDI 'ynothrow' @ "constructor" @ 'defined(NDEBUG)'
				@ "%unique_lock",
			* $comp "wrongly called %lock rather than %try_lock"
				@ "function %try_lock" @ "%unique_lock" $since b550,
			/ $comp @ "constructors" @ "class %lock_guard" $=
			(
				* $doc "wrong '\pre' commands" $since b450,
				* "ill-formed overload with %adopt_lock_t parameter" $since b450
			),
			/ $comp "corrected behavior for %mutex_type with overloaded \
				%operator&" @ "class templates %(lock_guard, unique_lock)"
				// See LWG 2577.
				$= (/ DLDI ^ "%std::addressof" ~ '&')
			),
			+ "alias template %shared_lock" ^ $dep_from
				"%threading::shared_lock"
		),
		/ @ "namespace %threading" $=
		(
			+ "class template %shared_lockable_adaptor";
			+ "class templates %lock_guard; (lock_base, unique_lock, \
				shared_lock)" $dep_from
				"%(defer_lock_t, try_to_lock_t, adopt_lock_t)";
			/ $doc "update referenced base specification to ISO C++14 with \
				resolution of LWG 2577" ~ "ISO C++11";
				// It is confirmed that no change except LWG 2577 is needed to \
					be conforming. Only LWG 2104 is concerned here.
		)
	),
	/ "explicitly stated transformation between class scope using-declaration \
		from/to other member declarations without name and entity kind \
		differences as implementation details in general"
),

b721
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ "function template %RetryOnInterrupted" @ %YCommon,
			/ %FileIO $=
			(
				/ DLDI "simplified" ^ $dep_from
					("%RetryOnInterrupted" @ %YCommon),
				/ "all functions %(upclose, 2 upopen)" @ "namespace %platform"
					-> ("functions" @ 'YF_Hosted' @ "namspace %platform_ex"
					@ %Host) $dep_from %YSLib.Adaptor.YAdaptor $=
				(
					- "platform %DS support" @ 'YCL_DS',
					/ DLDI ^ $dep_from ("%platform::CallNothrow" @ %YCommon)
				),
				/ @ "class %FileDescriptor" $=
				(
					/ @ "functions %(FullRead, FullWrite, Read, Write)" $=
					(
						+ "assertion to ensure file descriptor is not '-1'",
						+ "assertion to ensure nonnull pointer"
					),
					+ "functions %(lock, lock_shared, try_lock, \
						try_lock_shared, unlock, unlocked_shared)"
				),
				/ $re_add(b711) DLDI "function %omode_conv"
					^ "%YCL_ReservedGlobal",
				(
				+ "extended flags %(ios_nocreate, ios_noreplace)";
				/ "function %omode_conv supported extended flags";
				/ ("member function %open" @ "class template %basic_filebuf";
					$comp "file stream class templates")
					"supported extende flags",
				/ DLDI "simplified function %EnsureUniqueFile"
				),
				/ $re_add(b714) $dev ("function parameter name %sig" -> '%sig_')
					@ "macros %(YCL_WrapCall_CAPI, YCL_TraceWrapCall_CAPI)"
					// To eliminate G++ warning: [-Wshadow] when enclosing \
						scope is using 'sig'.
			),
			/ @ "class %Semaphore" @ %Host $=
			(
				/ "retried on %EINTR" @ !"platform %Win32"
					@ "functions %(lock, try_lock)",
				/ @ "function %try_lock" $=
				(
					* "throwing violates %Lockable requirement"
						@ !"platform %Win32" $since b720;
					+ 'ynothrow'
				)
			),
			/ @ "class %MappedFile" @ %MemoryMapping $=
			(
				* "missing specifying binary mode explicitly on opening"
					@ "platform %Win32" @ "constructors with path \
					parameter" $since b324,
				+ "function %GetFile"
			)
		),
		/ DLDI "simplified" @ %'YCLib_(Android)'.AndroidHost ^ $dep_from
			("%platform::RetryOnInterrupted" @ %YCommon),
		- $revert(b566) ('using platform::upclose;', 'using platform::upopen')
			@ %YSLib.Adaptor.YAdaptor,
		/ %Helper.Initialization $=
		(
			/ @ "function %SaveConfiguration" $=
			(
				/ DLDI "simplified stream writing",
				/ DD "Doxygen comment" $=
				(
					+ "'\throw' command",
					* "redundant '\return' command for function returning %void"
						$since b344
				)
			),
			* "race condition on creation of NPLA1 file" @ "function \
				%LoadNPLA1File" $orig (@ "function %CheckInstall" $since b300)
				// Not all reace conditions are eliminated. However, the states
				//	would be deterministic now.
				$= (/ DLDI ^ $dep_from ("%platform::ios_noreplace"
					@ %YCLib.FileIO)),
			* "race on multiple programs accessing files"
				@ "functions %(LoadNPLA1File, SaveConfiguration)" $orig
				(@ "function %CheckInstall" $since b300) $=
				(/ DLDI ^ ("%(lock_guard, unique_lock)" $dep_from
					("%FileDescriptor::lock" @ %YCLib.FileIO),
					$dep_from ("%MappedFile::GetFile" @ %YCLib.MemoryMapping)))
		),
		/ %YCLib_(Win32).MinGW32 $=
		(
			+ "functions %(LockFile, TryLockFile, UnlockFile)"
			/ $re_add(b714) $dev ("function parameter name %sig" -> '%sig_')
				@ "macros %(YCL_WrapCall_Win32, YCL_TraceWrapCall_Win32)"
				// To eliminate G++ warning: [-Wshadow] when enclosing scope \
					is using 'sig'.
		)
	),
	+ $doc "API behavior description about %EINTR" @ %Documentation.YCLib
),

b720
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				/ $re_add(b418) "threw %std::system_error on file opening \
					failure" @ "function %HaveSameContents",
				- "function template %ThrowFileOperationFailure; class \
					FileOperationFailure" $dep_from %YSLib.YAdaptor.Adaptor,
				/ DLDI "simplified" ("(constructor, function \
					%SetTranslationMode)" @ "class %FileDescriptor",
					!"platform %DS" @ "function %upclose") ^ "%YCL_CallGlobal"
					$dep_from %NativeAPI,
				(
				/ "default argument '0'" @ "all 2 functions %uopen"
					-> 'DefaultPMode()';
				/ DLDI "simplified function template %open with path"
					@ '__GLIBCXX__' @ "class template %basic_filebuf"
					$= (- "explicit %DefaultPMode call")
				),
				/ DLDI "simplified" ^ $dep_from ("%CallNothrow" @ %YCommon)
			),
			/ DLDI %MemoryMapping $=
			(
				/ "simplified" @ "platform %Win32" @ "constructor %MappedFile"
					$=
				(
					^ "%platform_ex::ToHandle",
					- "unnecessary %narrowing_error handling"
				),
				/ "simplified" $dep_from %NativeAPI
			),
			/ %Host $=
			(
				/ DLDI "simplified constructor %TerminalData"
					^ "%(platform_ex::ToHandle, YCL_CallGlobal)" $dep_from
					%NativeAPI,
				+ "class %Semaphore" $dep_from
					%(NativeAPI, 'YCLib_(Win32)'.MinGW32)
			),
			/ %NativeAPI $=
			(
				+ "including <semphore.h>" @ $dep_from
					("%YCL_API_Has_semaphore_h" @ %Platform),
				+ "including <sys/mman.h>" @ "platforms %(Linux, 'OS X')";
				+ $dev "161 '#undef' directives for identifier of POSIX \
					functions declared in <stdio.h>, <dirent.h>, <fcntl.h>, \
					<semaphore.h>, <unistd.h>, <sys/mman.h> and <sys/stat.h>",
			),
			/ %YCommon $=
			(
				+ "enumerators %(MaxSemaphoreNumber, MaxSemaphoreValue)"
					@ "enum %SystemOption",
				/ @ "function %FetchLimit" $=
				(
					* "missing check for %_POSIX_SYMLOOP_MAX representable in \
						%size_t" $since b704
						$= (+ $dev "static assertion"),
					+ "configuration for %SystemOption::(MaxSemaphoreNumber, \
						MaxSemaphoreValue)" $dep_from "%SystemOption"
				),
				+ "function template %CallNothrow"
			),
			/ @ %Platform $=
			(
				+ "macro %YCL_API_Has_semaphore_h for supported platforms",
				- $dev $impl "redundant macro definitions" @ "platform %Android"
					// Some are introduced by platform %Linux.
			)
		),
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ @ "threw %std::system_error on file operation failure"
					@ "function templates %(Remove, Unlink), function %OpenFile"
					@ %File ^ "%ystdex::throw_error" ~ ("threw \
					%FileOperationFailure" ^ "%ThrowFileOperationFailure")
				/ %FileSystem $=
				(
					/ $forced $doc "threw %std::system_error on failure"
						~ "threw %FileOperationFailure" @ ("functions \
						%(ClearTree, DeleteTree)" $dep_from ("%Remove" @ %File),
						"functions %CopyFile" $dep_from ("%OpenFile" @ %File))
					+ $doc "Doxygen command '\exception'"
						@ "function tmeplates %Traverse",
					* $doc "Doxygen command '\exception'"
						@ "function %ListFiles" $since b719
						// This change was caused by %platform::HDirectory \
							constructors.
				)
			),
			/ @ "class %FileBox" %UI.ComboList $=
			(
				* $doc "Doxygen command '\exception'" @ "function %ListItems"
					$since b719,
					// See %IO::ListFiles.
				* "unhandled %std::system_error thrown on listing files failure"
					@ "function %SetPath" $since b719
					$= (/ "caught %std::syatem_error"
						~ "caught %IO::%FileOperationFailure")
			),
			/ @ "namespace %YSLib::IO" @ %Adaptor.YAdaptor $=
			(
				- $revert(b654) 'using platform::ThrowFileOperationFailure;'
					$dep_from %Service.(File, FileSystem),
				- $revert(b411) 'using platform::FileOperationFailure;'
					$dep_from %(UI.ComboList, NPL.Dependency,
					Helper.Initialization, Tools.SHBuild.Main)
			)
		),
		/ $forced "caught %std::system_error" @ "function %InstallFile"
			@ %NPL.Dependency ~ "caught %FileOperationFailure" $dep_from
			("%HaveSameContents" @ %YCLib.FileIO,
			"%CopyFile" @ %YSLib.Service.FileSystem),
		* "%std::system_error caused wrong behavior on font file access failure"
			@ "function %InitializeSystemFontCache" @ %Helper.Initialization
			$since b719
			$= (/ "caught %std::syatem_error" ~ "caught %FileOperationFailure"),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "functions %(WaitUnique, TryWaitUnique)";
			/ DLDI @ "class %Mutex" $=
			(
				/ "simplified function %lock" ^ "%WaitUnique",
				/ "simplified function %try_lock" ^ "%TryWaitUnique"
			)
		)
	),
	/ "caught %std::syatem_error" @ "main function" @ %Tools.SHBuild.Main
		~ "caught %IO::%FileOperationFailure"
),

b719
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ $lib 'YB_NORETURN' @ "function %platform_ex::LogAssert"
				@ !"platform %Win32",
			/ %FileIO $=
			(
				- DLDI "redundant 'YB_ASSUME(false)'"
					@ "member function %FileDescriptor::GetSize",

				/ "replacement list"
					@ "macros %(YCL_Raise_Win32E, YCL_RaiseZ_Win32E)" $=
				(
					/ "wrapped with 'do while(false)'",
					/ "supported message" ~ "function name with '#'"
				),
				/ $forced DLDI @ "macro %YCL_WrapCall_CAPI" $dep_from
					"%YCL_Raise_SysE",
				/ @ "class %FileDescriptor" $=
				(
					/ @ "functions \
						%(SetAccessTime, SetModificationTime, \
						SetModificationAndAccessTime)" $=
					(
						/ "simplified throwing" $=
						(
							/ $revert(b718) @ "platform %Win32",
							/ $revert_ex(b715) @ !"platform %Win32"
						),
						+ "simplified intermediate signature"
							@ !"platform %Win32" !^ "%YB_NONNULL"
					),
					/ $revert_ex(b718) "simplified throwing"
						@ "function %GetSize"
						$= (/ "threw %std::system_error or \
							%std::invalid_argument without nested exception"),
					/ @ "functions %(GetMode, GetFlags, SetMode, SetFlags, \
						SetBlocking, SetNonblocking)" 
					(
						- 'ynothrow';
						/ DLDI @ "%GetMode" ^ ($dep_from "%platform::cstat"
							@ %NativeAPI) ~ "%platform::estat",
						/ DLDI @ "%(GetFlags, SetMode, SetFlags, SetBlocking, \
							SetNonblocking)" ^ "%YCL_CallF_CAPI",
						/ "threw %std::system_error on failure"
					),
					/ "threw %std::system_error on failure" @ "function \
						%WriteContent" ^ $dep_from "%YCL_Raise_SysE" ~ ("threw \
						%FileOperationFailure" ^ "%ThrowFileOperationFailure"),
				),
				(
				/ $revert_ex(b718) "simplified throwing" @ "platform %Win32"
					@ "member functions %FileDescriptor::(GetAccessTime, \
					GetModificationTime, GetModificationAndAccessTime), all 2 \
					functions %(GetFileAccessTimeOf, \
					GetFileModificationTimeOf, \
					GetFileModificationAndAccessTimeOf)"
					!^ "enclosing %FileOperationFailure nested exception" $=
				(
					/ "threw %std::system_error without nested exception",
					/ DLDI "simplified" @ "platform %Win32",
					/ $impl @ !"platform %Win32" ^ $dep_from
						("%platform_ex::cstat" @ %NativeAPI)
				);
				- $revert(b718) "function templates %(ThrowWithNested, \
					ThrowNested)" @ "class %FileOperationFailure" $dep_from
					(%FileSystem, "%FileDescriptor::(SetAccessTime, \
					SetModificationTime, SetModificationAndAccessTime, \
					GetSize)")
				),
				* "wrong non-throwing exception specification"
					@ "all 2 functions %FetchNumberOfLinks" $since b639 $=
				(
					- 'ynothrowv';
					/ $impl @ !"platform %Win32" ^ ($dep_from
						"%platform::cstat" @ %NativeAPI) ~ "%platform::estat"
				),
				/ "threw %std::system_error on failure" @ "function \
					%EnsureUniqueFile" ^ "%YCL_Raise_SysE" ~ ("threw \
					%FileOperationFailure" ^ "%ThrowFileOperationFailure")
			),
			+ "2 functions %platform_ex::cstat" @ %NativeAPI,
			/ $revert_ex(b718) "simplified throwing" @ "platform %Win32"
				@ "constructors %DirectorySession, member function \
				%HDirectory::operator++"
				!^ "enclosing %FileOperationFailure nested exception" $=
			(
				/ "threw %std::system_error without nested exception",
				/ DLDI "simplified" @ "platform %Win32",
				/ $impl @ !"platform %Win32" ^ $dep_from
					("%platform_ex::cstat" @ %NativeAPI)
			),
			/ %Host $=
			(
				/ @ !"platform %Win32" @ "function %MakePipe" $=
				(
					(
					/ $revert_ex(b718) "threw %std::system_error on pipe \
						creation failure" ^ "%YCL_CallF_CAPI"
						~ ("threw %FileOperationFailure"
						^ "%ThrowFileOperationFailure");
					* $comp "wrong exception message" @ "thrown exception"
						$since b553
					),
					/ "threw %std::system_error on failed setting pipe file \
						attributes" ~ ("threw %FileOperationFailure"
						^ "%ThrowFileOperationFailure")
				),
				(
				/ @ "function %FetchCommandOutput" $=
				(
					/ "threw %std::system_error on pipe opening failure"
						^ "%YCL_Raise_SysE" ~ ("threw %FileOperationFailure"
						^ "%ThrowFileOperationFailure");
					/ $doc "clearified exceptions"
				);
				/ DLDI "catch clause" @ "function %FetchCachedCommandResult"
					^ "%std::system_error"
					~ "%platform_ex::FileOperationFailure"
				)
			),
			/ $comp $doc "constructors %MappedFile could throw more exceptions"
				@ %MemoryMapping $dep_from
				("%FileDescriptor::GetSize" @ %FileIO),
			/ "threw %std::system_error for bad file descriptor"
				@ "constructors %MappedFile" @ %MemoryMapping
				^ "%ystdex::throw_error" ~ ("threw %FileOperationFailure"
				^ "%ThrowFileOperationFailure")
		),
		/ %'YCL_(Win32)'.MinGW32 $=
		(
			/ "wrapped replacement list with 'do while(false)'"
				@ "macros %(YCL_Raise_Win32E, YCL_RaiseZ_Win32E)",
			/ DLDI "simplified destructor" @ "classes %(GlobalDelete, \
				LocalDelete)" ^ "%YCL_Trace_Win32E" ~ "%YTraceDe"
		),
		/ $forced DLDI "caught 'std::system_error&'" ~ 'FileOperationFailure&'
			@ "functions %VerifyDirectory" @ %YSLib.Service.FileSystem $dep_from
			("constructors %platform::DirectorySession" @ %YCLib.FileSystem)
	),
	* "'$lib' did not covered possible public API break caused overload \
		ambiguity" @ %Documentation @ $since b320
		$= (+ "rules to explicitly state user code should not rely on free of \
			ambiguity of overloaded functions except for calls" @ %YBase),
	/ $forced DLDI "caught %std::system_error for nonexsited file modification \
		time comparing" ~ "caught %FileOperationFailure" @ %Tools.SHBuild.Main
		$dep_from ("%GetFileModificationTimeOf" @ %YFramework.YCLib.FileIO)
),

b718
(
	/ %YBase.YStandardEx $=
	(
		/ %Optional $=
		(
			* "missing changed interface disagreed with base specification"
				$since b717 $=
			(
				/ "made %nullopt default constructor not declared"
					$= (+ $impl "constructor with 1 parameter"),
				* "missing function %reset" @ "class template %optional"
			),
			/ @ "class template %optional" $=
			(
				/ $impl "simplified function %has_value"
					$= (/ "function" -> "using-declaration to base class \
						member"),
				* "copied instead of moved value" @ "movable base object \
					without 'const' qualified copy-initialization" $since b591
			),
			/ DLDI "simplified" ^ ("%tagged_value" @ %Placement)
		),
		/ @ "class template %state_guard" @ %ScopeGuard $=
		(
			/ @ "primary template" $=
			(
				/ "function %engaged" -> "%has_value";
				* $comp "returned function name as state" @ "function %engaged"
					$since b692
			),
			/ DLDI "simplified"
				^ ("instance of %tagged_value as base class" @ %Placement)
		),
		+ "class template %tagged_value" @ %Placement
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				+ "static member function templates \
					%FileOperationFailure::(ThrowWithNested, ThrowNested)",
				/ $re_ex(b715) "threw nested exception %FileOperationFailure \
					with %std::system_error on failure" @ "member functions \
					%FileDescriptor::(SetAccessTime, SetModificationTime, \
					SetModificationAndAccessTime)"
					@ ("platform %Win32", "platform %DS" ^ $dep_from
					"%FileOperationFailure::ThrowNested"),
				/ $re_add(b715) "threw nested exception %FileOperationFailure \
					with %std::system_error on failure" @ "member functions \
					%FileDescriptor::(GetAccessTime, GetModificationTime, \
					GetModificationAndAccessTime), all 2 functions \
					%(GetFileAccessTimeOf, GetFileModificationTimeOf, \
					GetFileModificationAndAccessTimeOf)"
					@ ("platform %Win32", "platform %DS" ^ $dep_from
					"%FileOperationFailure::ThrowNested"
					~ "%ThrowFileOperationFailure"),
				/ @ "member function %FileDescriptor::GetSize" $=
				(
					+ "check to ensure nonnegative size" $=
					/ $re_add(b715) "threw nested exception \
						%FileOperationFailure with %std::system_error"
				)
			),
			/ %FileSystem $=
			(
				/ $re_ex(b715) "threw nested exception %FileOperationFailure \
					with %std::system_error on failure" @ !"platform %Win32"
					@ ("constructors %DirectorySession",
					"member function %HDirectory::operator++")
					$= (/ DLDI ^ ("%FileOperationFailure::ThrowNested"
						@ %FileIO) ~ "%ThrowFileOperationFailure");
				* $comp $doc "nested exception not thrown" @ "platform %Win32"
					@ "Doxygen comments" @ "constructors %DirectorySession"
					$since b715
			)
		),
		/ DLDI "reduced redundant %errno access"
			@ "function templates %(Remove, Unlink)" @ %YSLib.Service.File,
		+ "2 functions %QueryFileSize" @ %'YCLib_(Win32)'.MinGW32
	)
),

b717
(
	/ %YBase.YStandardEx $=
	(
		/ %Placement $=
		(
			* "wrong member type %pointer" @ "class template %placement_delete"
				$since b716,
			(
			// See WG21 P0032R3 adopted 2016-06.
			+ "struct %in_place_tag";
			+ "alias templates %(in_place_type_t, in_place_index_t)",
			+ "(function, 2 function templates) %in_place"
			)
		),
		/ %TypePun $=
		(
			+ "function template %make_pun_default";
			+ "function template %pun_default" @ "class template \
				%standard_layout_storage" ^ "%ystdex::make_pun_default"
				$dep_from %Placement,
			- "constructor template %standard_layout_storage" $dep_from
				("friend function %operator=="
				@ "class template %any_input_iterator" @ %AnyIterator)
		),
		/ %Any $=
		(
			/ @ "namespace %any_ops" $=
			(
				/ $impl "adjusted alignment" @ "alias %any_storage",
					// As libstdc++.
				(
				/ DD "explicitly stated requirements on %(op_code, base_op) to \
					avoid strict aliasing broken";
				/ $forced DLDI "made %get_ptr handling" @ "all static member \
					functions %manager conforming to requirements" $effective
					@ "class templates %(value_handler, ref_handler, \
					holder_handler)" $dep_to "generic pointer getting";
				),
				- $revert(b677) "class template %in_place_t" $dep_from
					("simplified any type tag",
					("YSLib::InPlaceTag" @ %YFrameework.YSLib.Core.YObject))
			),
			/ @ "class %any" $=
			(
				+ "default initialization and value initialization support"
					@ "protected function templates %unchecked_access with \
					deduced argument",
				* "strict aliasing broken" @ "functions %(get, type, \
					get_holder)" $since b352 $dep_from "generic pointer getting"
					$= (/ DLDI "protected member access for %any_storage"
						^ $dep_from
						("%standard_layout_storage::pun_default" @ %TypePun))
				+ $revert(b677) 'yconstfn' @ "default constructor",
					// See WG21 P0032R3 adopted 2016-06. LWG 2013 is no longer \
						an issue here when the standard added 'constexpr'.
				(
				/ "function %clear" => "%reset";
					// See WG21 P0032R3 adopted 2016-06.
				/ DLDI "function templates %(emplace_with_handler, emplace)"
				),
				/ "function %empty" -> "%has_value",
					// Ditto.
				+ "function template %emplace overloaded with \
					%std::initializer_list instance",
					// Ditto.
				/ "constructor template with in place tag" ^ $dep_from
					("%in_place_type_t" @ %Placement) ~ "%any_ops::in_place_t"
					$dep_to "simplified any type tag"
				// GCC 4.9 is buggy in initialization with excessive warnings: \
					[-Wmissing-field-initializers]. See \
					https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61489. This \
					will trouble building for platform %Android, though new \
					toolchain from current version of official or CrystaX NDK \
					should not be affected. So these warnings are ignored.
			),
			+ "2 function templates %make_any" ^ $dep_from
				("%in_place_t" @ %Placement);
				// See WG21 P0032R3 adopted 2016-06.
			/ $re_ex(b687) $doc "updated base specification to current working \
				paper(WG21 N4606)" ~ "previous working paper(WG21 N4582)"
		),
		/ %AnyIterator $=
		(
			(
			/ DD "explicitly stated requirements on %(iterator_op, \
				input_iterator_op, bidirectional_iteartor_op, \
				random_access_iteartor_op) to avoid strict aliasing broken";
			/ $forced "made %dereference handling" @ "all static member \
				functions %manager conforming to requirements" $effective
				@ "class template %iterator_handler";
			/ $forced DLDI "function %operator*"
				@ "class templates %any_input_iterator"
			),
			/ "reinitailized result" @ "%equal handler" @ "static function \
				%manager" @ "class template %input_iterator_handler"
				$= (/ DLDI ^ '!=' ~ '==' $dep_from %Iterator),
			* "strict aliasing broken" @ ("%equal handling" @ "class template \
				%input_iterator_handler", "friend function %operator=="
				@ "class template %any_input_iterator") $since b355,
				// It is too error-prone.
			* $impl "wrong excluding type" @ "constructor template"
				@ ("class template %any_input_iterator" $since b675,
				"class template %any_forward_iterator" $since b686),
			* $re_add(b686) "missing excluding of self type"
				@ "class template %any_bidirectional_iterator" $since b400,
			/ $forced DLDI "friend functions %(operator==, \
				is_undereferenceable)" @ "class template %is_undereferenceable"
				$dep_from ("%any::empty" @ %Any)
		),
		/ "function template %abs for %fixed_point"
			>> "friend function templates" @ %Rational,
			// To make them work same to other friends, also to prevent too \
				many unrelated diagnostic messages shown when some of \
				fail to match. Note this is still not done for some overloaded \
				operators, see comments in the source.
		* "wrong base class template argument for reference type" @ "class \
			template %subscriptive_iterator" @ %Iterator $since b576,
		/ %Optional $=
		(
			/ 'yconstexpr const struct in_place_t{} in_place{};' -> (("alias \
				%in_place_t" $dep_from "%in_place_tag") @ %Placement),
				// See WG21 P0032R3 adopted 2016-06.
			/ @ "class template %optional" $=
			(
				+ "functions %(reset, has_value)",
					// Ditto.
				/ $dev "update static assertion concerned with %in_place_t"
			),
			+ "function template %make_optional" -> "2 function templates";
				// Ditto.
			/ $re_add(b687) $doc "updated base specification to current \
				working paper(WG21 N4606)"
				~ "library fundamental TS final draft(WG21 N4480)"
		)
	),
	/ %YFramework.YSLib.Core $=
	(
		/ %YObject $=
		(
			/ $forced DLDI "function %Clear" @ "class %ValueObject" $dep_from
				("%any::clear" @ %YBase.YStandardEx.Any),
			(
			/ "constructors" @ "class %ValueObject" ^ $dep_from
				("%ystdex::(in_place_type_t, in_place)"
				@ %YBase.YStandardEx.Placement) ~ "%InPlaceTag";
			- $revert(b678) "alias template %InPlaceTag" $dep_from %ValueNode
			)
		),
		/ $impl "function template %Place" @ "class %ValueObject" @ %ValueNode
			^ $dep_from ("%ystdex::in_place)" @ %YBase.YStandardEx.Placement)
			~ "%InPlaceTag"
	)
),

b716
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			(
			+ %Placement $= (
				+ "function templates %(construct_default_within; \
					construct_default_in; construct_default; \
					uninitialized_default_construct, \
					uninitialized_default_construct_n)",
				+ "function templates %(destroy_at, destroy, destroy_n, \
					uninitialized_move, uninitialized_move_n)",
				+ "function templates %uninitialized_value_construct"
					^ $dep_from "%ystdex::construct_range",
				// Some of these partially implement WG21 P0040R3, which was \
					adapoted 2016-06.
				+ "class templates %default_init_allocator",
				+ "class template %placement_deleter; alias template \
					%placement_ptr",
				+ "function template %construct_within"
			);
			(
			* DD "wrong content" @ "Doxyen command '\tparam'"
				@ "function template %destroy_in" @ %Memory
				$orig (@ "function template %destroy_in" $since b692);
			/ %Memory $=
			(
				/ "simplified function template %construct_in" >> %Placement
					^ $dep_from ("%construct_within" @ %Placement),
				/ "function templates %construct" $=
				(
					/ "allowed storage type different to type of object being \
						constructed" ^ $dep_from
						("%ystdex::construct_within" @ %Placement)
						~ "%ystdex::construct_in",
					>> %Placement
				),
				/ "function templates %(construct_range, destruct_in, \
					destruct, destruct_range, uninitialized_construct, \
					uninitialized_construct_n)" >> %Placement
			)
			),
			/ DLPI "simplified header inclusion" @ %(Optionl, ScopeGuard)
				^ %Placement ~ %Memory
			),
			/ %Utilities $=
			(
				/ 'yconstexpr const struct default_init_t{} default_init{};'
					>> $dep_from %Placement,
				* "wrong non-throwing exception specification"
					@ "constructor with %default_init_t parameter"
					@ "class template %boxed_value" $since b677
			),
			/ %TypePun $=
			(
				/ @ "class template %pun_ref" $=
				(
					/ "constructor template with single 'void*' parameter"
						-> "tagged constructor template with %default_init_t",
					- 'value_init_t' @ "parameters"
						@ "constructor template for value initialization"
						// To be consistent with %boxed_value. Though keeping \
							it will be good to avoid accidental unnecessary \
							initialization, it is responsibility of users to \
							keep it work efficiently as they want in general.
				),
				/ 'yconstexpr const struct value_init_t{} value_init{};'
					>> $dep_from %Placement,
					// Now it is not used. It may still be useful in future, \
						at least as meta tag of initialization kinds; so keep \
						it.
				(
				+ "alias template %pun_ptr" ^ $dep_from
					("%placement_ptr" @ %Placement);
				+ "function template %make_pun" ^ $dep_from
					("%ystdex::construct_within" @ %Placement)
				),
				/ @ "class template %standard_layout_storage" $=
				(
					+ DD "Doxygen comment to warning about object lifetime \
						and strict aliasing rules",
					+ "function template %pun" ^ $dep_from "%make_pun",
					+ "function templates %destroy",
					(
					+ "function templates %construct" ^ $dep_from
						("%ystdex::construct_within" @ %Placement);
					/ "constructor template" ^ "%construct";
					* $comp "placement 'new' used" ~ '::new' $orig (@ \
						"constructor template %pod_storage" @ %Any $since b352)
					)
				)
			),
			/ %Any $=
			(
				/ DLI @ "%any" $=
				(
					/ "protected any base class copy constructor and \
						destructor";
						// The semantics guarantees are different than %any. \
							The base copy constructor does not construct a \
							fully-initialized object for users of %any. So \
							does the destructor. Also to avoid wrong use \
							without protection from 'final'. If refactorized \
							with union as underlying storage, this may be even \
							forced by deleted copy constructor of the storage.
					/ $comp "avoided redundant copy of underlying data on copy \
						construction"
				),
				/ @ "classes %any_ops::(value_handler, holder_handler)" $=
				(
					(
					/ "initialization" ^ $dep_from
						("%standard_layout_storage::construct" @ %TypePun)
					* $comp "placement 'new' used" ~ '::new' $orig
						(@ "class template %(any_handler, any_holder_handler)"
						$since b352)
					* $comp "strict aliasing broken" @ "initialization" $orig
						(@ "class template %(any_handler, any_holder_handler)"
						$since b352)
					);
					/ "dispose" ^ $dep_from
						("%standard_layout_storage::destroy" @ %TypePun)
				)
			)
		)
	),
	/ DLI ("constructor %PaintStructData" @ "platform %Win32"
		@ %YCLib.HostedGUI, "constructor %ReparsePointData"
		@ %'YCLib_(Win32)'.MinGW32) @ %YFramework $dep_from ("%ystdex::pun_ref"
		@ %YBase.YStandardEx.TypePun) ^ "%ystdex::default_init"
		// To avoid performance regression.
),

b715
(
	/ %YFramework $=
	(
		/ "all %YCL_Raise_Win32E" ^ 'yfsig'
			$effective @ %'YCLib_(Win32)'.MinGW32, YCLib.(FileIO, HostedGUI),
		/ "exception %FileOperationFailure handling" ^ "%CatchExpr"
			~ "%CatchIgnore" @ "function %InitializeSystemFontCache"
			@ %Helper.Initialization
			$= (+ "trace with level 'Warning'" ^ "%ExtractAndTrace"),
		/ "exception %FileOperationFailure handling" ^ "%CatchExpr"
			~ "%CatchIgnore" @ "function %InstallFile" @ %NPL.Dependency
			$= (+ "trace with level 'Err'" ^ "%ExtractAndTrace"),
		/ %YCLib $=
		(
			/ "handled exception %FileOperationFailure with also nested \
				exceptions" @ "function %FetchCachedCommandResult" @ %Host
				^ "%ExtractAndTrace",
			/ %FileSystem $=
			(
				/ @ "constructors %DirectorySession" $=
				(
					/ $forced DLDI "handled different underlying exceptions"
						$dep_from ("constructors %DirectoryFindData"
						@ %'YCLib_(Win32)'.MinGW32);
					/ "threw nested exception %FileOperationFailure with \
						%std::system_error on failure" @ "platform %Win32"
				),
				/ DLDI "simplified calling %::lstat" @ !"platforms %(Win32, DS)"
					@ "function %ReadLink#1" ^ "%YCL_CallF_CAPI"
					~ "%YCL_Raise_SysE",
				/ @ "class %HDirectory" $=
				(
					/ "threw nested exception %FileOperationFailure with \
						%std::system_error on failure" @ "platform %Win32"
						@ "function %operator++",
					+ "trace for exception with level 'Warning'"
						@ !"platform %Win32" @ "function %GetNodeCategory"
						^ "%(YCL_TraceCallF_CAPI, CatchExpr)" ~ "%CatchIgnore"
				)
			),
			/ "threw nested exception %FileOperationFailure with \
				%std::system_error on failure" @ !"platforms %(DS, Win32)"
				@ "member functions %FileDescriptor::(SetAccessTime, \
				SetModificationTime, SetModificationAndAccessTime)" @ %FileIO
				^ "%YCL_CallF_CAPI" $dep_from %YBase.LibDefect.Exception
		),
		/ %YSLib $=
		(
			/ %Service.FileSystem $=
			(
				+ "exception %FileOperationFailure handling" !^ "%CatchIgnore"
					@ "functions %VerfiyDirectory"
					$= (+ "trace with level 'Debug'" ^ "%ExtractAndTrace"),
				/ "threw %std::system_error" @ "function %EnsureDirectory"
					^ 'yfsig'
			),
			+ "trace with level 'Warning'" @ "exception \
				%FileOperationFailure handling" @ "member function \
				%FileBox::SetPath" @ %UI.ComboList,
				// To avoid missing context.
			* $comp "function %ExtractException" @ %Core.YException
				@ "platforms %(DS, Android)" $since b591 $dep_from
				("%ystdex::handle_nested" @ %YBase.YStandardEx.Exception)
		),
		/ @ "constructors %DirectoryFindData" @ %'YCLib_(Win32)'.MinGW32 $=
		(
			/ "exception message" -> 'yfsig',
			/ "threw %std::system_error" ~ "%platform::FileOperationFailure \
				with %ENOTDIR",
			/ "threw %Win32Exception" ~ "%platform::FileOperationFailure for \
				::GetFileAttributesW call failure" ^ "%YCL_Raise_Win32E"
		)
	),
	/ %YBase $=
	(
		+ "macro %YPP_Stringify" @ YDefinition,
		* "possible undefined behavior due to out-of-life exception object"
			@ "working with pre-built library code working without \
			reference-counted exception object" $since b550 $=
		(
			* "cleanup of %std::exception_ptr or %std::rethrow_exception would \
				cause undefined behavior" @ %LibDefect.Exception;
			* $comp "possible undefined behavior" @ "%handle_nested"
				@ %YStandardEx.Exception
		)
	)
),

b714
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ "access-specifier" @ "base class" @ "platform %DS"
				@ "class %UnmapDelete" @ %MemoryMapping -> 'private' ~ 'public',
			+ "(2 functions; function template) %ComposeMessageWithSignature"
				@ "namespace %platform" @ %Debug,
			/ %FileIO $=
			(
				* "missing including <cerrno> for %errno" $since b701,
				+ "macros %(YCL_Raise_SysE, \
					YCL_RaiseZ_SysE, YCL_Trace_SysE)",
				(
				+ "macro %YCL_WrapCall_CAPI" ^ $dep_from
					("%platform::ComposeMessageWithSignature" @ %Debug,
					"%YCL_Raise_SysE");
				+ "macros %(YCL_Call_CAPI; YCL_CallF_CAPI)"
				),
				(
				+ "macro %YCL_TraceWrapCall_CAPI" ^ $dep_from
					"%YCL_Trace_SysE";
				+ "macros %(YCL_TraceCall_CAPI; YCL_TraceCallF_CAPI)"
				),
				/ "threw %std::system_error" @ ("function template \
					%FetchCurrentWorkingDirectory", "platform %DS" @ "member \
					functions %FileDescriptor::(SetAccessTime, \
					SetModificationTime, SetModificationAndAccessTime)")
					^ "%yfsig",
				/ "simplified and threw %std::system_error with \
					platform-dependent signature" @ "member function \
					%FileDescriptor::Flush" ^ $dep_from "%YCL_CallF_CAPI"
					~ "%ystdex::throw_error",
				/ @ "class %FileDescriptor" $=
				(
					* $dev "static assertion string" @ !"platform %Win32"
						@ "function %FileDescriptor::GetNumberOfLinks" $since
						b638,
					/ DLDI "simplified throwing %std::system_error"
						@ "platform %Win32" @ "function %GetSize"
						^ "%ThrowFileOperationFailure" ~ "%ystdex::throw_error"
				)
			),
			/ %FileSystem $=
			(
				/ "threw %std::system_error" @ "functions %IterateLink"
					^ "custom signature",
				/ "threw %std::system_error" ^ "%yfsig" @ ("platform %DS"
					@ "2 functions %(CreateHardLink, CreateSymbolicLink, \
					ReadLink)", ("member function %EntryData::FillNewName",
					"function %CheckColons") @ "namespace %FAT"),
				/ "simplified" @ !"platforms %(DS, Win32)"
					@ "functions %(CreateHardLink, CreateSymbolicLink)"
					^ $dep_from ("%YCL_CallF_CAPI" @ %FileIO)
					~ "%ystdex::throw_error",
				/ "threw %std::system_error" @ "functions %ReadLink" ^ $dep_from
					("%(YCL_Raise_SysE, \
					YCL_RaiseZ_SysE)" @ %FileIO)
			),
			/ "threw %std::system_error" @ "constructor %MappedFile"
				@ %MemoryMapping $=
			(
				/ @ !"platform %DS" ^ "%yfisg"
				/ "simplified" @ !"platform %Win32" ^ $dep_from
					("%YCL_CallF_CAPI" @ %FileIO) ~ "%ystdex::throw_error"
			)
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			/ @ "member function %Mutex::unlock" $=
			(
				+ 'ynothrowv',
				(
				+ $doc "Doxygen command '\pre'"; 
				+ "assertion for narrow contract vaiolation"
				)
			),
			/ $impl "constructor#2 %Win32Exception" ^ $dep_from
				("%platform::ComposeMessageWithSignature" @ %YCLib.Debug),
			/ "threw %std::system_error"
				@ "functions %(ResolveReparsePoint, 2 ConvertTime)" ^ "%yfsig",
			/ "macros %(YCL_Raise_Win32Exception, \
				YCL_Raise_Win32Exception_On_Failure)"
				-> "macros %(YCL_Raise_Win32E, YCL_RaiseZ_Win32E)"
				// To eliminate G++ warning: [-Wshadow] when enclosing scope \
					is using 'err'.
				$= (/ "local variable name %err" -> "%err_")
			/ "macros %(YCL_WrapCallWin32, YCL_WrapCallWin32_Trace)"
				-> "%(YCL_WrapCall_Win32, YCL_TraceWrapCall_Win32)"
				// To eliminate G++ warning: [-Wshadow] when enclosing scope \
					is using 'res'.
				$= (/ "local variable name %res" -> "%res_"),
			/ "macro %(YCL_Trace_Win32Error, YCL_CallWin32, YCL_CallWin32F, \
				YCL_CallWin32_Trace, YCL_CallWin32F_Trace)"
				=> "%(YCL_Trace_Win32E, YCL_Call_Win32, YCL_CallF_Win32, \
				YCL_TraceCall_Win32, YCL_TraceCallF_Win32)"
		)
	),
	* "missing includeing %CAssert" @ %YBase.YStandardEx.Functional $since b612
	/ $forced DLDI $dep_from %YFramework.YCLib_(Win32).MinGW32 $effective
		@ %(YCLib_(Win32), YCLib.(Host, HostedGUI, FileIO, MemoryMapping,
		FileSystem), Helper.(GUIApplication, HostRenderer)) @ %YFramework
),

b713
(
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)' $=
		(
			/ %MinGW32 $=
			(
				/ "all 2 functions %(MBCSToMBCS, MBCSToWCS, WCSToMBCS, \
					UTF8ToWCS, WCSToUTF8)" >> %Consoles,
				/ DLDI "simplified member function \
					%Win32Exception::FormatMessage" ^ "%WCSToUTF8"
					~ "%(WCSToMBCS, CP_UTF8)",
				+ "class %Mutex"
			),
			/ DLDI @ "NLS table entry" @ %NLS $=
			(
				+ 'final',
				^ $re_add(b) "%platform::MappedFile"
					~ "%unique_ptr<platform::MappedFile>",
				^ "%ystdex::aligned_store_cast" ~ 'reinterpret_cast'
			)
		),
		/ %YCLib $=
		(
			/ "simplified function %usystem" ^ "%platform_ex::UTF8ToWCS"
				@ %YCommon ~ "%(platform_ex::(MBCSToWCS), CP_UTF8)" $dep_to
				"simplified Win32 common UTF-8 conversion",
			/ $forced @ "platform %Win32" $dep_from %'YCLib_(Win32)'.MinGW32 $=
			(
				/ %Host $dep_from "%platform_ex::MBCSToMBCS",
				/ %YCommon $dep_from "simplified Win32 common UTF-8 conversion",
				/ %FileIO $dep_from "%platform_ex::(UTF8ToWCS, WCSToUTF8)",
				/ %HostedGUI $dep_from "%platform_ex::WCSToUTF8"
			),
			/ $forced %FileIO $dep_from %Documentation.CommonRules $=
			(
				/ DLDI "renamed internal file time routines"
					@ !"platform %Win32",
				/ "function template %TryGetCurrentWorkingDirectory"
					=> "%FetchGetCurrentWorkingDirectory"
			),
			/ %FileSystem $=
			(
				/ @ "class %HDirectory" $=
				(
					+ "alias %iterator";
					+ "functions %(begin, end)"
				),
				- $revert(b411) "alias %FileIterator" $dep_from
					("%YSLib::IO::FileIterator" @ %YSLib.Adaptor.YAdaptor)
			)
		),
		/ @ "platform %Win32" @ %Helper.Initialization $=
		(
			* $re_add(b695) "initialized system font directory wrongly used \
				current code page" ~ "UTF-8" $since b695
				$= (/ DLDI ^ "%platform_ex::WCSToUTF8"
					~ "%platform_ex::WCSToMBCS")
			* @ "function %TraceForOutermost wrongly used current code page"
				$orig @ "function %HandleFatalError" $since b540
				$= (/ DLDI ^ "%platform_ex::UTF8ToMBCS"
					~ "%platform_ex::MBCSToWCS")
		),
		/ $forced %'YCLib_(DS)'.DSIO $dep_from %Documentation.CommonRules $=
		(
			/ "functions %(TryRead, TrySeek, TryWrite)" @ "class %FileInfo"
				=> "%(Read, Seek, Write)",
			/ "function %TryGetClusterFromEntry" @ "class %Partition"
				=> "%ReadClusterFromEntry",
			/ @ "class %AllocationTable" $=
			(
				/ "allwed %LinkFree to throw %std::system_error";
				/ "merged function %TryLinkFree" -> "%LinkFree",
				/ "function %TryLinkFreeCleared" -> "%LinkFreeCleared"
			),
			/ DLDI "renamed internal I/O helper routines"
		),
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				/ $forced $dep_from "%TryGetCurrentWorkingDirectory"
					@ %YCLib.FileIO $=
				(
					/ 'using platform::TryGetCurrentWorkingDirectory;'
						-> 'using platform::FetchCurrentWorkingDirectory;'
						@ %YAdaptor,
					/ "function template %TryGetValue" => "%GetValue"
						@ "class %ImageTag" @ %Image
				),
				/ $impl "renamed private deleter class" @ "class %ImageMemory"
					@ %Image,
					// This change does not binary compatiblility.
				- $revert(b411) 'using platform::FileIterator;' $dep_from
					%Service.FileSystem 
			),
			/ $forced DLDI "function %MakeNormalizedAbsolute" $dep_from
				("%FetchCurrentWorkingDirectory" @ %Adaptor.YAdaptor),
			/ %Service $=
			(
				/ $forced "function templates %(TryRemove, TryUnlink)"
					=> "%(Remove, Unlink)" @ %File $dep_from
					%Documentation.CommonRules
				/ DLI "simplified function template %Traverse"
					^ "range-based for" ~ "%std::for_each" $dep_from
					("%HDirectory::begin" @ %YCLib.FileSystem)
			)
		)
	),
	/ $doc %Documentation $=
	(
		* "meaning of 'Try*' routines" @ %CommonRules $mismatch $since b705,
			// For example, the convention contradicted to %YSLib::TryInvoke, \
				and the similar conterpart %try_lock in several mutual \
				exclusive types in the ISO C++.
		* "YCLib hosted module dependency rules" $since b585
			// %YCLib.Host was allowed to depend on %YSLib.Core in its \
				implemenation.
	),
	/ $forced DLDI "%FetchDefaultShellDirectory" @ %YReader.ShlExplorer
		$dep_from
		("%TryGetCurrentWorkingDirectory" @ %YFramework.YSLib.Adaptor.YAdaptor)
),

b712
(
	(
	+ $doc "limitation on moved-from state of user-defined class objects"
		@ %Documentation.LanguageConvention;
	/ $forced $doc "clearified moved-to state as Doxygen command '\note'"
		$effective @ "class %DirectorySession" @ %YFramework.YCLib.FileSystem
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				+ $doc "Doxygen command '\invariant'" @ "class %HDirectory",
				/ DLDI @ "platform %Win32" @ "class %DirectorySession" $=
				(
					+ 'final' @ "private class %DirectorySession::Data",
					/ "avoided construction of %default_delete<Data>"
						@ "member function %Deleter::operator()"
				)
			),
			/ %MemoryMapping $=
			(
				+ "default constructor" @ "class %UnmapDelete";
				/ @ "class %MappedFile" $=
				(
					/ "allowed empty state"
					(
						+ "default constructor",
						+ "explicitly default move (constructor, %operator=)",
						+ "functions operator(!, bool)" ^ "%DefBoolNeg",
						+ "assertion" @ "function %FlushView"
					),
					(
					+ DLDI "saved mapping option";
					(
					+ "functions %(FlushFile; Flush)";
					/ "destructor" ^ "%Flush" ~ "%FlushView"
					),
					+ "function %GetMappingOption"
					)
				)
			),
			/ %HostedGUI $=
			(
				/ @ "%WM_INPUT handling" @ "constructor %WindowInputHost"
					@ "platform %Win32" @ %HostedGUI $=
				(
					/ DLDI "simplified" ^ "%::RAWINPUT directly";
					* $comp "strict aliasing broken" $orig
						(@ %Helper.Host $since b423)
				),
				(
				+ "class %PaintStructData";
				/ @ "class %WindowRegionDeviceContext" $=
				(
					+ "protected base class %PaintStructData";
					/ "member access for %::PAINTSTRUCT" ^ "%punning"
						~ "%ystdex::(aligned_storage_t, aligned_store_cast)";
					* $comp $re_ex(b565) "strict aliasing broken" $since b564
				)
				)
			),
			/ 'ynothrow' @ "member function %HandleDelete::operator()"
				@ "platform %Win32" @ %Host -> 'ynothrowv',
			/ %YCommon $=
			(
				+ "enumerator %SystemOption::PageSize";
				+ "support for querying page size with parameter value \
					%SystemOption::PageSize" @ "function %FetchLimit"
			)
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			- $re_add(b705) DLI "redundant private data member"
				@ "class %DirectoryFindData",
			/ @ "class %ReparsePointData" $=
			(
				/ DLDI "simplified"
					^ "%ystdex::aligned_storage_t" ~ "%ystdex::pun_storage_t",
				+ DLDI 'final' @ "struct %Data",
				- 'final'
					// To allow initialized before other bases.
			),
			/ "function %FixConsoleHandler" >> %Consoles
		),
		/ DLDI %Helper $=
		(
			/ "simplified CHRLib mapping initialization"
				@ "function %LoadComponents" @ %Initialization $dep_from
				("%MappedFile" @ %YCLib.MemoryMapping),
			/ $forced %Enviornment $dep_from
				("%FixConsoleHandler" @ %'YCLib_(Win32)'.MinGW32.Consoles)
		)
	)
),

b711
(
	+ $repo "bookmark 'engineering-fault-b710'" @ b706
		@ "engineering fault bookmarks",
		// Failed to build for platform %DS.
	/ %YFramework $=
	(
		/ @ %Helper.Initialization $=
		(
			/ @ "function %LoadNPLA1File" $=
			(
				(
				/ "missing hanling %errno before opening file"
					// It should be noted that file stream operations may or \
						may not set %errno.
					$= (/ $re_add(b710) "saved and restored %errno"
						^ "%ystdex::swap_guard");
				/ "traced with level 'Warning' on file stream failure"
					~ "threw %GeneralEvent";
				/ "used fallback stream in memory on file stream failure"
					$dep_to "fallback on loading NPLA1 file failure"
				),
				/ "loading configuration from file" ^ $dep_from
					("%ystdex::membuf" @ %YBase.YStandardEx.StreamBuffer,
					"%std::istream", "%MappedFile") ~ "%ifstream"
			),
			* $comp "unhandled exception" @ "failure of creation of default \
				MIME database file" @ "function %FetchMIMEBiMapping" $since b450
				$dep_from "fallback on loading NPLA1 file failure",
				// For example when permission denied, the program might \
					silently exit in %release configurations.
			- "all 6 instances of trailing '\n'"
				@ "non exceptional trace messages"
		),
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				+ 'YB_returns_nonnull' @ "all function %rdbuf" @ "class \
					templates %(basic_ifstream, basic_ofstream, basic_fstream)",
				/ @ "class %FileDescriptor" $=
				(
					+ "function %Flush",
					+ "tracing error" @ "member function %Deleter::operator()"
				)
			),
			/ %MemoryMapping $=
			(
				/ @ "class %MappedFile" $=
				(
					/ @ "constructors with pathname parameter" $=
					(
						* "missing hanlding %::MapViewOfFile failure"
							@ "platform %Win32" $since b549;
						/ "threw nested exception with underlying exception" $=
						(
							/ "threw %std::invalid_argument as nested \
								exception for empty size of file",
							/ "threw %std::system_error as nested exception \
								for invalid file",
							/ "threw system errors for underlying system API \
								call failure"
						),
						+ $lib 'YB_NONNULL(2)'
							@ "constructor with pointer parameter",
						/ $re_add(b709) DLI ^ 'YCL_ReservedGlobal',
						- DLDI
							"redandant default mode argument for opening file",
						/ "check by narrowing" @ "all platforms"
							~ "platform %Win32",
						(
						+ "3 overloaded constructors with %(UniqueFile, \
							FileMappingOption, FileMappingKey) parameters with \
							proper default arguments and optional offset and \
							size for mapping" $dep_from ("enum class \
							%FileMappingOption", "alias %FileMappingKey");
						+ "writable file support"
						+ "identification by key" @ "platform %Win32",
							// This will inject name to device namespace.
						(
						+ "copy-on-write support";
						/ $comp "shared on read only view"
							@ !"platform %(DS, Win32)"
							// Even if the underlying system allows private \
								copy of read only pages, there is no sense to \
								support it explicitly.
						)
						),
						(
						/ $impl "stored size uniformly in deleter"
							^ $dep_from "%UnmapDelete";
						/ "return type" @ "function %GetSize" -> "%size_t"
							~ "%std::uint64_t"
							// Only offset should be remained 64-bit on \
								platform %Win32.
						),
						/ "constructor template" ^ "variadic parameters",
						(
						+ "function %FlushView";
						/ "explicitly default descructor"
							-> "user-defined destructor" ^ "%FlushView"
						)
					)
				),
				+ "enum class %FileMappingOption",
				+ "alias %FileMappingKey",
				/ "alias %UnmapDelete" @ "platform %DS" -> "class",
				/ @ "class %UnmapDelete" $=
				(
					/ "stored size" @ "all platforms";
					+ "function %GetSize"
				)
			)
		)
	),
	+ "class template %basic_membuf; aliases %(membuf, wmembuf)"
		@ %YBase.YStandardEx.StreamBuffer
),

b710
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				* "missing returning value" @ "platform %DS"
					@ "all 2 functions %IterateLink" $since b708
					$= (/ $impl 'ImplExpr' -> 'ImplRet'),
				/ @ !"platforms %(DS, Win32)" @ "function %ReadLink" $=
				(
					* "missing check %::lstat result mode" $since b660,
					* "read empty string when size is zero" $since b660,
						// This would fail on directories, for example.
					/ $re_add(b703) "saved and restored %errno"
						^ "%ystdex::swap_guard"
				),
				- DLDI "unused parameter name 'tag'"
					@ "function template %TrimTrailingSeperator_P#2",
				/ @ "platform !(DS, Win32)" @ "function %ReadLink" $=
				(
					/ "retrying allocation" ^ "%ystdex::retry_for_vector";
					* "unsupported when ::lstat result size is 0 on file \
						systems non conforming to POSIX (e.g. procfs on Linux)"
						$since b560
				)
			),
			+ "native function name as argument with %errno in threw error"
				@ "POSIX platforms" $effective ("functions %(CreateHardLink, \
				CreateSymbolicLink, ReadLink)" @ %FileSystem),
			/ "move %operator=" -> "unifying %operator=" @ "class %ScreenBuffer"
				@ %HostedGUI
		),
		/ %YSLib $=
		(
			/ @ "class %FileBox" %UI.ComboList $=
			(
				* "missing reset list state" @ "function %" $since b298
					$= (/ $impl ^ "%ResetView" ~ "%UpdateView");
				/ DLDI "simplified" @ "event handler %Confirmend" ^ "%SetPath"
			),
			/ %Service.FileSystem $=
			(
				(
				+ "function template %VerifyDirectoryPathTail";
				/ DLDI "simplified member function %Path::Verify"
					^ "%VerifyDirectoryPathTail"
				),
				* "function templates %(ResolvePathWithBase; ResolvePath) \
					cannot work with path types not constructible from string \
					type" $since b708
					$= (/ DLDI "return conversion" ^ 'IO::ParsePath<_tPath>'
						~ '_tPath'),
				(
				* "missing adjusting root path"
					@ "function template %ResolvePathWithBase" $since b708;
					// Even if adjusting would be performed again in \
						%ParsePath later, it is necessary here before resolving.
				* $comp "empty default path root for absolute paths"
					@ "function template %ResolvePath" $since b708
				),
				(
				* "missing hanling link contents of relative path"
					@ "function template %ResolvePathWithBase" $since b708;
				* $comp "wrong resolved intermediate result with path \
					conponent of link with relative path"
					@ "function template %(ResolvePathWithBase; ResolvePath)"
					$since b708
				)
			)
		),
		/ @ "framework root directory initialization" @ %Helper.Initialization
			$=
		(
			/ @ "platforms %(Win32, Android)" $=
			(
				/ "trace on validateion" -> "trace at end of initialization";
				- "duplicate trace" @ "platform %Android",
				/ DLDI "simplified"
					// Also improved performance a little on platform %Win32.
			);
			+ "support for platform %Linux by resolving '/proc/self/exe'"
				(^ $dep_from ("%IO::(ResolvePath, VerifyDirectoryPathTail)"
				@ %YSLib.Service.FileSystem),
				$dep_from "%ReadLink" @ %YCLib.FileSystem)
		),
		(
		^ "member %swap and %swap non-member functions (if any)" -> "friend \
			%swap" !@ %YCLib.FileIO $effecitve @ (("classes %(HBitmap, \
			HMultiBitmap)" @ %Adaptor.Image, ("classes %ValueNode" @ %ValueNode,
			"class %ValueObject" @ %YObject, "class template %GEvent" @ %YEvent,
			"class %Message" @ %YMessage) @ %Core, ("class %Path" @ %FileSystem,
			"classes %(CompactPixmap, CompactPixmapEx)" @ %YGDI) @ %Service,
			"class %AView" @ %UI.YWidgetView) @ %YSLib,
			"class %ScreenBuffer" @ %YCLib.HostedGUI,
			"class template %COMPtr" @ %'YCLib_(Win32)'.COM);
			// To simplify declarations and avoid excessive namespace names. \
				Note for APIs compliant to the standard library (e.g. file \
				stream class templates in YCLib) this strategy is not enabled.
		/ $forced DLDI "function %Widget::SetView" @ %UI.YWidget
		),
		* $impl "missing cleanup ill-formed %YCL_PATH_DELIMITER"
			@ %'YCLib_(DS)'.DSIO $since b706
			$= (/ $re_add(b706) ^ 'FetchSeparator<char>()'
				~ 'YCL_PATH_DELIMITER')
	),
	* $re_add(b676) $build
		"missing updating %LIBS for %YFramework.YCLib.NativeAPI"
		@ "%SHBuild-bootstrap.sh" @ %Tools.Scripts $since b703
),

b709
(
	/ %YBase.YStandardEx $=
	(
		/ @ "class template %transformed_iterator" @ %Iterator $=
		(
			* "missing excluding nested %transformed_iterator instances"
				@ "constructor templates with single \
				parameter of %transformed_iterator instances of other template \
				parameters" @ !'YB_IMPL_GNUCPP && YB_IMPL_GNUCPP < 50000' $since
				b665;
			* $re_ex(b708) "recursive instantiation of enclosing template"
				@ "constructor template with single parameter for \
				arbitrary iterator" @ %Iterator $since b679
		),
		/ %Cast $=
		(
			+ "binary type traits %(is_narrowing_from_floating_to_integer, \
				is_narrowing_from_floating_to_floating, \
				is_narrowing_from_floating)";
			* $dev "wrong static assertion" @ "function template %narrow_cast"
				$since b703
		),
		* $impl "redundant 'sizeof(tp), '" @ "SFINAE condition"
			@ "4 constructor template %mixin" @ %Mixin $since b477
			// This caused Microsoft VC++ error C2065.
	),
	/ %YFramework $=
	(
		* $re_add(b520) DLD "missing UTF-8 BOM" @ "header file %Win32Control.h"
			@ %'Helper_(Win32)' $since b570,
		/ DLDI "uniformed class-key" @ "private member type"
			@ "class %ReparsePointData" @ %'YCLib_(Win32)'.MinGW32
			-> 'struct' ~ 'class',
			// To eliminate Microsoft VC++ warning: C4099.
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				* $impl "undeclared '::mode_t' may be used" @ "platform %Win32"
					$since b627
					(/ '::mode_t' -> 'mode_t' @ "namespace %platform"),
				/ DLDI "simplified functions %(HaveSameContents, \
					EnsureUniqueFile)" ^ $dep_from
					("%YCL_ReservedGlobal" @ %NativeAPI)
				* DD "wrong name 'std::close'" @ "Doxygen command '\warning'"
					@ "functions %upopen" $orig (@ %FileSystem $since b566)
					$= (/ 'std::close' -> '::close'),
				/ DLI "member function %FileDescriptor::Deleter::operator()"
					^ $dep_from ("%YCL_CallGlobal" @ %NativeAPI),
					// To eliminate Microsoft VC++ warning: C4996.
				/ DLI "member functions %FileDescriptor::(Read, Write)"
					^ $dep_from ("%YCL_ReservedGlobal" @ %NativeAPI)
					// To eliminate Microsoft VC++ warning: C4996.
			),
			+ "macros %(YCL_ReservedGlobal; YCL_CallGlobal)" @ %NativeAPI,
			+ "Microsoft VC++ 2015 support" @ "class templates \
				%(basic_filebuf, basic_ofstream, basic_ifstream, basic_fstream)"
				$=
			(
				+ "%(open, swap) support for VC++ standard library \
					implementation",
				/ $impl "ctor-initializer" @ "constructor templates"
					@ "class templates %(basic_ifstream, basic_ofstream, \
					basic_fstream)" ^ '(nullptr)' ~ '({})',
					// To avoid possible ambiguity when base type has multiple \
						constructor allowing initialization from '{}'. This is \
						at least the case of VC++ 2015.
			),
			/ @ "platform %Win32" @ "constructor %MappedFile" @ %MemoryMapping
				$=
			(
				+ "check for size by calling %ystdex::narrow";
				* $comp "size truncated silently for file size larger than 2GiB"
					@ !"platform %Win64"
					$since b324
			),
			/ DLDI "cast to %std::uint32_t" @ "platform %Win32"
				@ "function %ToggleLockState"
				// To eliminate Microsoft VC++ warning: C4267.
		),
		/ %CHRLib.StaticMapping $=
		(
			+ "function template %EncodeChar" @ "struct %UCSMapperBase"
				^ ("%ystdex::narrow_cast" @ %YBase.YStandardEx.Cast),
			/ @ "class template specialization %GUCSMapper<CharSet::UTF_8>" $=
			(
				(
				+ 'using UCSMapperBase::EncodeChar;';
				/ DLI "character assignment" @ "function templates %Encode"
					^ "EncodeChar"
				),
				/ DLI "character assignment" @ "function template %Decode#2"
					^ "Assign"
				// Also to eliminate Microsoft VC++ warning: C4244.
			)
		),
		/ %YSLib $=
		(
			* $doc "'\pre' command" @ "Doxygen comments" @ "function template \
				%ClearSequence" @ %Core.YCoreUtilities $since b624,
			/ @ "class %FileBox" @ %UI.ComboList $=
			(
				/ "made %ListItems neutural to exceptions",
				/ @ "function %SetPath" $=
				(
					/ "caught and logged %IO::FileOperationFaiure exceptions",
					* $comp "missing strong exception safety" $since b298
						$= (/ "saved state and revoeved on failure"
							^ "%ystdex::swap_guard")
				),
				(
				/ "saved state and revoeved on failure"
					@ "%Confirmed event handler" @ "constructor"
					^ "%ystdex::swap_guard";
				* $comp "no recovery way from directory access failure" $orig
					@ ("member function %YFileBox::OnConfirmed"
					@ %Shell.YGUIComponent $since b193)
				)
			)
		)
	)
),

b708
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ DLDI "'::' before '_wrmdir'" @ "platform %Win32"
				@ "function %uremove" @ %FileIO,
			/ %FileSystem $=
			(
				/ @ "all 2 functions %IsDirectory" $=
				(
					/ DLDI
						^ "%platform_ex::Invalid" ~ "%INVALID_FILE_ATTRIBUTES",
					+ $lib 'YB_NONNULL(1)' @ "all 2 functions %IsDirectory"
				),
				/ "return type" @ "all 2 functions %IterateLink" -> 'bool'
					~ 'void'
			)
		),
		/ %YSLib $=
		(
			/ %Service.FileSystem $=
			(
				(
				+ "function template %ParsePath with functor",
				+ "static member function template %PathTraits::AdjustForRoot";
				/ "static member function %Path::Parse"
					-> "function template %ParsePath without functor"
					$=
				(
					/ $impl "root path check" ^ "%PathTraits::AdjustForRoot",
					/ "checked root path at first"
						// This should imporve performance a lot for long \
							paths when push in front of the path is inefficent \
							(e.g. for %ypath).
				);
				/ $forced DLDI "constructor with string parameter, constructor \
					template" @ "class %Path" ^ "%ParsePath<ypath>"
				),
				(
				+ 'using ypath::traits_type;' @ "class %Path";
				/ @ "function templates %(ResolvePath, ResolvePathWithBase)" $=
				(
					/ "pathname" ^ "path parameters and return type" ~ "string",
					/ $impl ^ "%ParsePath with functor"
						~ "%(IO::IsDictionary, ystdex::split)";
						// Trailing slashes are now handled by %Path.
					* $comp "missing handling self and parent components" $orig
						(@ "%platform::ResolvePath" @ %YCLib.FileSystem $since
						b699)
				)
				),
				(
				/ DLDI "simplified function template %ResolvePathWithBase"
					^ "%(IsAbsolute, TryGetCurrentWorkingDirectory)"
					~ "%PrepareBasePath";
					// Path tail is handled by %Path, no normalization needed.
				- $revert(b707) "function templates %(PrepareBasePath; \
					TryGetNormalizedCurrentWorkingDirectory)"
				)
			),
			* "redundant template parameter pack as groups of indices which \
				cannot be deduced" @ "constructor templates %ValueNode"
				@ %Core.ValueNode $since b681
		),
		/ @ "costructor templates %Configuration" @ %NPL.Configuration $=
		(
			* "ill-formed initializer" $since b674
				/ $impl ^ "%NoContainer" ~ '0',
			+ 'explicit',
			- "redundant 'yconstfn'"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ @ "class template %thread_pool" @ %Concurrency $=
		(
			/ DLDI ^ "brace-or-equal-initializer '{}'"
				@ "private vector member",
			* "redundant empty %std::thread caused by wrong vector \
				initialization" @ "constructor"
				// See downstream report: https://github.com/lucklove/ahttpd/issues/16.
		),
		* $impl "ill-formed program caused by missing template parameter names"
			@ '!YB_HAS_NOEXCEPT' @ %Utilities $since b704,
		/ %Container $=
		(
			* "same type of different specializations of function template \
				%emplace_hint_in_place" since $b681
				$= (/ "merged as 1 template"),
			/ DLDI "dispatch" @ "function template %extract_key"
		),
		/ $impl $doc "clearified issue related to CWG 1227"
			@ "constructor template %transformed_iterator" @ %Iterator
	),
	+ $repo "glob pattern 'packages/VisualCppTools.*'" @ "file %.hgignore"
),

b707
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ "namespace %IO" @ %Service.FileSystem $=
			(
				* "ill-formed for %basic_string instance of string for \
					%is_root due to no parameter type supported by \
					%FetchRootNameLength" @ "class %PathTraits"
					$since b654 $=
				(
					/ "function template" ^ "%auto and trailing-return-type";
					/ $re_ex(b654) "static function with %String parameter"
						-> "function template with %basic_string instance as \
						parameter"
				),
				(
				+ "function template %TryGetNormalizedCurrentWorkingDirectory"
					^ $dep_from
					("%TryGetCurrentWorkingDirectory" @ %Adaptor.YAdaptor);
				+ "function template %PrepareBasePath"
				),
				+ "function template %ResolvePathWithBase" ^ $dep_from
					"%(IsDirectory, IterateLink)" @ %Adaptor.YAdaptor,
				(
				/ @ "function %MakeNormalizedAbsolute" $=
				(
					/ $impl ^ $dep_from ("%TryGetCurrentWorkingDirectory"
						@ %Adaptor.YAdaptor) ~ "%FetchCurrentWorkingDirectory";
					/ $comp "size indicated initial buffer size"
						~ "max buffer size"
				);
				- $revert(b475) "function %FetchCurrentWorkingDirectory"
					$dep_from %YReader.ShlExplorer
				),
				/ "function template %NormalizeDirectoryPathTail" $=
				(
					^ $dep_from ("%TrimTrailingSeperator" @ %Adaptor.YAdaptor)
						~ "%ystdex::rtrim",
					+ $lib "assertion for intermediate state"
				)
			),
			/ %Adaptor.YAdaptor $=
			(
				+ 'using platform::TrimTrailingSeperator;'
					$dep_from "%TrimTrailingSeperator" @ %YCLib.FileSystem,
				+ 'using platform::ReadLink;',
				+ ('using platform::IsDirectory', 'using platform::IterateLink')
					$dep_from "%(IsDirectory, IterateLink)" @ %YCLib.FileSystem,
				+ 'using platform::TryGetCurrentWorkingDirectory;',
				- $revert(b698) 'using platform::ugetcwd;'
			)
		),
		/ %YCLib $=
		(
			/ %FileSystem
			(
				+ "function templates %(2 TrimTrailingSeperator_P, \
					TrimTrailingSeperator)";
				/ DLDI "simplified functions %ResolvePath"
					^ "%TrimTrailingSeperator",
				+ "2 functions %IsDirectory",
				+ "2 functions %IterateSymbolicLink",
				(
				/ $re_ex(b704) "2 functions %ResolvePath"
					-> "function template %ResolvePath" @ "namespace %YSLib::IO"
					@ %YSLib.Service.FileSystem ^ $dep_from
					("%YSLib::IO::(PrepareBasePath, ResolvePathWithBase)"
					@ %YSLib.Service.FileSystem);
				/ $comp "platform %Win32" @ "functions %ResolvePath"
					$=
				(
					* "invalid file system entry treated as directory" $since
						b699,
					* $comp "redundant absolute path check and duplicated \
						seperator in resulted absolute path" $since b699
				)
				)
			),
			/ %FileIO $=
			(
				/ "functions %ugetcwd" @ "namespace %platform" $=
				(
					/ @ "platform %Win32" $=
					(
						+ $doc "clearified trailing slash guarantee" ,
						/ "avoided excessive race conditions" $since
							// Calls of %::GetCurrentDirectoryW and \
								%::GetFullPathNameW in %::_wgetcwd might have \
								risk with calls of %::(_chdrive, _chdir, \
								SetCurrentDirectory) of user code. This is at \
								least fit for the implementation of universal \
								CRT in Windows SDK 10.0.10240.0.
							$= (/ $impl ^ "%::(GetCurrentDirectoryW, \
								GetErrnoFromWin32)" ~ "::_wgetcwd")
					),
					/ $doc @ !"platform %Win32"
					(
					/ "explicitly stated the trailing slash is unspecified as \
						POSIX.1-2004";
					* "wrong standard 'POSIX.1 2013' to conform" $since b699
						// POSIX.1 2004 has no guarantee about slashes. \
							POSIX.1 2013 mandates there are no redundant \
							slashes.
					)
				),
				/ @ "function template %TryGetCurrentWorkingDirectory" $=
				(
					^ "%platform::ugetcwd" ~ "ADL %ugetcwd"
						@ "primary template",
					+ "specializations for %string and %u16string"
						@ "platform %Win32" ^ "::GetCurrentDirectoryW"
				)
			)
		)
	),
	/ $impl @ !"platform %Android" @ "function %FetchDefaultShellDirectory"
		@ %YReader.ShlExplorer ^ $dep_from ("%TryGetCurrentWorkingDirectory"
		@ %YFramework.YSLib.YAdaptor.Adaptor)
		~ "%FetchCurrentWorkingDirectory"
),

b706
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ @ "namespace %platform_ex" @ %FileIO $=
			(
				+ "4 functions %MakePathStringW" @ "platform %Win32",
				+ "4 functions %MakePathStringU" @ !"platform %Win32"
			),
			/ "path string conversion" @ "platform %Win32"
				^ ("%platform_ex::MakePathStringW" @ %FileIO)
				~ "%platform_ex::UTF8ToWCS" $effective @ %(FileIO, FileSystem),
				// Also decople string types if the implementation use other \
					string types not convertible from %CHRLib::MakeUCS2LE \
					result in future.
			/ "path string conversion" @ "platform %Win32"
				^ ("%platform_ex::MakePathStringU" @ %FileIO)
				~ "%CHRLib::MakeUCS2LE" $effective @ %(FileIO, FileSystem),
				// This does not FAT UCS name conversion in %FileIO which \
					explicitly using UCS-2LE conversion.
			/ %FileSystem $=
			(
				/ DLDI "simplified function 'operator u16string'"
					@ "class %HDirectory",
				(
				/ "function template %IsSlash" -> "function templates %(2 \
					FetchSeparator_P; FetchSeparator)";
				+ "function templates %(2 IsSeparator_P, IsSeparator)";
				(
					/ $forced "function templates %EndsWithNonSeperator_P"
						^ "%IsSeparator_P" ~ "ADL %IsSlash",
					* $comp "%EndsWithNonSeperator_P for platform %Win32"
						^ "native separator" ~ "target separator" $since b693
				),
				(
				/ $forced "function templates %IsAbsolute_P not for platform \
					%Win32" ^ "%FetchSeparator_P" ~ "ADL %IsSlash",
				/ "function templates %IsAbsolute_P for platform %Win32"
					^ "%IsSeparator_P"
					~ "comparison to %YCL_PATH_DELIMITER";
				* $comp "missing support of '/' as absolute path separator"
					@ "%IsAbsolute_P for platform %Win32" $orig
					@ ("platform %Win32" @ "function %IsAbsolute" @ %YCommon
					$since b299)
					// %::PathIsRelativeA only recognize backslash as separator.
				),
				- "function template %EndsWithNonSeperator_P for %Win32",
					// It is now merged by using %IsSeparator_P.
				/ "function templates %FetchRootNameLength_P (with pointer \
					parameter for platform %DS, with string parameter for \
					platform %Win32)" ^ "%IsSeparator_P"
					~ ("comparison to '/' or %YCL_FS_CharIsDelimiter"),
				/ "function templates %FetchRootNameLength_P for base platforms"
					^ "%IsSeparator_P" ~ "comparison to '/'"
				/ "functions %ResolvePath" ^ "%IsSeparator"
					~ "%YCL_FS_CharIsDelimiter",
				/ "all 'YCL_PATH_DELIMITER'" -> "call of %FetchSeparator \
					instances" $dep_to "removal use of YCL_PATH_DELIMITER"
				),
				/ DLDI "%basic_string_view instance" ^ 'path.front()'
					~ 'path[0]' $effective
					@ %(IsAbsolute_P, FetchRootNameLength_P),
				- $revert(b409) "macros %(YCL_FS_CharIsDelimiter, \
					YCL_FS_StringIsCurrent, YCL_FS_StringIsParent)" $dep_from
					("%PathTraits" @ %YSLib.Service.FileSystem),
				(
				- $revert(b297) "macro %YCL_PATH_ROOT",
				- $revert(b402) $dev
					"all 4 static assertions for %YCL_PATH_SEPARATOR";
				- $revert(b402) "macro %YCL_PATH_SEPARATOR"
				),
				(
				- $revert(b402) $dev "static assertion for %YCL_PATH_DELIMITER";
				- $revert(b296) "macro %YCL_PATH_DELIMITER" $dep_from
					(%(YSLib.Service.FileSystem, Tools.SHBuild.Main),
					"removal use of YCL_PATH_DELIMITER")
				),
				* "access for colon overrun" @ "function template \
					%IsAbsolute_P for platform %Win32 with %basic_string_view \
					instance parameter" $since b654,
					// This was not ever called since IO::IsAbsolute used \
						%string::c_str instead.
				/ @ "function %ResolvePath" $=
				(
					* "wrong assertion when path is root path"
						@ !"platform %Win32" $since b699
					* "wrong handling with assumption of trailing separator \
						when path is root path" @ "function %ResolvePath" $since
						b699
				)
			)
		),
		/ %YSLib $=
		(
			+ ('using platform::FetchSeparator;',
				'using platform::IsSeparator;') $dep_from
				"%platform::(FetchSeparator, IsSeparator)" @ %YCLib.FileSystem;
			/ @ %Service.FileSystem $=
			(
				/ @ "class template %PathTraits" @ "namespace %IO" $=
				(
					/ "function template %IsDelimiter" ^ "%IO::IsSeparator"
						~ "%YCL_FS_CharIsDelimiter",
					/ "function template %is_self" !^ "%YCL_FS_StringIsCurrent",
					/ "function template %is_parent" !^ "%YCL_FS_StringIsParent"
				)
				/ "all 'YCL_PATH_DELIMITER'"
					-> "call of %FetchSeparator instances',
			)
		)
	),
	/ $impl %Tools.SHBuild.Main ^ "%IO::FetchSeparator" ~ 'YCL_PATH_DELIMITER'
),

b705
(
	+ $re_add(b611) $dev $repo "tag 'V0.7' to revision 572",
	/ %YBase.YStandardEx.TypePun $=
	(
		+ 'yconstexpr const struct value_init_t{} value_init{};';
		+ "class template %pun_ref"
	),
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)' $=
		(
			/ %MinGW32 $=
			(
				+ "class %ReparsePointData" ^ $dep_from ("%ystdex::pun_ref"
					@ %YBase.YStandardEx.TypePun);
				/ @ "function %ResolveReparsePoint" $=
				(
					/ "2nd parameter type" @ "function with buffer parameter"
						-> 'ReparsePointData::Data&' ~ 'void*';
					* $forced "strict alias broken during allocation of \
						reparse point buffer" $since b704,
					* $comp DLI "unaligned buffer" $since b660
				),
				/ @ "class %DirectoryFindData" $=
				(
					(
					+ "constructor with %wstring parameter";
					/ DLDI "simplified constructor with %wstring_view \
						parameter",
					+ "constructor with %u16string_view parameter"
					),
					+ "function %GetEntryName",
					(
					/ "function %Read returning %bool"
						~ "returning %observer_ptr<wstring>";
					- $impl "redundnt internal string state"
					)
				)
			),
			* "strict aliasing broken"
				@ "member function %WConsole::WriteString with \
				%u16string_view parameter" $since b645
				$= (/ $impl ^ "%wstring cast" ~ "%wcast")
		),
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				* "strict aliasing broken" @ "platform %Win32"
					@ "function %ReadLink" $since b660,
				/ @ "platform %Win32" @ "class %HDirectory" $=
				(
					/ $impl ^ "%u16string as private data type"
						~ "directory entry";
					/ $forced DLDI "%operator++" ^
						$dep_from ("%DirectoryFindData::(Read, GetEntryName)"
						@ %'YCLib_(Win32)');
					/ $forced DLDI "simplified function %GetNativeName";
					* $comp "strict aliasing broken"
						@ "functions %(GetNativeName; \
						operator u16string)" $since b648
				)
			),
			/ %FileIO $=
			(
				// Cast between %ucast and %wcast is not necessary safe, but \
					cast to and back is guaranteed to meet strict aliasing \
					rules.
				/ $doc "explicitly required dynamic type or parameter"
					@ "platform %Win32"
					@ "function %MakePathString for %char16_t character strings"
				/ DLDI "simplified" @ !"platform %Win32"
					@ "function %ugetcwd for 'char' string"
					// This was also misleading.
					$= (- "redundant %(wcast, ucast) calls"),
				* "strict aliasing broken" @ "platform %Win32"
					@ "constructor %DirectorySession" $since b699
					$= (/ $impl ^ $dep_from ("%constructor %DirectoryFindData"
						@ %'YCLib_(Win32)'.MinGW32) ~ "%wcast")
			)
		)
	)
),

b704
(
	/ %YBase.YStandardEx $=
	(
		(
		/ %Utilities $=
		(
			+ "3 function templates %swap_volatile";
			+ "2 function templates %vswap"
		);
		/ "class template %state_guard; alias %swap_guard" @ %ScopeGuard
			^ ($dep_from "%ystdex::vswap" @ %Utilities)
			~ "ADL swap with %std::swap"
		),
		+ %CTime
			$= (+ "functions %(is_date_range_valid, is_time_no_leap_valid)")
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				/ $re_ex(b703) DLDI "simplified member function \
					%HDirectory::operator++" @ "platform %Android" ^ $dep_from
					("%ystdex::swap_guard" @ %YBase.YStandardEx.ScopeGuard),
				/ DLDI "simplified function %FetchDateTime" ^ $dep_from
					%YBase.YStandardEx.CTime,
				/ "default argument" @ "all 2 functions %ResolvePath"
					-> ('FetchLimit(SystemOption::MaxSymlinkLoop)'
					$dep_from %YCommon) ~ '1',
				/ $impl "functions %ResolvePath" $=
				(
					/ "converted strings in single direction for Win32 and \
						non-Win32 platforms",
						// To be efficient and consistent with other routines. \
							The binary image size can also be smaller.
					/ DLD "simplified underlying directory check"
				),
				/ DLI "avoided redundant copy of string" @ "platform %Win32"
					@ "function %ReadLink" ^ $dep_from "function \
					%ResolveReparsePoint with buffer pointer returning \
					%wstring_view" @ %'YCLib_(Win32)'.MinGW32
			),
			+ "inline function %ToHandle" @ "namespace %platform_ex"
				@ "platform %Win32" @ %NativeAPI,
			/ %FileIO $=
			(
				/ DLDI "simplified" @ "platform %Win32" @ %FileIO ^ $dep_from
					("platform_ex::ToHandle" @ %NativeAPI),
				/ $doc "put types %*stream" @ "Doxygen group %workarounds",
				(
				/ DLDI "%EnsureUniqueFile"
					!^ ("default argument" @ "%FetchNumberOfLinks");
				/ "default argument" @ "all 2 functions %FetchNumberOfLinks" ->
					'{}' ~ 'true'
					// To be consistent with other functions.
				),
				+ $lib 'YB_NONNULL(1)'
					@ "2 functions %MakePathString with pointer parameter"
			),
			+ "enum class %SystemOption; function %FetchLimit" @ %YCommon,
			/ DLDI "path conversion from UCS-2LE string to UTF-8 string"
				@ !"platform %Win32" ^ "%MakePathString" ~ ("%CHRLib::MakeMBCS"
				@ !"platform %Win32", "%platform_ex::WCSToUTF8"
				@ "platform %Win32") $effecitive @ %(FileIO, FileSystem)
		),
		/ %YSLib.Adaptor.YAdaptor $dep_from %YCLib.YCommon $=
		(
			+ 'using platform::SystemOption;',
			+ 'using platform::FetchLimit;'
		),
		* DLB "missing renaming 'ycommon.cpp' to 'YCommon.cpp'"
			@ "Microsoft VC++ project" $since b633,
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "function %ResolveReparsePoint with buffer pointer returning \
				%wstring_view";
			* "undefined behavior caused by buffer object accessed after \
				lifetime end" @ "function %ResolveReparsePoint with single \
				pathname parameter" $since b660
		)
	)
),

b703
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %YCoreUtilities $=
				(
					+ "function template %CheckLowerBound",
					/ "function template %CheckScalar" -> "%CheckUpperBound";
					+ "function template %CheckArithmetic",
					/ $forced "function template %CheckNonnegativeScalar"
						-> "%CheckNonnegative"
					/ $forced "function template %CheckPositiveScalar"
						-> "%CheckPositive"
				),
				/ "wrapped operand of compare with cast to difference type"
					@ "assertion" @ "function template %Register#2"
					@ "class template %GHandlerRegisterBase" @ %YFunc
					// To make sure the type is expected. Also to eliminate \
						G++ warning: [-Wsign-conversion] on some situations.
			),
			/ %UI $=
			(
				(
				* "functions %(SwapLocationOf, SwapSizeOf)" @ %YWidgetView
					$since b702
					$= (/ DLDI ^ "ystdex::swap_guard");
				* "wrong rendering %CheckButton and %RadioButton" @ %Selector
					$since b702
				),
				/ DLDI "simplified member function %TextBox::Refresh"
			)
		),
		/ $forced $dep_from %YSLib.Core.YCoreUtilities $=
		(
			(
			/ "all 'CheckScalar'" -> 'CheckArithmetic' $effective
				@ %(YCLib.HostedGUI, YSLib.Adaptor.Image);
			* $comp "missing checking lower boundary '0' for %SDst when \
				converting %Rect value from %::RECT" @ "platform %Win32"
				@ %YCLib.HostedGUI $since b591 $dep_to "getting boundary \
				components check"
			),
			/ "all 'CheckNonnegativeScalar'" -> 'CheckNonnegative' $effective
				@ %(YSLib.(Adaptor.Image, Service.(TextFile, TextLayout)),
				YCLib.FileIO, 'YCLib_(Win32)'.MinGW32),
			/ "all 'CheckPositiveScalar'" -> 'CheckPositive' $effective
				@ %(YSLib.Adaptor.Image, YCLib.HostedGUI,
				'YCLib_(Win32)'.(Consoles, MinGW32), 'Helper_(Android)',
				'YCLib_(Android)'.Android)
		),
		/ %YCLib
		(
			/ %HostedGUI $=
			(
				/ @ "platform %Win32" $=
				(
					(
					/ $re_add(b591) "exception neutrality from %CheckArithmetic"
						~ "assertion" $dep_from "getting boundary components \
						check" $effective @ "member functions \
						%WindowReference::(SetBounds, SetSize)";
					* $comp "missing upper boundary check when getting window \
						boundary component values" $orig
						(@ %Win32GUI $since b445)
					),
					/ @ "member function %WindowMemorySurface::UpdateBounds" $=
					(
						* "missing check 1st %::SelectObject result" $orig
							@ ("%DSScreen::UpdateToHost" @ %DSMain $since b299),
						/ "logged for %::SelectObject calls failure"
							^ "%(YTraceDe, Err)"
					)
				),
				(
					/ DLDI "member function %ScreenBuffer::UpdateToBounds"
						^ "%WindowMemorySurface::UpdateBounds"
						~ "%WindowMemorySurface::Update";
					- "member function %WindowMemorySurface::Update"
				)
			),
			* DLDI "atom operations relied on non-explicit constructor of \
				%pair instance" %XCB $since b563,
				// This cannot compile by G++ 6.1.
			/ "wrapped %YCL_KEY values with 'size_t' cast" @ %Input,
				// To make sure the type is determined. Also to eliminate G++ \
					warning: [-Wsign-conversion] on some platforms.
			/ %FileSystem $=
			(
				* "end-of-directory state treated as corrupted state due to \
					wrong %errno handling" @ !"platform %Win32"
					@ "member function %HDirectory::operator++" $since b701
					$= (/ "saved and restored %error"
						^ ("%ystdex::swap_guard" @ !platform "%Android",
						"guard class" @ "platform %Android")),
						// On platform %Android, %error is volatile-qualified. \
							This is not supported by %ystdex::swap_guard \
							currently.
				* "wrong assertion for slash-pathname path parameter"
					@ !"platform %Win32" @ "constructor %DirectorySession"
					$since b693
			),
			/ %FileIO $=
			(
				/ $revert_ex(b658) ("enumerators" @ "enum class %NodeCategory",
					"%NodeCategory mask operations") >> %FileSystem,
				/ DLDI "simplified" ^ $dep_from
					("%platform_ex::estat" @ %NativeAPI)
			),
			+ "2 functions %estat" @ "namespace %platform_ex"
				@ 'YCL_Win32 || YCL_API_POSIXFileSystem' @ %NativeAPI
		),
		* $impl "stray 'using platform::NodeCategory;' not protected by \
			conditional inclusion" @ %'YCLib_(Win32)'.MinGW32 $since b658
			// This would break compiling on other platforms, e.g. platform \
				%Linux.
	),
	/ %YBase.YStandardEx $=
	(
		+ "exception class %narrowing_error" @ %Exception,
		/ %Cast $=
		(
			+ "function template %narrow_cast";
			+ "function template %narrow" ^ $dep_from
				("%narrowing_error" @ %Exception)
		)
	),
	+ DLDI 'ynothrow' @ "lambda-expression of movign command"
		@ %Tools.SHBuild.Main
),

b702
(
	/ %YFramework $=
	(
		+ $re_add(b642) DLDI ('ynothorw', 'ynothrowv') @ "%devoptab_t routines"
			@ %'YCLib(DS)'.DSIO,
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "broken strong exception safety guarantee" @ "functions \
					%(SwapLocationOf, SwapSizeOf)" @ %YWidgetView $since b569,
				/ @ "member functions %(CheckButton, RadioButton)::Referesh"
					@ %Selector $=
				(
					/ "undefined behavior after swapping of size failed by \
						throwing an exception" $since b569
						// This may only occurred for a custom view.
					/ $doc "explicityly stated partial strong exception safety \
						guarantee" @ "Doxygen comments"
				)
			),
			+ "void return type support" @ "function template %TryInvoke"
				@ %Core.YException $=
			(
				/ "wrapped return type with %ystdex::nonvoid_result_t",
				/ $impl ^ "%ystdex::invoke_nonvoid" ~ "%ystdex::invoke"
			),
			/ $forced DLDI 'using platform::CheckIter;' @ %Adaptor.YAdaptor
				-> 'using platform::FwdIter;' $dep_from
				("%FwdIter" @ %YCLib.Debug)
		),
		/ @ "class %DirectoryFindData" %'YCLib_(Win32)'.MinGW32 $=
		(
			/ @ "function %GetNodeCategory" $=
			(
				(
				/ DLDI ^ "%(TryCategorizeNodeAttributes, \
					TryCategorizeNodeDevice)" ~ "%CategorizeNode",
				/ DLDI ^ ("%ystdex::unique_guard", $dep_from "%TryInvoke"
					@ %YSLib.Core.YException, $dep_from "%ystdex::dismiss"
					@ %YBase.YStandardEx.ScopeGuard) ~ "%FilterExceptions";
				+ $comp "traced when exception thrown for invalid handle",
					// This should not occur unless %MakeFile get wrong handle \
						due to bug of underlying system or drivers.
				* "missing set %NodeCategory::Invalid on failure" $since b660
				),
				(
				/ $re_add(b669) DLDI "simplified" ^ "%unique_ptr" $=
				(
					+ "private deleter class",
					^ "data member of %unique_ptr instance";
					/ "simplified function %Rewind",
					/ DLDI "explictly defaulted move constructor",
					/ "simplified by explictly defaulted destructor"
						@ "non-header file";
				);
				* "always caught exception for invalid handle after %Read \
					error occurred" @ "destructor" $since b701
					// Becuase the handle is not closed on error, it will be \
						closed again at destructor call.
				)
			)
		),
		/ %YCLib $=
		(
			/ @ "platform %Win32" @ %HostedGUI $=
			(
				/ @ "class %WindowRegionDeviceContext" $=
				(
					* $dev "missing noncopyable protect" $orig
						(@ %Win32GUI $since b428)
						$= (+ $impl "private base %ystdex::noncopyable"),
					+ "function %IsBackgroundValid"
				),
				+ "assertion to ensure nonnull native window handle parameter"
					@ ("constructor" @ "class template %GSurface") ^ "%Nonnull",
					// NOTE: For simplicity and consistency, now null handle \
						is not accepted in any base constructors even if for \
						%GetDC it has well-defined behavior.
				/ @ "constructors %(WindowDeviceContext, \
					WindowRegionDeviceContext)" $=
				(
					+ "assertion to ensure nonnull native window handle \
						parameter" ^ "%Nonnull",
					+ "throwing %YSLib::LoggedEvent for initialization failure"
				),
				+ $comp "assertion to ensure nonnull parameter"
					@ "member functions %ScreenBuffer::(UpdatePremultipliedTo, \
					UpdateTo)" @ "platform %Win32" $dep_from "%GSurface",
					// To be same as %UpdateTo for platforms other than %Win32.
				+ DLDI "assertion to recheck nonnull native bitmap handle"
					@ "function %WindowMemorySurface::UpdateBounds",
				/ @ "class %HostWindow" $=
				(
					+ "assertion to ensure nonnull native window handle"
						@ "constructor";
					+ $doc "'\invariant' command to ensure %GetNativeWindow \
						result nonnull"
				),
				(
				/ $forced "caught member function %HostRenderer::Update"
					@ %HostRenderer ~ "caught only platform specific exceptions"
					$dep_from %YCLib.HostedGUI;
					// Serface initialization now can throw.
				* "unhandled %LoggedEvent due to mismatched view size and \
					buffer size" $since b590
					$= (/ "caught %LoggedEvent"
						^ "%ExtractAndTrace with level 'Warning'")
					// This may actually occur if the user changes the size \
						too quickly. This is still to be resolved, see issue \
						#27.
				)
			),
			/ %Debug $=
			(
				/ 'ynothrow' @ "function template %Nonnull" -> 'ynothrowv',
				(
				/ "function template %CheckIter" -> "%FwdIter"
					// 'Check*' is now reserved for check which can throw.
					$= (/ 'ynothrow' -> 'ynothrow');
				/ $forced "function template %Deref" ^ "ADL %FwdIter"
					~ "ADL %CheckIter"
				)
			)
		)
		/ %Helper $=
		(
			* "UI drawing corruption when hosted window dragged to the edge of \
				the screen when %Host::Window::UseOpacity is not set"
				@ "platform %Win32" $since b591 $=
				// When %UseOpacity is set, %WM_PAINT is not relied so this \
					does not has effect. For full area it also behaves \
					correctly so restoring minimized window does not have \
					effect.
			(
				* "DS window screen update source coordinate calculation" $since
					b591,
				* "window renderer update source coordinate calculation"
					@ "constructor %RenderWindow" @ %HostRenderer $since b591
			),
			+ DLDI "assertion to recheck nonnull window handle"
				@ ("painting event handling", "member functions \
				%Window::(UpdateFrom, UpdateFromBounds)" @ %HostWindow)
		)
	),
	+ "3 function template %dismiss" @ %YBase.YStandardEx.ScopeGuard
),

b701
(
	/ %YFramework $=
	(
		/ $impl "%std::terminate called on allocation failure due to wrong \
			'ynothrow'" @ "DS screen initialization" @ %'Helper_(DS)' $since
			b380,
			// Also to eliminate G++ 6.1 warning: [-Wterminate].
		/ %YCLib $=
		(
			/ DLDI "constructor %HostWindow" @ %HostedGUI,
				// To eliminate G++ 6.1 warning: [-Wsign-conversion].
			/ %FileIO $=
			(
				/ @ "function template %ThrowFileOperationFailure" $=
				(
					+ "parameter 'int err = errno'";
					/ "allowed using parameter for the thrown exception"
						~ "%errno"
				),
				/ @ "platform %Win32" @ "member function \
					%FileDescriptor::GetCategory" $dep_from
					("function %CategorizeNode with native handle parameter"
					@ %'YCLib_(Win32)'.MinGW32) $=
				(
					* $comp "missing attributes detection" $since b658,
					/ DLDI "simplified"
						$= (- "branch for null handle")
				),
				/ @ "functions %HaveSameContents" $=
				(
					+ "overload for 'const char16_t*' pathname parameters",
					* $re_add(b560) "directory with other file system category \
						not recognized as directory" $since b658
					(
					- 'YB_NONNULL(3, 4)' @ "overloading with handle parameters";
					* $doc "wrong Doxygen command '\pre'" $since b658
					),
					* $comp "directory attribute not used" @ "platform %Win32"
						$since b658 $dep_from "%FileDescriptor::GetCategory"
				)
			),
			/ @ "class %HDirectory" @ %YCLib.FileSystem $=
			(
				/ @ "function %operator++" $=
				(
					(
					* "missing throwing on error" $since b411 $=
						// This would cause some errors (e.g. dereferencing a \
							broken reparse point to a directory) treated as \
							normal end of directory iteration.
					(
						/ "checked to throw %FileOperationFailure with nested \
							underlying %std::system_error" @ "platform %Win32"
							^ "%std::throw_with_nested" $dep_from
							("%DirectoryFindData::Read"
							@ %'YCLib_(Win32)'.MinGW32),
						/ $impl "checked %errno and threw \
							%FileOperationFailure on demand"
							@ !"platform %Win32"
					),
					* $comp DD "wrong Doxygen command '\throw'" $since b411
					),
					/ DD "merged Doxygen commands '\throw'"
				),
				* $comp "missing attributes detection" @ "platform %Win32"
					@ "member function %HDirectory::GetNodeCategory" $since b658
					$dep_from ("%DirectoryFindData::GetNodeCategory"
					@ %'YCLib_(Win32)'.MinGW32)
			)
		),
		/ %YSLib $=
		(
			/ $impl "%std::terminate called on failure due to wrong 'ynothrow'"
				@ "member function %HBitmap::SaveTo" @ %Adaptor.Image $since
				b556,
				// Also to eliminate G++ 6.1 warning: [-Wterminate].
			* "redundant tracing of exception message"
				@ "function %TraceExceptionType" @ %Core.YException $since b591,
				// To reduce duplicate message in calls of functions like \
					%ExtractAndTrace since %ExtractException has already \
					traced for 'what()' in each level of nested exception.
			/ %Service $=
			(
				/ DLI "reduced excessive %errno access"
					@ "function templates %(TryRemove, TryUnlink)" @ %File
					$dep_from ("%ThrowFileOperationFailure" @ %YCLib.FileIO)
				/ %FileSystem $=
				(
					* $re_add(b560) "directory with other file system category \
						not recognized as directory"
						@ "function template %TraverseTree" $orig
						(@ "function template %CopyTree" @ $since b648),
					* $comp "missing directory detection" @ "platform %Win32"
						@ "function templates %(Traverse; TraverseChildren); \
						function %ListFiles" $since b658 $dep_from
						("%HDirectory::GetNodeCategory" @ %YCLib.FileIO)
				)
			)
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			* "ambiguity call between %MakeFile#(1, 6) for single path argument"
				$since b660
				$= (- "default argument" @ "2nd parameter"
					@ "function MakeFile#6")
			/ @ "function %FetchModuleFileName" $=
			(
				+ "parameter 'YSLib::RecordLevel = YSLib::Err';
				/ "%Win32Exception thrown with level specified by parameter"
					~ "%YSLib::Emergent";
				/ $comp "%Win32Exception thrown by call with 1 argument"
					^ "%YSLib::Err" ~ "%YSLib::Emergernt"
			),
			/ @ "class %DirectoryFindData" $=
			(
				* "missing throwing error" @ "member function %Read" $since b549
					$=
				(
					/ "threw %Win32Exception when error code is not \
						%ERROR_FILE_NOT_FOUND for %::FindFirstFileW call",
					/ "threw %Win32Exception when error code is not \
						%ERROR_NO_MORE_FILES for %::FindNextFileW call"
				),
				* $comp "missing attributes detection" @ "function \
					%GetNodeCategory" $since b658 $dep_from
					"function %CategorizeNode with native handle parameter"
			),
			(
			+ "function %IsDirectory with %FileAttributes parameter";
			/ DLDI "2 %IsDirectory for ('const ::WIN32_FIND_DATAA&', \
				'const ::WIN32_FIND_DATAW&')"
				^ "%IsDirectory for %FileAttributes"
			),
			(
			+ "function %CategorizeNode with %FileAttributes and reparse tag \
				(i.e. 'unsigned long') parameters";
			/ DLDI "simplified %CategorizeNode with \
				'const ::WIN32_FIND_DATAW&' paramater"
				^ "%CategorizeNode with 2 parameters",
			+ "function %CategorizeNode with 'const ::WIN32_FIND_DATAA&' \
				paramater",
			+ "function %TryCategorizeNodeAttributes"
			),
			+ "function %TryCategorizeNodeDevice",
			/ @ "function %CategorizeNode with native handle parameter" $=
			(
				- 'ynothrowv' -> 'ynothrow';
				/ "accepted for null handle"
					$= (- "assertion"),
				* "missing attributes detection" $since b658
					$= (/ DLDI ^ $dep_from ("%(TryCategorizeNodeAttributes, \
						TryCategorizeNodeDevice)")),
			)
		)
	)
),

b700
(
	/ @ "3rdparty libraries" $=
	(
		/ @ "freetype" $=
		(
			(
			+ "FreeType source replacement %(src/sfnt/ttmtx.c, \
				src/smooth/ftgrays.c)";
				// To make it work expectedly on platform %DS.
			+ '-DFT_CONFIG_OPTION_OLD_INTERNALS' @ "%CFLAGS"
				@ "freetype %config.mk" @ "platform %DS" $dep_to
				"FreeType old internals command line",
			),
			/ $revert_ex(b563) $build "merged freetype including directory \
				except for 'ft2build.h'" -> "%3rdparty/include"
				~ "%3rdparty/freetype/include" $dep_to
				"FreeType inclusion path",
				// As of FreeType 2.6.1, the including directory of header \
					files except for 'ft2build.h' had been changed back to \
					resolve http://savannah.nongnu.org/bugs/index.php?45097.
			/ DLP "updated library %freetype" @ "library using"
				$= (^ $re_ex(b493) "updated freetype 2.6.3 with several files \
					remained from freetype 2.4.11" ~ "freetype 2.5.3")
				// See [Documentation::Dependencies @@2.2.3].
		),
		/ $re_ex(b600) "updated library %FreeImage" $=
		(
			^ "libjpeg-turbo 1.5.0" ~ "libjpeg-turbo 1.4.0" @ "%Source/LibJPEG"
				$=
			(
				(
				/ "updated %(config.h, jconfig.h, jconfigint.h) except for \
					macro %WITH_SIMD" ^ './configure --build=i686-pc-mingw32',
					// This is more accurate than old version though it \
						worked with some manually configured macro definition.
				/ $comp "value of macro %JPEG_LIB_VERSION" -> '62' ~ '80'
				),
				/ $forced "updated %Makefile.srcs"
			),
			^ "libpng 1.6.23" ~ "libpng 1.6.17" @ "%Source/LibPNG";
				// With official prebuilt %pnglibconf.h.
		)
	),
	/ %YFramework $=
	(
		+ $forced DLDI '-DFT_CONFIG_OPTION_OLD_INTERNALS' @ "%CPPFLAGS"
			@ "makefile" @ "platform %DS" $dep_from
			"FreeType old internals command line",
		/ $forced DLDI "FreeType internal header path" @ %YSLib.Adaptor.Font
			$dep_from "FreeType inclusion path"
	),
	/ $re_ex(b585) "updated %SUBTITLE2 year" @ "makefile" @ "platform %DS"
		@ "project %YSTest",
	(
	/ %Tools.ProjectGenerator.Main $=
	(
		- $revert(b683) "option '-DYB_Use_LightweightTypeID=1' for generated \
			platform %DS .cbp files",
			// Since platform %DS uses custom makefile, this is useless.
		* "wrong inclusion directory" @ "platform %MinGW32" $since b633
	);
	/ $re_ex(b600) "regenerated Code::Blocks projects"
		^ ("%GenerateProjects.sh" @ %Tools.Scripts);
	),
	/ $dev $build "toolchain and library using"
	(
		/ DLP "platform %MinGW32" $=
		(
			^ $re_ex(b622) "MinGW[gcc version 5.4.0 (Rev1, Built by MSYS2 \
				project)] mingw32/mingw-w64-i686-gcc-5.4.0-1" ~ "MinGW[gcc \
				version 5.2.0 (Rev3, Built by MSYS2 project)] \
				mingw32/mingw-w64-i686-gcc-5.2.0-3" @ "platform %MinGW32",
				// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
					Exceptions implementation: Dwarf2.
			^ $re_ex(b622) "mingw-w64-i686-binutils 2.25.1-5 from MSYS2"
				~ "mingw-w64-i686-binutils 2.25.1-1"
		);
		/ DLP "toolchain and library using" $dep_from "3rdparty libraries" $=
		(
			/ $re_ex(b520) "rebuilt library %(FreeImage, FreeType)"
				@ "platform %(MinGW32, DS)",
			/ "rebuilt library %FreeType" @ "platform %Android"
		)
	)
);

////

