﻿/*
	© 2015-2016 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.6.txt
\ingroup Documentation
\brief 版本更新历史记录 - V0.6 。
\version r11913
\author FrankHB <frankhb1989@gmail.com>
\since build 600
\par 创建时间:
	2015-05-21 01:17:08 +0800
\par 修改时间:
	2016-06-11 06:32 +0800
\par 文本编码:
	UTF-8
\par 模块名称:
	Documentation::ChangeLog::'V0.6'
*/

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

$import $HISTORY;

// Scope: [b600, b700);

$now
(
),

b699
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				/ @ !"platforms %(DS, Windows)" @ "function %ReadLink" $=
				(
					/ DLI "avoided redundant copy of result",
					/ "threw %std::invalid_argument for existed file which is \
						not a link"
						// This matches the behavior on platform %Win32
				),
				/ @ "platform %DS" @ "all functions %(ReadLink, \
					CreateHardLink, CreateSymbolicLink)" $=
				(
					+ 'YB_NORETURN',
					(
					* "wrongly threw %std::system_error with \
						%std::errc::not_supported for 'char' overloadings"
						~ "with %std::errc::function_not_supported" $since b652;
					* $doc "wrong exception condition" @ "'\exception' command"
						@ "Doxygen comments" @ "'char' overloadings" $since b660
					),
					/ $design "assertion" ^ "%YAssertNonnull" ~ "%Nonnull"
				),
				+ "2 functions %ResolvePath",
				* "missing 'platform::'" @ "call of %FindColon" @ "function \
					templates %(IsAbsolute_P, FetchRootNameLength_P) with \
					%IDTag<YF_Platform_DS> parameter" $since b654,
				/ "constructor %DirectorySession" -> "default constructor and \
					2 explicit constructors with different string types and \
					'YB_NONNULL'",
					// To allow optimal initialization.
				/ "class %HDirectory" $=
				(
					/ DLDI "private data member"
						^ "brace-or-equal-initializer ' = 0'";
					/ "constructor %HDirectory"
						-> 'using DirectorySession::DirectorySession;'
				)
			),
			/ %FileIO $=
			(
				(
				/ "function %u16getcwd_n" -> "2 functions %ugetcwd with \
					overloading for both UTF-8 and UCS-2 buffer" $=
				(
					/ 'ynothrow' -> 'ynothrowv';
					+ "assertion to ensure nonnull parameter";
					* $comp "invalid 'YB_NONNULL'" $orig
						(@ %FileSystem $since b592)
						// The documents explicitly allowed null parameter.
				);
				+ "function template %TryGetCurrentWorkingDirectory" ^ $dep_from
					("%retry_for_vector" @ %YBase.YStandardEx.Container)
				)
				* "wrong '\param' command" @ "Doxygen comments"
					@ "function %upclose" $orig (@ %FileSystem $since b566)
			)
		),
		/ %YSLib
		(
			/ $forced DLD 'using platform::u16getcwd_n;'
				-> 'using platform::ugetcwd' @ %Adaptor.YAdaptor $dep_from
				%YCLib.FileIO,
			/ %Service.FileSystem $=
			(
				/ $forced DLDI "function %FetchCurrentWorkingDirectory"
					$dep_from %Adaptor.YAdaptor,
				/ @ "functions %VerifyDirectory" $=
				(
					// To utilize optimal %DirectorySession constructors, esp. \
						on platform %Win32.
					+ "overloadings of %VerifyDirectory for \
						('const char16_t*'; 'const u16string&')";
					/ DLP "optimized overloading for 'const String&'" ^ "%c_str"
						~ "%GetMBCS";
					/ $comp "optimized overloading for 'const Path&'"
				)
			)
		),
		/ DLDI "simplified %FetchModuleFileName" @ %'YCLib_(Win32)'.MinGW32
			^ $dep_from ("%retry_for_vector" @ %YBase.YStandardEx.Container)
	),
	+ "function template %retry_for_vector" @ %YBase.YStandardEx.Container
		// This is concerned with http://wg21.cmeerw.net/lwg/issue2466 but not \
			a big issue in general. It throws when allocation failed. It is \
			user's responsibility to keep it usable.
),

b698
(
	+ "function template %get_quote_mark_nonstrict" @ %YBase.YStandardEx.String;
	/ %YFramework $=
	(
		/ DLDI "simplified %CheckLiteral" @ %NPL.Lexical ^ $dep_from
			("%ystdex::get_quote_mark_nonstrict" @ %YBase.YStandardEx.String)
		* "buffer overrun for text file whose length greater than 4"
			@ "function %DetectBOM with %string_view parameter"
			@ %YSLib.Service.TextFile $since b694
	),
	/ %YReader $=
	(
		* $comp "silent crash" @ "static release configuartion"
			@ "platform %Win32" @ %ShlReader $since b694 $dep_from
			%YFramework.YSLib.Service.TextFile,
		/ @ "class %SystemInformationPanel" @ %About $=
		(
			/ $re_ex(b697) "made height of tree view 1pt less further"
				@ "constructor";
			+ "title label"
		)
	)
),

b697
(
	/ %YFramework $=
	(
		- "explicit exception specification" @ "destructor %JNIBase" %YCLib.JNI,
		/ %NPL.NPLA1 $=
		(
			/ DLI "improved performance"
				@ "functions %(RegisterContextHandler, \
				RegisterLiteralHandler)" ^ "%std::move",
			/ "constructor template" @ "classes %(FormContextHandler, \
				FunctionContextHandler)" ^ "forwarding reference parameter",
			+ "function template %ToContextHandler",
			/ @ "function template %RegisterFunction" $=
			(
				/ "forwarding reference parameter",
				/ DLDI "simplified" $dep_from "%ToContextHandler",
				/ $forced DLDI $dep_from "%RegisterContextHandler" ^ 'NPL::'
					~ 'A1::'
			),
			/ "supportted empty node" @ "function %ReduceFirst"
				~ "undefined behavior",
				// Even if for %Reduce it is guaranteed the parameter in first \
					iteration of list evaluation would not be an empty list \
					term, it is necessary for others. This is different to \
					%RemoveHead which has no sense for an empty node.
			+ "function %EvaluateContextFirst"
			/ "threw %ListEvaluationFailure if terms are not greater than 1"
				@ "member function %FunctionContextHandler::operator()",
			(
			+ "function %ReduceChildren";
			+ "2 inline overloaded functions %ReduceChildren",
			/ DLDI "simplified function %ReduceArguments" ^ "%ReduceChildren"
			),
			(
			/ "function %(TransformForSeperator, \
				TransformForSeperatorRecursive, ReplaceTermForSeperator)"
				=> "%(TransformForSeparator, TransformForSeparatorRecursive, \
				ReplaceSeparatedChildren)";
			* "spelling error" $since b696,
			* "name not reserved if transformation occurred"
				@ "function %ReplaceSeparatedChildren"
				$orig (@ "function %ReplaceTermForSeperator" $since b696)
			);
			/ ("aliases %(ContextNode, ContextHandler, LiteralHandler), \
				'using YSLib::AccessChildPtr', functions \
				%(RegisterContextHandler, RegisterLiteralHandler, FetchValue, \
				LookupName, DetectReducible, LiftTerm, LiftFirst, LiftLast), \
				(class %PassCombinator; alias template %GPasses; aliases \
				%(TermPasses, EvaluationPasses)), aliases %(Guard; \
				GuardPasses), function template %InvokePasses"
				@ "namespace %A1") >> ("namespace %NPL" @ %NPLA)
				// Since %ValueNode has already been used in NPLA, many \
					algorithms should also be there.
		),
		* "unexpected ADL of %PostMessage call" @ "function template %PostTask"
			@ %YSLib.Core.Task $orig (@ %Helper.ShellHelper $since b448)
	),
	/ %YReader $=
	(
		- $revert(b534) "test for class %TreeView" @ "constructor %ShlExplorer"
			@ %ShlExplorer,
			// It has been effectively replaced by system information UI in \
				the "About" dialog.
		/ "made height of tree view 1pt less" @ "constructor \
			%SystemInformationPanel" @ %About
			// To avoid the border of the tree view touches the border of \
				buttons.
	)
),

b696
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %YApplication $=
				(
					+ "yconstexpr object %DefaultQuitPriority",
					/ @ "function %PostQuitMessage" $=
					(
						/ "hard-coded default argument for 2nd parameter"
							-> $dep_from "%DefaultQuitPriority",
						+ "default argument '0' for 1st parameter"
					)
				),
				/ @ "class %ValueNode" @ %Core.ValueNode $=
				(
					+ "aliases %(reverse_iterator, const_reverse_iterator)";
					+ "2 functions %(rbegin, rend)"
				)
			),
			/ $dev $lib @ "class %Font" %Adaptor.Font $=
			(
				/ "explicitly specified default argument as internal"
					@ "function %GetGlyph" ^ "%yimpl",
				/ $design $impl "simplified check" @ "function %SetSize"
					^ "%IsInClosedInterval"
			)
		),
		/ "default template argument" @ "class template %GShellSession"
			@ %Helper.ShellHelper ^ "%lref" ~ "%std::reference_wrapper",
		/ %YCLib.JNI $=
		(
			/ $lib $impl "class %JNIBase" ^ "%lref" ~ "%std::reference_wrapper",
				// This means now %::JavaVM and %::JNIEnv do not need to be \
					complete types. They should not violate ODR, though.
			/ DLDI "minimalized header dependencies"
		),
		/ %NPL.NPLA1 $=
		(
			+ "function %LiftLast" ^ $dep_from
				("%ValueNode::rbegin" @ %YSLib.Core.ValueNode),
			+ "functions %(TransformForSeperator, \
				TransformForSeperatorRecursive; ReplaceTermForSeperator)",
			+ "class %FunctionContextHandler; function template \
				%RegisterFunction"
		)
	),
	/ %YReader $=
	(
		/ "class %AboutPanel" @ %About $=
		(
			(
			+ "enum class %Command";
			+ "event OnCommand"
			),
			/ @ "constructor" $=
			(
				/ DLDI "simplified quit message binding" ^ ("%std::bind",
					$dep_from "%DefaultQuitPriority"
					@ %YFramework.YSLib.Core.YApplication),
				* "touched panel contents caused dialog buttons hidden in the \
					back side of the dynamic widget root" $since b695
					$= (/ ^ "Z order 32 for dynamic widget root"),
				/ "set font of title of application with bold style",
				(
				+ "button %btnSysInfo";
				+ "command binding for %btnSysInfo" ^ $dep_from "%OnCommand"
				)
			),
			+ "class %SystemInformationPanel"
		);
		+ "support for system information UI by clicking %btnSysInfo on about \
			panel" @ "class %ShlExplorer" @ %ShlExplorer
		(
			+ "protected data member %pnlSysInfoPanel";
			+ "updating contents and showing system information panel"
				@ "about panel %OnCommand handler"
		)
	)
),

b695
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %String $=
			(
				+ "unary type trait %is_string_like",
				/ @ "unary type trait %is_string_class" $=
				(
					(
					- "unnecessary specializations";
					* $doc "comments mismatched" $since b557
					),
					/ DLDI "simplified" ^ $dep_from "%is_string_like"
				)
			),
			+ "functions %(native_byte_order, native_little_bit_order)"
				@ %CStandardInteger
		)
	),
	/ %YFramework $=
	(
		/ %Helper.Initialization $=
		(
			/ DLDI "simplified paths configuration",
			/ "path getting" $=
			(
				/ @ "platform %Win32" $=
				(
					/ DLDI "simplified" ^ "%IO::Path",
					+ DLDI "caching" ^ "static object",
					+ "log for directory path with level 'Informative'"
				),
				+ "uniform path verification" ^ "%IO::VerifyDirectory",
				* "SUID programs broke due to %uaccess check"
					@ "platform %Android" $since b506
					// It should do nothing with process elevation.
					$= (/ "verifying path" ^ "uniform path verification"
						~ "%uaccess")
			)
		),
		/  @ %YSLib.UI.TreeView $=
		(
			/ @ "class %TreeList" $=
			(
				* "binding collapsed first branch subnodes as leaf nodes"
					@ "function %Bind" $since b532
					// This would only occur when the argument is small \
						enough, but not zero. Note %CheckNodeState will only \
						consider a branch node when the node is in the indent \
						map, otherwise the leaf and branch nodes in same \
						implied range cannot be differentiated.
				/ DLDI "simplified function %CheckNodeState",
				* "collapsed first branch subnodes treated as leaf nodes on \
					expanding collpsed branch nodes" @ "function \
					%ExpandOrCollapseNode" $orig (@ "constructor" $since b532)
					// Ditto.
			),
			/ "function %CheckNodeState" @ "classes %(TreeList, TreeView)"
				=> "%QueryNodeState"
		)
	),
	/ %YReader $=
	(
		/ "class %FrmAbout" @ %About -> "%AboutPanel" $=
		(
			(
			- "button %btnClose";
				// Also to prevent warning: [-Wshadow].
			/ "base class %Form" -> "%DialogPanel"
			),
			/ "version text" $=
			(
				* "duplicate 'PreAlpha'" $since b565,
				* "outdated" $since b600
			),
			/ $comp $revert(b443)
				"stopped splitting color changing when being clipped"
		),
		/ @ "class %ShlExplorer" @ %ShlExplorer $=
		(
			/ $forced "protected data member 'unique_ptr<FrmAbout> pFrmAbout;'"
				-> 'AboutPanel pnlAbout{};' $dep_from %About,
			/ "made node name shown" @ "tree view test" @ "constructor"
		)
	)
),

b694
(
	/ %YBase $=
	(
		/ "macro %yfsig" @ 'YB_IMPL_CLANGPP' @ %YDefinition
			^ '__PRETTY_FUNCTION__',
			// Now Clang++ should behave similar as G++.
		/ %YStandardEx $=
		(
			/ %TypeTraits $=
			(
				+ "unary type trait %is_referenceable",
				/ "binary type traits %(is_swappable_with, \
					is_nothrow_swappable_with)" $=
				(
					* "wrongly implied for lvalue reference type as parameters"
						$since b686,
					* "missing referenceable type check" $since b686
						$= (/ $impl ^ $dep_from "%is_referenceable")
				)
			),
			* "ill-formed use of 'size_type'" @ "function template %str_rfind#2"
				@ %CString $since b640
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ "public data members %(nTextSize, nBlock, mBuffer)" @ "class \
					%TextFileBuffer" @ %TextManager -> "private data members",
					// It is dangerous to make them public. This also make \
						names conforming to convention about access-specifiers.
				/ %TextFile $=
				(
					/ $dev $lib "declarations of %(CheckBOM, DetectBOM) with \
						pointer parameters" ^ 'YB_NONNULL',
					+ "function %DetectBOM with %string_view parameter",
					/ @ "function %DetectBOM with 'istream&' parameter" $=
					(
						(
						/ "checked nonnegative read count result"
							^ "%(istream::gount, CheckNonnegativeScalar)",
						/ "tested BOM" ^ "%string_view" $dep_from
							"function %DetectBOM with %string_view parameter"
						);
						* $comp "non-empty BOM less than 4 bytes (that is, one \
							of UTF-8, UTF-16LE or UTF-16BE) not detected when \
							for files whose size is not greater than 4" $since
							b621,
					),
					* "wrongly detected UTF-16LE for UTF-32LE BOM"
						@ "functions %DetectBOM" $orig (@ "member function \
						%TextFile::CheckBOM" $since $before b132)
						// The order makes sense. Since UTF-16LE BOM is the \
							prefix of UTF-32LE BOM, it should be checked later.
				),
				* $comp "assertion failed for files with only a non-empty BOM \
					less than 4 bytes" @ "member function \
					%TextManager::operator[]" @ %TextManager $since b621
					$dep_from "%DecetBOM" @ %TextFile;
			),
			/ @ "class %TreeList" @ %UI.TreeView $=
			(
				* $doc "missing requirement on %ExtractText" $since b532,
				/ DLDI "function %GetIndentWidth" ^ "%IndentMap::cend"
					~ "%IndentMap::end",
				/ @ "function %Bind" $=
				(
					* "missing strong exception safety" $since b532;
					* $comp "corruptied contents by duplicate calls due to \
						missing clearing list, indent map and expanded set"
						$since b532
				),
				* "invalid access at end of indent map"
					@ "function %CheckNodeState" $since b532
			)
		),
		(
		+ "function %FetchModuleFileName" @ %'YCLib_(Win32)'.MinGW32;
		/ "adjusted default base path for root of configuartion and \
			configuration file path based on image base path" @ "platform \
			%Win32" @ %Helper.Initialization ~ "current working directory"
		)
	),
	/ %YReader $=
	(
		* $comp "assertion failed for files with only a non-empty BOM less \
			than 4 bytes" @ %DSReader $since b621 $dep_from
			%YFramework.YSLib.Service.TextManager,
			// This would cause inifinte loop with identical conversion states for specific files after the assertion is suppressed.
		* $comp "crash after collapse and expanding at last node" @ "tree view \
			test" @ %ShlExplorer $since b534 $dep_from
			("%TreeList::CheckNodeState" @ %YFramework.YSLib.UI.TreeView)
	);
),

b693
(
	/ %YBase.YStandardEx $=
	(
		/ "function templates %(destroy_in, destroy, destroy_range)"
			=> "%(descruct_in, destruct, destruct_range)" @ %Memory,
		/ $forced DLDI @ %(ScopeGuard, Optional) $dep_from %Memory,
		+ "alias template %replace_pun_t" @ %TypePun,
		/ "class template %call_once_init" %Utilities $=
		(
			/ "all static member functions" -> "2 member functions %get"
				^ $dep_from ("%replace_pun_t" @ %TypePun),
			/ "static instance" -> "memberwise instance",
			/ "prevented copying or moving" ^ "%(noncopyable, nonmovable)"
		)
	),
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)' $=
		(
			/ DLDI %NLS $=
			(
				/ "prevented copying or moving" @ "NLS table entry"
					^ "%ystdex::(noncopyable, nonmovable)",
				/ "simplified NLS table entry initialization"
					^ "%ystdex::try_emplace"
			),
			/ %'YCLib_(Win32)'.MinGW32 $=
			(
				/ DLDI "simplified" @ "assertion"
					@ "constructor %DirectoryFindData" ^ $dep_from
					("%platform::EndsWithNonSeperator" @ %YCLib.FileSystem),
				+ "function %FetchWindowsPath",
				* "missing error checking" @ "function %FetchSystemPath" $since
					b593
			)
		),
		/ %YCLib.FileSystem $=
		(
			* $doc "redundant '//@}'" @ "class %HDirectory" $since b411,
			(
			+ "2 function tmeplates %EndsWithNonSeperator_P";
			+ "function template %EndsWithNonSeperator";
			/ DLDI "simplified" @ "assertion" @ !"platform %Win32"
				@ "constructor %DirectorySession" ^ "%EndsWithNonSeperator"
			)
		),
		/ %Helper $=
		(
			/ %Initialization $=
			(
				/ "supported for system font directory" @ "platform %Win32"
					~ ("hard-coded 'C:\Windows\Fonts'" @ "platform %MinGW32")
					^ $dep_from ("%platform_ex::FetchWindowsPath"
					@ %'YCLib_(Win32)'.MinGW32),
				/ $forced "1st parameter" -> 'Application&' ~ 'Environment&'
					@ "functino %LoadComponents" $dep_from
					"guard stack trasportation"
			),
			/ @ "class %Enviornment" @ %Environment $=
			(
				/ "guard stack" >> "class %Application"
					@ %YSLib.Core.Application $dep_to
					"guard stack trasportation";
				/ $forced "constructor" ^ $dep_from
					("%Application::(AddExit, AddExitGuard)" @ %YApplication)
			),
			/ "loading file failed after possible creation on missing"
				@ "function %LoadNPLA1File" $=
			(
				/ "avoided throwing" ^ "%TryInvoke",
				+ "tracing with level 'Warning' and fallback"
			)
		),
		/ @ "class %Application" @ %YSLib.Core.YApplication $=
		(
			- "data member %ApplicationExit",
			+ "function templates %(AddExit; AddExitGuard)" $dep_from
				"guard stack trasportation"
		)
	),
	* $comp "assertion failed for invalid MIME data file loaded" @ %YReader
		$since b450 $dep_from
		("%LoadNPLA1File" @ %YFramework.Helper.Initialization)
		// This includes empty file. Before b552, there would be a runtime \
			error dialog for Win32 release build. Since b552 it would silently \
			fail. For invalid 'yconf.txt' the program would exit by a fatal \
			error dialog. This was expected but still superseded by current \
			behavior.
),

b692
(
	/ %YFramework $=
	(
		/ %NPL.NPLA $=
		(
			+ "class %ListReductionFailure",
			/ "rethrew %NPLException on catching at first"
				@ "member function %FormContextHandler::operator()" @ %NPLA1
		),
		/ @ "namespace %Concurrency" @ %YCLib.Mutex $dep_from
			%YBase.YStandardEx.PseudoMutex $=
		(
			+ 'using YCL_Mutex_Namespace::once_flag;',
			+ 'using YCL_Mutex_Namespace::call_once;'
		),
		/ DLI "initialization of host and environment before application \
			internal instance pointer initialization" @ "class GUIApplication"
			@ %Helper.GUIApplication
			^ ("%ystdex::call_once_init", "%once_flag" $dep_from %YCLib.Mutex)
	),
	/ %YBase.YStandardEx $=
	(
		+ "struct %once_flag" @ "namespace %single_thread" @ %PseudoMutex,
		/ "function template %call_once for 'bool'" -> ("function template for \
			%once_flag" @ "namespace %single_thread" @ %PseudoMutex) $dep_from
			%PseudoMutex,
		/ @ "class template %state_guard" %ScopeGuard $=
		(
			/ DLDI "simplified" ^ "%noncopyable",
			- "data member %data" @ "all specializations",
				// It is dangerous to leave different types as union members.
			/ ("mutable data member %enabled" -> "function %engaged")
				@ "non %void condition type specialization",
			(
			/ DLDI "simplified" ^ $dep_from
				("%ystdex::(construct_in, destroy_in)" @ %Memory);
			* $comp "missing '::' before placement 'new' expression for \
				construction" $since b525 $orig (@ %Utilities)
			)
		),
		/ %Any $=
		(
			+ DLDI 'muatble' @ "any storage" @ "class %any" $dep_to
				"mutable any storage";
			/ "all 'const any_stroage&' parameter type" @ "manager"
				-> 'any_storage&' $effective @ ("alias %any_manager",
				"all static functions %manage" @ "class templates \
				%(value_handler, ref_handler)", "static functions \
				%(get_reference, get_pointer)" @ "class template %ref_handler",
				"static functions %(get_holder_pointer, get_pointer)"
				@ "class template %holder_handler" @ "namespace %any_ops");
			/ $forced "split for const qualifier" @ "functions %(get_pointer, \
				get_reference)" @ "class template %value_handler",
			/ $forced DLDI ("function %call" !^ "%get_reference")
				@ "class %any",
			/ $forced "merged all 2 functions %get_reference"
				// Otherwise client code (e.g. %YObject) may be ill-formed.
		),
		/ $forced "'const any_storage&' parameter type" @ "all static \
			functions %manager" @ "class templates %(iterator_handler, \
			input_iterator_handler, bidirectional_iterator_handler)"
			-> 'any_storage&' $dep_from %Any,
		/ @ "class template union %pod_storage"
			-> "non-union class template %standard_layout_storage" @ %TypePun $=
		(
			/ $forced "constructors",
				// For non-trivial underlying type, the defaulted constructors \
					would be deleted if the class-key is still 'union'.
			+ 'ynothrow' @ "all member (functions, function templates) %access",
			(
			/ DLDI "functions %access" ^ "%object" ~ "%data";
			/ $revert(b595) "split merged members" $dep_from
				"mutable any storage" $=
			(
				// To make the check of const correctness useful, 'mutable' \
					should better be put at client code only when necessary.
				/ "split (function, function template) %access as const \
					qualified and unqualified versions";
				- 'mutable' @ "data member %object"
			),
			/ "data member %data" -> "2 functions %data"
				// Like %state_guard.
			),
			/ $dev "loose static assertion" ^ "%is_standard_layout" ~ "%is_pod"
		),
		/ %Memory $=
		(
			(
			+ "function template %construct_in";
			/ DLDI "simplified %construct" ^ "%construct_in"
			),
			(
			+ "function template %destroy_in";
			/ DLDI "simplified %destroy" ^ "%destroy_in"
			)
		),
		/ DLDI "simplified %optional" ^ $dep_from
			("%ystdex::construct_in, destroy_in" @ %Memory)
	)
),

b691
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ "function %HandleFatalError" -> "%TraceForOutermost"
				@ %Initialization
			(
				/ "simplified fatal error handling" $=
				(
					/ $impl "merged for different platforms";
					/ $comp "split by one more newline after title"
						@ !"platform %DS"
				),
				/ "stopped showing initialization log for non-fatal error \
					handling" @ !"platform %DS"
			),
			/ "trace" ^ "clearer messages" @ "constructor, destructor"
				@ ("class %Environment" @ %Environment,
				"class %GUIHost" @ %GUIApplication),
			/ @ "platform %Win32" @ "static function %WindowThread::WindowLoop"
				@ %HostRenderer $=
			(
				/ DLDI "simplified" ^ "%::GetMessageW"
					~ "%(::PeekMessageW, WaitMessage)";
				* $comp "race condition after message insertion before \
					%::WaitMessage call caused probable infinite wait" $orig
					@ ("function %Environment::HostLoop" @ %DSMain $since b378)
			),
			/ @ "class %Environment" @ %Environment $=
			(
				- "redundant '\n'" @ "trace message" @ "destructor",
				* "trace" @ "constructor %Environment unused" $since b690
			),
			/ ('extern "C" void y_android_main();' -> 'extern int \
				y_android_main();') @ "platform %Android" @ %YGlobal
		),
		/ @ "platform %Win32" @ %YCLib.HostedGUI $=
		(
			+ "trace with level 'Debug' before Win32 API call" @ "member \
				functions %WindowReference::(SetText, Close, Invalidate)",
			/ @ "hosted message callback for %WM_DESTROY"
				@ "constructor %HostWindow" $=
			(
				+ DLDI 'ynothrow',
				+ "trace with level 'Debug' after posting quit message"
			)
		),
		/ @ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "macro %YCL_Trace_Win32Error",
			/ @ "macro %YCL_WrapCallWin32_Trace" $=
			(
				/ DLDI "simplified" ^ $dep_from "%YCL_Trace_Win32Error",
				* "missing qualified prefix" @ "trace level" $orig
					(@ "macro %YCL_CallWin32_Trace" $since b464)
			)
		),
		/ %'Helper_(Android)'.AndroidHost $=
		(
			+ 'int MainReturnValue = EXIT_SUCCESS;' @ "class %NativeHost",
			/ "saved user entry call value to %MainReturnValue"
				@ "thread handler" $dep_from "Android main return value"
		),
		/ %YSLib.Core $=
		(
			+ "function template %AsIndexNode" @ %ValueNode,
			* $re_add(b687) DD "missing '!'" @ "end of '/*'"
				@ "multiline Doxygen comments" @ %Core.YMessage $since b296
		),
		/ %NPL $=
		(
			/ DLDI ("simplified %TransformToSyntaxNode" @ %NPLA,
				"%Reduce" @ %SContext) ^ $dep_from
				("%AsIndexNode" @ %YSLib.Core.ValueNode),
			+ "function %HasValue" @ %SContext,
			/ %NPLA1 $=
			(
				+ "class %NPLException"
				(
				+ "class %ArityMismatch";
				+ "function %ThrowArityMismatch"
				),
				+ "classes %(InvalidSyntax, UndeclaredIdentifier)"
			)
		)
	),
	/ %YReader $=
	(
		* $comp "probably froze for invalid %yconf.txt" @ "debug configurations"
			@ "platform %Win32" $since b378 $dep_from
			%YFramework.Helper.HostRenderer,
			// However, it would be exited quickly if font caching failure \
				raised.
		/ @ "main function" @ %Main $=
		(
			(
			/ DLDI "simplified" ^ $dep_from
				("%TraceForOutermost" @ %YFramework.Helper.Initialization);
			* $re_add(b661) $comp
				"main error handling did not called %FatalError handling \
				method and content message would be ignored"
				@ !"platform %DS" $since b604
			),
			/ $forced @ "platform %Android" $dep_from
				%YFramework.Helper.YGlobal $=
			(
				/ "simplified prototype",
				/ "returned value" !^ "%yunused" $dep_to
					"Android main return value"
			)
		)
	),
	(
	/ $doc "merged Doxygen group %exception_types" -> "%exceptions"
		$effective @ %YFramework.(YCLib.Host, YSLib.(Core.(YException,
		YMessage), UI.(Loader, YWidgetEvent)), 'YCLib_(Win32)'.MinGW32);
	- $revert(b444) $doc "Doxygen group %exception_types" @ %YBase.YDefinition
	)
),

b690
(
	/ %YFramework $=
	(
		/ @ "platform %Win32" @ %YCLib.HostedUI $=
		(
			+ "static member function %WindowProcedure" @ "class %HostWindow";
			/ "initialized with %HostWindow::WindowProcedure when window \
				procedure parameter is null" @ "constructor#1"
				@ "class %WindowClass"
		),
		/ %Helper $=
		(
			/ @ "class %GUIHost" @ %GUIApplication $=
			(		
				/ @ "platform %Win32" @ "constructor" $=
				(
					/ DLDI "simplified" $dep_from %YCLib.HostedUI;
					/ @ "hosted window procedure" $=
					(
						* $comp "missing catch exceptions" @ "boundary" $orig
							(@ %DSMain $since b299),
						- "%YSL_DEBUG_DECL_TIMER call"
					)
				),
				/ @ "platform %Android" $=
				(
					+ 'UI::Desktop Desktop;';
					+ "initialized desktop fron native host screen"
						@ "constructor" ^ $dep_from
						("%NativeHost::GetHostScreenRef"
						@ %'Helper(Android)'.AndroidHost)
				)
			),
			/ DLDI "simplified member function %InputManager::Update"
				@ "platform %Android" @ %InputManager ^ $dep_from
				("%GUIHost::Desktop" @ %GUIApplication)
				~ "%AndroidHost::GetDesktopRef",
			/ %Initialization $=
			(
				(
				+ 'extern bool ShowInitializedLog;' @ "platform %DS",
				+ "functions %(LoadComponents, ExtractInitException)";
				/ "merged function %InitializeEnvironment"
					-> ("constructor %Environment" @ %Environment) $dep_to
					"merged environment initialization"
				),
				/ @ "platform %DS" @ "function %HandleFatalError" $=
				(
					/ "removed dashes and traling newline"
						@ "printed error message";
					* $re_ex(b601) $comp
						"redundant '\n' printed at last after horizontal line"
						@ "function %HandleFatalError" $since b508
						// This cause LibFAT error title disappeared. The old \
							fix was not enough because %YTraceDe introduced \
							another space in additional to error message \
							content.
				)
			),
			/ @ "constructor %Environment" @ %Environment $dep_from
				"merged environment initialization" $=
			(
				/ "set terminate handler before fixing console handler"
					@ "platform %Win32",
				/ $forced DLDI @ "platform %DS" $dep_from %NativeAPI
			),
			/ %HostedUI $=
			(
				/ DLDI "simplified function %PrepareTopLevelPopupMenu" ^ '{}'
					~ 'WindowThread::GuardGenerator()',
				* $doc "wrong comments about detaching"
					@ "functions %(SetupTopLevelTimedTips, \
					SetupTopLevelContextMenu)" $since b591,
				- DLDI "redundant 'UI::'"
			)
		),
		/ @ "class %NativeHost" @ %'Helper(Android)'.AndroidHost $dep_from
			%Helper.InputManager $=
		(
			(
			- "initialization and deinitialization of desktop object out of \
				the call of %::y_android_main",
			- "function %GetDesktopRef";
			- $impl "desktop pointer member"
			),
			+ "function %GetHostScreenRef"
				// %GetScreenRef is usable but %Devices::AndroidScreen is not \
					complete type for non platform extension, so there need \
					one more getter to convert the reference.
		),
		/ "functions %(InitializeFileSystem, UninitializeFileSystem)"
			-> "class %FileSystem" @ "namespace %platform_ex" @ "platform %DS"
			@ %YCLib.NativeAPI
	),
	+ 'ynothrow' @ "all member functions" @ "class %pseudo_output"
		@ %YBase.YStandardEx.Ref,
		// See also https://llvm.org/bugs/show_bug.cgi?id=15481.
	* "line of calling %error began wrongly with HT" @ "environment variable \
		check failed" @ "%(Toolchain.Android.mk, Toolchain.DS.mk)"
		@ %Tools $orig (@ "makefiles" @ "platform %DS"
		@ "projects %(YBase, YFramework, YSTest)" $since b270)
		// Lines began with horizontal tab is treated as command in makefile.
),

b689
(
	/ %YBase.YStandardEx $=
	(
		/ %YStandardEx $=
		(
			* "extraneous template parameter list 'template<bool _bCond>' "
				@ "alias template %well_formed_t" @ %TypeTraits $since b688;
				// G++ 4.9.0 accepts it while Clang++ 3.8 rejects it. See \
					https://llvm.org/bugs/show_bug.cgi?id=5559. See also \
					http://wg21.cmeerw.net/cwg/issue293.
			/ @ "specializations" @ "metafunction %return_of" @ %Functional $=
			(
				* "missing some function pointer specialization at macro \
					expansion" $since b675,
				/ "avoided disambiguity of ellipse function parameter"
					^ $dep_from ("%YPP_Args" @ %YDefinition),
					// To eliminate Clang++ warning: [-Wambiguous-ellipsis].
			),
			/ %Algorithm $=
			(
				* "function templates %(fast_all_of, fast_any_of, \
					fast_none_of) were missing of predicate indirection" $since
					b675,
				* "function templates %(strict_all_of, strict_any_of, \
					strict_none_of) ignored predicate parameter" $since b675
			),
			* "missing 'template' for dependent function template \
				%unchecked_access call" @ "friend functions %(operator==, \
				is_undereferenceable)" @ "class template %any_input_iterator"
				@ %AnyIterator $since b686.
			* "missing '&&' for other arguments" @ "all 2 function templates \
				%(nonnull_or, value_or, call_value_or)" @ %DereferenceOperation
				$since b668
				// This would return reference to automatic object if the \
					template parameter type of other argument is not a \
					reference.
			+ $impl "workaround for internal comparator" @ 'YB_IMPL_CLANGPP'
				@ %Set,
				// See https://llvm.org/bugs/show_bug.cgi?id=27504.
			/ @ "class %invalid_construction" @ %Any $=
			(
				+ $re_add(b615) $dev "defined out-of-line virtual destructor",
					// To eliminate Clang++ warning: [-Wweak-vtable].
				+ "default copy constructor"
					// To prevent Clang++ warning: [-Wdeprecated].
			),
			* "ambiguity cased by missing integral overloads for binary \
				arithmetic function templates with %fixed_point instances"
				@ %Rational $since b558,
				// Mixed arithmetic operations concerned with integral type \
					operands would not compile on Clang++ long ago, not only \
					for this reason (e.g. conversion functions) and not \
					resolved previously.
				$= (/ "overloaded SFINAE type check" ^ "%is_arithmetic"
					~ "%std::is_floating_point")
			+ "functor %id" @ %Functor
		),
		+ "macro %YPP_Args" @ %YDefinition
	),
	/ %YFramework $=
	(
		/ $forced DLDI @ "class template %PassesCombiner" @ %NPL.NPLA1 $dep_from
			("%ystdex::fast_any_of" @ %YBase.YStandardEx.Algorithm)
			$= (/ "changed predicate" ^ $dep_from
				("%id" @ %YBase.YStandardEx.Functor))
		/ %YSLib.UI $=
		(
			/ DLDI "removed redundant pessimizing 'std::move' call" @ ("constructor %YDesitop" @ %YDesktop, "member function %TreeList::GetNodePath" @ %TreeView),
				// To eliminate Clang++ warning: [-Wpessimizing-move]. See also https://news.ycombinator.com/item?id=9915300.
			/ "all (function template, 2 functions) %to_string" @ %YComponent >> %Core.YGDIBase
		),
		/ %YCLib $=
		(
			+ $dev "workaround to ignore Clang++ warnings for virtual bases" @ "namespace %platform" @ %YCommon,
				// To eliminate Clang++ warning: [-Wweak-vtables].
			* $dev "wrong message" @ "'#error' directive" @ "unknown host platforms" @ %HostedGUI $since b563,
			+ "class %WindowInputHost" @ %HostedGUI,
		),
		+ $dev $workaround(#28) "workaround to ignore Clang++ warnings" @ %CHRLib.MappingEx,
			// To eliminate Clang++ warning: [-Wignored-attributes]. See https://llvm.org/bugs/show_bug.cgi?id=25306.
		/ %Helper
		(
			+ "class declaration %GUIHost" @ %YGlobal,
			(
			+ "class %GUIHost" @ %GUIApplication;
			/ "declarations" @ "platform %Android" @ %Environment >> %GUIApplication;
			+ $forced %GUIApplication $=
			(
				/ "split GUI state" ^ "%GUIHost";
				+ "member function %GetGUIHostRef";
				+ "function %FetchGUIHost"
			),
			/ "function %GetEnvironmentRef" @ "class %Host::Window" -> "%GetHostRef",
			/ "%Environment" -> "%GUIHost" $effective @ %(HostWindow, GUIApplication, GUIShell, HostedUI, HostRenderer, InputManager);
			- "all GUI state and methods" @ "class %Environment" @ %Environment
			),
			/ @ "class %Host::Window" @ %HostWindow $=
			(
				/ "input host" ^ $dep_from ("%WindowInputHost" @ %YCLib.HostedGUI) $=
				(
					+ 'WindowInputHost InputHost;',
					- "function template %AccessInputString, functions %(UpdateCandidateWindowLocation, UpdateCandidateWindowLocation, UpdateCandidateWindowLocationUnlocked)" $dep_from "lifted input host methods"
				),
				* $comp "%AddMappedItem called only on platform %Win32" @ "constructor" $since b497
					// It should also be called for other hosted platforms.
			)
		),
		/ $forced "%Environment" -> "%GUIHost" $effective @ %('Helper_(DS)'.DSMain, 'Helper_(Win32)'.Win32Control) $dep_from %Helper,
		/ DLDI "member functions" ("%DSWindow::UpdateTextInputFocus" @ %'Helper_(DS)'.DSWindow, "%InputManager::DispatchInput" @ %Helper.InputManager)
			^ ("%Host::Window::InputHost" @ %Helper.HostWindow) $dep_to "lifted input host methods"
	);
),

b688
(
	/ %YBase.YStandardEx $=
	(
		/ %TypeTraits $=
		(
			+ "metafunction %well_formed_t";
			/ DLDI "simplified %void_t",
			+ "metafunction %when_valid"
		),
		/ @ "namespace %vseq" @ %Variadic $=
		(
			* "%(defer, defer_i) specialization" $since b684
				$= (/ "specializations" ^ $dep_from
					("%when_valid" @ %TypeTraits) ~ "%void_t")
			* "%seq_size specialization for instances did not directly \
				inherited integral constant" $since b649
				// This made almost all 'seq_size<...>::value' ill-formed \
					while 'seq_size_t<...>::value' remained working.
		),
		/ @ "namespace %vseq" @ %IntegerSequence $=
		(
			+ "metafunction %bound_integer_sequence";
			* "%ctor_of specialization for %integer_sequence instances" $since
				b684
		),
		/ DLDI "simplified all 3 overloaded function templates %any_cast with \
			reference parameter" @ %Any
	),
	* $comp "failed to build" @ %Test.YBase $since b684 $dep_from
		%YBase.YStandardEx.(Variadic, IntegerSequence),
	+ $repo "bookmark 'engineering-fault-b687'" @ b684
		@ "engineering fault bookmarks",
		// Failed to build test.
	/ %YFramework.Helper $=
	(
		/ @ "class %Environment" @ %Environment $=
		(
			+ "data member 'ValueNode Root;'",
			(
			+ "application exit guard stack";
			+ "function template %AddExitGuard"
			)
		),
		/ %Initialization $=
		(
			/ DLDI "function %FetchMIMEBiMapping" ^ "%unique_ptr"
				~ ('ynew', 'ydelete'),
			/ @ "function %InitializeEnvironment" $=
			(
				(
				/ "merged function %InitializeInstalled at end";
					// This would be awared by users through output about \
						uninitialization handlers number.
				/ $comp "always initialized root at end of call"
					@ "function %InitializeEnvironment"
				),
				+ "environment reference parameter",
					// This is now necessary. The call of 'FetchEnvironment' \
						cannot be used when initialization is not finished.
			),
			/ "accessing root" ^ ("%Environment::Root" $dep_from %Environment),
			/ @ "functions %FetchRoot" $dep_from %Environment $=
			(
				/ DLDI "simplified",
				+ 'ynothrow'
			),
			(
			/ "registered uninitialization"
				^ ("%Environment::AddExitGuard" $dep_from %Environment);
			* $comp "exception safety when registering application exit \
				handlers" $since b425,
				// If 'push' failed, the routine should have been executed \
					before exception thrown.
			- "functions %Unitialize"
			),
			/ ('#include YFM_NPL_Configuration',
				'#include YFM_YSLib_Service_TextFile') @ "header" >> %YSBuild
		)
	),
	* DLDI "wrong header inclusion" @ %Tools.SXML2XML $since b599,
		// Since %SXML was used, %YFramework.NPL.SContext was never enough, \
			instead %YFramework.NPL.NPLA1 was needed. Now it needs \
			%YFramework.NPL.SContext.
	(
	/ $dev $repo $re_add(b654) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.("%ysbuild.h" => "%YSBuild.h");
	/ $forced "header inclusion" @ %(YReader.Shells, Tools.(ProjectGenerator,
		RevisionPatcher, SHBuild, SXML2XML).Main, YDE.(Clock.Main,
		ImageBrowser.ImageControl)
	),
	- DLD "outdated project file %YSTest_DS.vcproj" @ "platform %DS"
		@ "project %YSTest"
),

b687
(
	+ '-fno-merge-all-constants' @ "variables %(CFLAGS, CXXFLAGS) when using \
		Clang++" @ "%SHBuild-common.options.sh" @ %Tools.Script,
		// See https://llvm.org/bugs/show_bug.cgi?id=27443.
	/ %YBase.YStandardEx $=
	(
		/ %Any $=
		(
			(
			* "template %operator=" @ "class %any" $since b590
				// The signature was lagged as Boost.Any and WG21 N1939. It \
					had been changed in WG21 N3390.
				$= (/ "parameter type" ^ "forwarding reference"
					~ "const reference");
			/ $doc "updated base specification to current working paper(WG21 \
				N4582)" ~ "library fundamental TS final draft(WG21 N4480)"
				// With specified extension reserved.
			),
			/ @ "namespace %any_ops" $=
			(
				+ "function template %construct",
				+ "empty class template %with_handler_t",
				- $revert(b686) "%(use_handler; use_handler_t)" $dep_from
					"constructor with parameter type %use_handler_t"
					@ "class %any"
			),
			/ @ "class %any" $=
			(
				/ DLI "simplified" ^ "%any_ops::construct",
				+ "constructor with %any_ops::with_handler_t instance \
					parameter" $dep_from "%any_ops::with_handler_t"
				- $revert(b686) "constructor with parameter type \
					%use_handler_t" $dep_from %AnyIterator,
				* "lvalue holders moved with holder forwarding reference \
					parameter" $since b677,
				/ DLDI "simplified copy constructor",
				/ DLI ^ "private base classes"
					// This also reduces redundant check, e.g. for %target.
			)
		),
		/ "metafunction %exclude_self_ctor_t" => "%exclude_self_t",
			// This is not only for constructors but also %operator=.
		/ DLDI "simplified class templates %(any_input_iterator, \
			any_forward_iterator, any_bidirectional_iterator)"
			^ $dep_from ("constructor with %any_ops::with_handler_t instance \
			parameter" @ "%any" @ %Any)
	),
	* $re_add(b673) DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen \
		comments" @ %YFramework.YSLib.Service.ImageProcessing $since b555
),

b686
(
	+ $re_add(b656) $dev $repo "pattern glob '*.VC.db'" @ "file %.hgignore",
		// For VC++ 2015 Update 2.
	/ $repo "engineering fault bookmarks" $=
	(
		- "bookmark 'engineering-defect-b225'",
			// To prevent redundancy with 'engineering-fault-b225'.
		+ "bookmark 'engineering-fault-b684'",
			// Failed to build for platform %Android in 2rd supporting class. \
				See also below.
		+ "bookmark 'engineering-fault-b685'"
			// Failed to build for platform %DS in 2rd and 3rd supporting \
				classes.
	),
	/ %YFramework $=
	(
		+ "function %ReduceFirst" @ %NPL.NPLA1,
		/ %YSLib $=
		(
			/ $comp "class %ValueObject threw %any_ops::invalid_construction \
				when initialized with value of noncopyable target types"
				@ %Core.YObject $dep_from %YBase.YStandardEx.Any,
			* "failed to build" @ "specialized pixel types fit for \
				%XYZAMaskTrait<5, 5, 5, 1>" @ "class template %GBlender"
				@ 'YB_IMPL_GNUCPP' @ %Service.YPixel $since b685
				// This should be a bug of G++. See Boost.Hana \
					'hana::when_valid' documentation: https://boostorg.github.io/hana/group__group-core.html#ga0f5d717bbf6646619bb6219b104384dc.
				$= (+ "workaround")
		),
		/ DLDI "simplified guard" ^ "%ystdex::unique_guard"
			~ "%ystdex::share_guard"
			@ ("member function %WindowThread::DefaultGenerateGuard"
			@ %Helper.HostRenderer, "function %SetupTraceDepth" @ %NPL.NPLA1)
			$dep_from %YBase.YStandardEx.(Any, ScopeGuard)
	),
	/ $doc "migrated release notes" @ "file %Readme.zh-CN.txt"
		-> %Documentation.(Dependencies, Test),
	/ %YBase.YStandardEx $=
	(
		/ %Any $=
		(
			/ @ "namespace %any_ops" $=
			(
				(
				+ "class %invalid_construction";
				+ "function %throw_invalid_construction";
				/ "class template %value_holder supported throwing"
					~ "ill-formed construction for copy"
					^ "%throw_invalid_construction",
				),
				+ 'yconstexpr const struct use_handler_t{} use_handler{};'
			),
			/ @ "class %any" $=
			(
				/ $comp "threw %any_ops::invalid_construction when initialized \
					with value of noncopyable target types" $dep_from
					"%any_ops::value_holder",
				+ "constructor template with %any_ops::use_handler_t parameter"
					$dep_to "handler initialization" $dep_from "%use_handler",
				+ "protected function %call; 2 protected function template \
					%unchecked_access",
				- "all protected data members %(manager, storage)" $dep_from
					%AnyIterator
			)
		),
		(
		+ "class template %one_shot with 3 additional specializations"
			@ %Functional;
		+ "function template %unique_guard" @ %ScopeGuard
		),
		(
		// To syncronize with WG21 N4582.
		/ "namespace %dep_swap" @ %Utilities >> %TypeTraits;
		+ "binary type traits %(is_swappable_with, is_nothrow_swappable_with)"
			@ %TypeTraits;
		/ "type traits %(is_swappable, is_nothrow_swappable)" @ %Utilities
			-> ("unary type traits" @ %TypeTraits)
			^ ("%(is_swappable_with, is_nothrow_swappable_with)" @ %TypeTraits);
		- DLDI "including %Utilities" @ %Optional,
		/ DLDI "including %Utilities" >> "including %TypeTraits" @ %ScopeGuard
		),
		/ DLDI "simplified flatterned template" ^ "%vseq::defer_t" @ %Operators
			~ "%vseq::(defer_apply_t, _a)",
		/ DLDI "simplified" @ "namespace %vseq" ^ "%instance_apply_t"
			$effective @ %(Variadic, IntegerSequence),
		/ %AnyIterator $=
		(
			/ @ "class templates %(any_input_iterator, any_forward_iterator, \
				any_bidirectional_iterator)" $=
			(
				+ "protected alias %base";
				+ "protected constructor template" $dep_from "hanlder initialization"
			);
			/ $impl @ "class template %any_input_iterator" $=
			(
				/ "simplified constructor tempalte" @ $dep_from
					"handler initialization",
				/ "simplified %operator++" ^ ($dep_from "%any::call" @ %Any)
				/ "simplified %(operator(*, ==), is_undereferenceable)"
					^ ($dep_from "%any::unchecked_access" @ %Any)
			),
			/ $impl "simplified %operator--" @ "class template \
				%any_bidirectional_iterator" ^ ($dep_from "%any::call" @ %Any),
			* "constructor template" @ "class templates %(any_forward_iterator, \
				any_bidirectional_iterator)" $since b400 $=
			(
				* $re_add(b675) "missing excluding of self type",
				* "wrong initialization of handlers" $dep_from
					"handler initialization"
			)
		)
	)
),

b685
(
	/ %YBase.YStandardEx $=
	(
		* "unconditional 'yconstfn' overloaded operators might cause \
			ill-fomred calls" @ '!(YB_IMPL_GNUCPP && YB_IMPL_GNUCPP < 50000)'
			@ "class template %transformed_iterator" @ %Iterator $since b667
			$= (+ $impl 'template<yimpl(typename = void)>'
			@ "all friend operators" $effective
			@ ("2 %operator=, 2 %operator<, 3 %operator-")),
			// G++ 4.9 for platform %Android would not work for this.
		* $re_add(b684) "ill-formed static assertions when the related '==' \
			operations are not constexpr functions" @ "class template %nptr"
			@ %Pointer $orig (@ %Utilities $since b595),
		/ DLDI %Variadic $=
		(
			/ "simplified macros";
			/ $revert(b684)
				"merged template declarations with default argument %erase"
		),
		/ "funtion templates %(pvoid, pvoid_ref)" @ %Cast >> %AddressOf,
		+ $impl "workaround" @ "operator templates"
			@ 'YB_IMPL_GNUCPP && YB_IMPL_GNUCPP < 50000' @ %Operators $=
			// Ditto.
			(/ $revert(b684) "friend templates"
				-> "non-template friend functions")
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor.YAdaptor %=
			(
				+ 'using platform::XYZAMaskTrait;',
				+ 'using platform::AXYZMaskTrait;'
			),
			/ %Service.Pixel $=
			(
				+ "metafunctions %(MaskTrait, EnableForMask)";
				+ "class template %GBlender";
				/ "merged function templates with overloaded for %RGBA<5, 5, \
					5, 1> %(Blend, BlendAlpha, Composite)" ^ "%%GBlend";
				+ $comp "support for specialized operation based on traits \
					extending RGBA5551" $dep_from
					("%XYZAMaskTrait" @ %AdaptorYAdaptor)
			)
		),
		/ @ "namesapce %A1" @ %NPL.NPLA1 $=
		(
			(
			+ 'using YSLib::AccessChildPtr';
			+ "function template %InvokePasses"
			),
			+ "functions %(AccessGuardPassesRef, AccessLeafPassesRef, \
				AccessListPassesRef, EvaluateGuard, EvaluateLeafPasses, \
				EvaluateListPasses, LiftFirst; (Reduce; ReduceArguments), \
				SetupTraceDepth)"
		),
		- $revert(b669) "function %RetryClose" @ %YCLib.FileIO,
			// See $2016-04 @ %Documentation::Workflow::Annual2016. Note \
				calling 'std::fclose' instead of '::close' is almost always \
				wrong.
		* $comp "failed to build" @ "platform %Android" $since b684 $dep_from
			%YBase.YStandardEx.Operators
	),
	- $re_ex(b682) $build "removing directory contents beyond '*.d', '*.o' \
		and output library file" @ "target %clean"
		@ "makefiles" @ "platforms %(DS, Android)" @ %(YBase, YFramework),
		// Now '*.log' from Microsoft Visual Studio would not be cleaned.
	/ DLDI "replaced inclusion of <ystdex/cast.hpp>" $effective @ ("non-header \
		files" @ %YFramework) $dep_from %YBase.YStandardEx.Cast $=
	(
		- "redundant inclusion of <ystdex/cast.hpp>" $effective
			@ %(Helper.(HostedUI, HostRenderer), NPL.NPLA1, YSLib.Adaptor.YNew),
		/ $forced "inclusion of <ystdex/cast.hpp>"
			-> '#include <ystdex/addressof.hpp>' $effective @ %YCLib.XCB
	)
),

b684
(
	/ %YBase.YStandardEx $=
	(
		// Metafunctions 'vfold*' are not used in the library, and were not \
			consistent on aspect of '_t' with 'vdefer*'. They were also not \
			so useful unless all other 'vseq' operations were provided with \
			'v*' operations in same way.
		/ %Tuple $=
		(
			(
			/ "metafunction %vdefer" @ "namespace %ystdex"
				>> "namespace %ystdex::vseq";
				// To allow internal use.
			+ $forced 'using vseq::vdefer;' @ "namespace %ystdex"
			),
			- $revert(b671) "metafunction %vfold" @ %Tuple,
			/ @ "namespace %vseq" $=
			(
				(
				/ "specialization of %defer for %std::tuple specializations"
					-> ("specializations for types with same kind as \
					%std::tuple" @ %Variadic);
				/ "metafunctions %(_a, _q)" >> %Variadic
				),
				- "specialization of %(clear, front, pop_front, push_back, \
					push_front, fmap, fold) for %std::tuple" $dep_from
					("%(clear, front, pop_front, push_back, push_front, fmap, \
					fold)" @ %Variadic)
			)
		),
		/ %IntegerSequence $=
		(
			(
			/ "metafunction %vdefer_i" @ "namespace %ystdex"
				>> "namespace %ystdex::vseq";
			+ $forced 'using vseq::vdefer_i;' @ "namespace %ystdex"
			),
			- $revert(b671) "metafunctions %(vfold, vfold_s, vfold_i)",
			/ "specialization of %defer for %integer_sequence specializations"
				-> ("specializations for types with same kind as \
				%integer_sequence" @ %Variadic);
			+ "specialization of %ctor_of for %integer_sequence" $dep_from
				("%ctor_of" @ %Variadic),
			+ "specialization of %project for types and sequence as default \
				implementation" ^ "%index_sequence",
			+ "specialization of %params_of for %integer_sequence" $dep_from
				("%params_of" @ %Variadic);
			- "specialization of %(clear, concat, fmap, front, pop_back, \
				pop_front, push_back, push_front, seq_size, project, fold) \
				for %integer_sequence" $dep_from ("%(clear, concat, fmap, \
				front, pop_back, pop_front, push_back, push_front, seq_size, \
				fold)" @ %Variadic),
		),
		/ %Variadic $=
		(
			(
			+ "metafunctions %(ctor_of; ctor_of_t) and specialization for \
				types with same kind as %std::tuple";
			+ "specialization of %ctor_of for types with same kind as \
				%std::tuple" $dep_from ("%_a" @ %Tuple)
			),
			(
			(
			+ "metafunctions %(params_of; params_of_t) and specialization for \
				types with same kind as %std::tuple";
			+ "specialization of %params_of for types with same kind as \
				%std::tuple",
			+ "metafunction %defer_apply_t; instance_apply_t; is_instance";
			+ "metafunction %same_instance";
			+ "metafunction %enable_for_instances" ^ $dep_from
				("%enable_when" @ %TypeTraits)
			),
			+ "enabler with partial order support" @ "metafunctions allowing \
				user spefifying specifications" $=
			(
				/ DLDI "split declarations of metafunction %split for default \
					template arguments";
					// To avoid template argument redefinition.
				/ DLDI "template parameter" @ "macros" $=
				(
					+ "template parameter 'typename = void'"
						@ "end of template parameter list",
					+ "primary template forwarding default argument to \
						'when<true>'"
				);			
				/ $forced DLDI "simplified %(defer, defer_i)",
				/ $forced $impl "primary templates as default implementation \
					%(at, back, clear, split_n, pop_back, erase, find, \
					deduplicate, join_n, reverse, unique)"
					-> "template specialization with argument 'when<true>'"
					$dep_to "%split_t"
			);
			+ "support matching for general kinds" @ "default implementation"
				@ "metafunctions %(concat, fmap, front, pop_front, push_back, \
				push_front, clear, seq_size)" ^ $dep_from
				("%(enable_for_instances, instance_apply_t, defer_apply_t, \
				params_of_t, ctor_of_t)") $dep_to "%front_t",
				// Note %std::tuple has more specialized implentation. So no \
					other deletion like %clear will be made.
			+ "default implementation with matching for general kinds"
				@ "metafunctions %(fold, vec_add, vec_subtract)" ^ $dep_from
				("%(enable_for_instances, seq_size_t, front_t, split_n_t)")
				$dep_to "%fold_t"
			)
		),
		/ $re_ex(b649) DLDI "simplified unary type trait %is_string_class"
			@ %String ^ "%enable_if_t" ~ "%enable_when",
		/ %TypeTraits $=
		(
			+ "class template declaration %when";
			* "class template %enable_when behaved same as %void_t" $since b648
				// This is now like %when, but without need to specialize for \
					'when<false>'.
				$= (/ $impl ^ "%when")
		),
		(
		/ %Operators $=
		(
			/ DLDI "flattened bases" @ "operators templates" ^ ($dep_from
				("%vseq::(defer_apply_t, _a, fold_t)" $dep_from %Variadic),
				"%empty_base"),
			(
			+ $re_add(b682) "alias %no_constfn" @ "namespace %dep_ops",
			/ @ "operator templates except for all 4 explictly implemented \
				operator templates %(incrementable, decrementable, \
				dereferenceable, indexable)" $=
			(
				+ "'template<yimpl(typename = void)>'";
					// This is not only to implement deduction of 'yconstfn', \
						but also for ability of being overriden in derived \
						classes.
				+ "selective 'yconstfn' detection"
			);
			* $comp "ill-formed 'yconstfn' when underlying operations not \
				implemented as constant expressions" $since b439
			),
			+ DLDI 'YB_ATTR(always_inline)' @ "specialized friends"
				@ "binary operator templates"
		);
		/ $comp "ill-formed static assertions even if the related '==' \
			operations are constexpr functions" @ "class template %nptr"
			@ %Pointer $orig (@ %Utilities $since b595)
		)
	)
),

b683
(
	/ %YBase.YStandardEx $=
	(
		(
		+ %TypeInfo $=
		(
			+ "class %type_id_info",
			+ "alias %type_info depending on macro %YB_Use_LightweightTypeID"
				// G++ frontend has fixed the name field of %std::type_info, \
					which is not easy to modify.
		);
		/ "all 'std::type_info'" @ "namespace %any_ops, classes \
			%(bad_any_cast, any)" @ %Any -> 'type_info'
			// To support lightweight type information. Even if the standard \
				RTTI is desired in other cases (e.g. 'dynamic_cast'), for %any \
				it is generally bad to introduce too many %std::type_info \
				symbols for base classes in 'typeid' expressions produced \
				indirectly.
		),
		/ "metafunction %vseq::_a" @ %Variadic $=
		(
			>> %Tuple;
			* "ill-formed to accept alias templates as parameter" ^ "%vdefer"
				~ "%identity" $since b671
				// See http://wg21.cmeerw.net/lwg/issue1430.
		),
		* "unary type trait %has_mem_is_transparent implemented as alias \
			template rather than class template" @ %Functor
			$orig @ "%has_member_is_transparent" $since b679,
		+ "unary type traits %(has_mem_apply, has_mem_type)" @ %TypeOperations,
		(
		+ "metafunction %fmap" @ %Variadic;
		+ "specialization of %vseq::fmap for %std::tuple" @ %Tuple,
		+ "specialization of %vseq::fmap for %integer_sequence"
			@ %IntegerSequence
		),
		+ "unary type trait %is_decomposable" @ %TypeTraits
	),
	/ %YFramework $=
	(
		+ 'using ystdex::type_info' @ "namespace %YSLib"
			@ %YSLib.Adaptor.YAdaptor $dep_from ("%ystdex::type_info"
			@ %YBase.YStandardEx.Any);
		/ $forced "type information" @ 'YB_Use_LightweightTypeID' $dep_from
			%YBase.YStandardEx.Any $=
		(
			/ "all return type 'const std::type_info&'" -> 'const type_info&'
				@ %YSLib.Core.YObject,
			/ "all typeid-expressions" -> "%ystdex::type_id calls"
				@ %(YSLib.Core.YObject, NPL.NPLA)
		)
	),
	/ %Tools $=
	(
		+ "option '-DYB_Use_LightweightTypeID=1' for generated platform %DS \
			.cbp files" @ %ProjectGenerator.Main,
		+ "option '-DYB_Use_LightweightTypeID=1'" @ "%Toolchain.DS.mk"
			@ "%C_CXXFLAGS_COMMON" @ %Scripts
			// This would reduce the binary size over 5%.
	),
	/ $build @ %YReader $=
	(
		/ @ "platform %DS" $=
		(
			- $re_ex(b682) "removing '.map' file" @ "target %clean"
				@ "ARM9 makefile",
			- $re_add(b682) ('-Wl,-Map,$(notdir $*.map)' @ "%LDFLAGS",
				"removing '.map' file" @ "target %clean") @ "ARM7 makefile"
		),
		- $re_add(b682) ('-Wl,-Map,$(notdir $*.map)' @ "%LDFLAGS", "removing \
			'.map' file" @ "target %clean") @ "makefile" @ "platform %Android"
	)
),

b682
(
	/ %YBase.YStandardEx $=
	(
		/ %Operators $=
		(
			/ DLDI "simplified" ^ "sequenced bases",
			* "specialization with same parameter type for %partially_ordered \
				wrongly as same as %less_than_comparable" $since b581,
			/ $re_add(b586) "namespace %dependent_operators"
				@ "namespace %ystdex" $=
			(
				/ "%equivalent only depended on '<'" !^ "dependency on '>'",
					// This makes the code more consistent, also same to \
						equivalent key definition in [associative.reqmts].
				/ $re_add(b586) => "%dep_ops",
					// To reduce length of symbols.
				/ "operator class templates with bases" -> "alias templates"
					// This would reduce binary size after flattened the class \
						hierechy.
			),
		),
		/ %Utilities $=
		(
			/ "namespace %dependent_swap" @ "namespace %ystdex" => "%dep_swap",
				// To be consistent with %Operators even this namespace does \
					not bloat binary size in release configurations.
			* $doc "bad URL" @ "Doxygen comment" @ "function template %exchange"
				$sicne b677
		)
	),
	+ $build '-fvisibility=hidden' @ "variable %C_CXXFLAGS_COMMON"
		@ "%Toolchain.DS.mk" @ %Tools.Scripts,
		// To reduce size of binary images as possible, though actually has \
			little effect on %DS. Note this cannot be used on %Android \
			otherwise the library file loading would fail.
	- $build '-Wl,-Map,$(notdir $*.map)' @ "%LDFLAGS" @ "ARM9 makefile"
		@ "platform %DS" @ %YReader
		// Map file is useful for test but not normal build.
),

b681
(
	/ %YFramework.YSLib.Core.ValueNode $=
	(
		/ @ "class %ValueNode" $=
		(
			(
			/ $re_ex(b680) "forwarding function template %try_emplace"
				-> "2 function templates with generic key support";
			/ $comp "enabled ADL hinted emplacement for %try_emplace" $dep_from
				("%ystdex::try_emplace" @ %YBase.YStandardEx.Container),
			(
			/ "function template %EmplaceForTypedValue" -> "%Place"
				^ "%try_emplace";
			- "function templates %(EmplaceForTypedValueTo, \
				EmplaceTypedValueTo)"
			)
			),
			/ @ "friend function %set_value_move" $=
			(
				/ DLDI "simplified" ^ "macro %(PDefH, ImplRet)",
				* "wrong parameter type caused not effective for %mapped_set"
					$since b673
			),
			+ "3 constructor templates with tuples for in place construction",
			+ "2 function templates %insert_or_assign" ^ $dep_from
				"%ystdex::(insert_or_assign, insert_or_assign_hint)"
				@ %Container
		)
	),
	/ %YBase.YStandardEx $=
	(
		- $revert(b680) "all 4 function templates %try_emplace"
			@ "class template %mapped_set" @ %Set $dep_from
			("%ValueNode::try_emplace" @ %YFramework.YSLib.Core.ValueNode)
			// See $2016-03 @ %Documentation::Workflow::Annual2016.
		/ %Container $=
		(
			+ "metafunction %is_piecewise_mapped; 2 function templates \
				%emplace_hint_in_place";
			* "pair value type not piecewise constructed" @ "function \
				templates %(try_emplace, try_emplace_hint)" $since b680
				^ "ADL %emplace_hint_in_place"
			+ "function templates %(insert_or_assign, insert_or_assign_hint)"
		),
		/ $lib "base classes" @ ("class template %optional" @ %Optional,
			"class template %transformed_iterator" @ %Iterator)
			^ "%totally_ordered" ~ "%totally_ordered2",
		/ %Operators $=
		(
			- "'1/2' postfix" @ "operator bases" $dep_from %(Optional, Iterator)
				$=
			(
				// Boost.Operators mainly uses them for compilers without \
					template partial specialization. This is not needed here.
				- "class template %operators2",
				- "class template specialization %operator for same operand type",
				/ "class template %operator"
					^ !"operator templates with postfix '1' or '2'";
				- "operator templates with postfix '1' or '2'";
				- $comp '2' @ "all names with '*_left' templates"
			),
			(
			* $forced "wrong parameter number" @ "%output_iteratable" $since
				b595;
				// This was hidden by the fact the parameter was not used by \
					implementation. However, call site in %iterator_operators \
					did provide the argument.
			/ $dev $impl "simplified" !^ "base chaining";
				// This would have side effects on object size and layout when \
					using implementations without proper EBO.
			- "metafunction %dependent_operators::is_chained_base"
			),
			/ "operator templates" @ "namespace %dependent_operators" $=
			(
				/ DLDI @ "binary operator templates" $=
				(
					/ "extracted 'yconstfn' support";
					/ "split friend functions in seperated templates"
				),
				+ "alias %use_constfn";
				+ "optional template parameter support"
					@ "all operator templates"
			)
		)
	);
),

b680
(
	/ %YBase.YStandardEx $=
	(
		/ %Conatainer $=
		(
			/ "all 2 function templates %concat" ^ "ADL %end" ~ "member %end",
			(
			+ "2 function templates %cast_mutable";
			(
			+ "2 function templates %search_map with hint iterator parameter";
			+ "function templates %(try_emplace, try_emplace_hint)"
			)
			/ DLDI "simplified non-const overloading" @ "template %search_map \
				with container and key parameter" ^ "%cast_mutable"
			),
			+ "function template %erase_first",
			+ "2 function templates %erase_multi",
			/ "all 2 function templates %search_map with callback" $=
			(
				/ "return type" -> "pair" ~ "iterator",
				/ DLDI "simplified non-const overloading" ^ $dep_from
					"%cast_mutable"
			)
		),
		/ %Any $=
		(
			/ @ "namespace %any_ops" $=
			(
				/ "%holder_tag" => "%use_holder_t";
				+ "yconstexpr object %use_holder"
			);
			/ $forced "constructors" @ "class %any"
		),
		/ %Iterator $=
		(
			/ "struct %indirect_tag" => "%get_indirect_t",
			/ "struct %get_tag" => "%get_get_t";
			/ $forced "2 function template %operator| with 'indirect', 'get' \
				tag"
		),
		/ %Functor $=
		(
			(
			/ "metafunction %has_member_is_transparent"
				-> "%has_mem_is_transparent"
				$= (+ "support for dummy SFINAE parameter");
			* "dummy SFINAE type not dependent"
				@ "metafunction %enable_if_transparent_t" $since b679
			),
			* "missing 'using std::less;'" @ "inline namespace %cpp2014"
				@ '__cpp_lib_transparent_operators >= 201210 \
				|| __cplusplus >= 201402L' $since b679
		),
		/ %Set $=
		(
			/ @ "class template %mapped_set" $=
			(
				* $comp "ill-formed generic associative lookup for failed \
					%is_transparent merber type detection" $since b679
					$dep_from ("%enable_if_transparent_t" @ %Functor),
				* $comp "ill-formed default comparator"
					@ '__cpp_lib_transparent_operators >= 201210 \
					|| __cplusplus >= 201402L' @ $since b679 $dep_from
					("%less" @ %Functor),
				+ "4 function templates %try_emplace" ^ $dep_from
					("%ystdex::(try_emplace, try_emplace_hint)" @ %Container)
			),
			* $comp "ill-formed default comparator"
				@ "functions %(min, max, minmax, clamp, clamp_range)"
				@ '__cpp_lib_transparent_operators >= 201210 \
				|| __cplusplus >= 201402L' @ %Algorithm $since b679 $dep_from
				("%less" @ %Functor),
			* $dev "generic associative lookup failed to work"
				@ '_GLIBCXX_DEBUG' $since b679
				// Only works for libstdc++ reversion after 2015-06-07. Note \
				%(try_emplace, insert_or_assign) would work since revision \
				2015-08-27.
				$= (+ "workaround for libstdc++"),
			/ DLDI "simplified generic associative comparator"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %ValueNode $=
				(
					/ @ "class %ValueNode" $=
					(
						/ "function %operator[]"
							-> "function template %operator[] for generic key"
							^ $dep_from ("%ystdex::try_emplace"
							@ %YBase.YStandardEx.Container),
						* "missing hint iterator parameter" @ "2 function \
							templates try_emplace#(1, 3)" $since b678,
						* "wrong key parameter type" @ "function template \
							%try_empalce#2" $since b678,
						/ @ "%try_emplace" $=
						(
							/ "all 4 function templates" -> "forwarding \
								template" ^ ("%DefFwdTmpl", $dep_from
								("ystdex::mapped_set::try_emplace")
								@ %YBase.YStandardEx.Set);
							* $comp "wrong behavior of unnecessary \
								initialization of value type" $since b678,
							* "not specifying container" $since b678
								// To be consistent to WG21 N4279.
						),
						/ $impl "function template %EmplaceTypedValueTo \
							without hint" ^ "%EmplaceValueTo",
						- "function template %EmplaceTypedValueTo with hint",
						/ "function %Remove with name parameter" -> "function \
							template" ^ $dep_from ("ystdex::erase_first"
							@ %YBase.YStandardEx.Container) $dep_to "removal \
							explicit node conversion in ValueNode definition",
						/ DLDI "non-inline function %Remove with \
							'const ValueNode&' parameter" -> "inline function",
						(
						(
						/ "function templates %(SplitChildren, \
							EmplaceTypedValueTo)" ^ "%NoContainer"
							~ "%EmplaceValueTo";
						* "ill-formed %SplitChildren" $since b674
						);
						- "static function template %EmplaceValueTo" $dep_from
							%NPL.NPLA1
						),
						- "static function template %EmplaceValueWithHintTo"
							$dep_from "%try_emplace"
					),
					/ $revert(b678) $dev "simplified declarations" $dep_from
						"removal explicit node conversion in ValueNode \
						definition" $=
					(
						- "class name declaration %ValueNode",
						- "non-definition declaration %AsNode"
					)
				),
				/ $forced DLDI "class %ValueObject" @ %YObject $dep_from
					%YBase.YStandardEx.Any
			),
			/ $forced DLDI "function %GetEvent" @ %UI.YWidgetEvent $dep_from
				("%search_map" @ %YBase.YStandardEx.Container)
		),
		(
		/ $dev "hid '<dirent.h>'" @ "header" @ %YCLib.FileSystem $=
		(
			/ @ "class %DirectorySession" $=
			(
				/ "alias %Data" @ !"platform %Win32" ^ 'void' ~ '::DIR';
				/ $forced DLDI "member functions"
			),
			- '#include <dirent.h>'
		);
		* $comp $doc "%YFramework header dependency" $since b553
		),
		/ DLDI "function %TransformToSyntaxNode" @ %NPL.NPLA1 ^ "%NoContainer"
			~ "%ValueNode::EmplaceValueTo"
	)
),

b679
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			+ "metafunction %enable_if_inconvertible_t" @ %TypeTraits,
			/ DLD "simplified constructor template with iterator template \
				parameter type" @ "class template %transformed_iterator"
				@ %Iterator $=
			(
				- "redundant template parameter",
				/ $impl ^ $dep_from
					("%enable_if_inconvertible_t" @ %TypeTraits)
			),
			+ "non %value_type parameter support"
				@ "function template %search_map" @ %Container
				$= (/ "function template" -> "2 overloaded function templates")
					^ $dep_from ("%enable_if_inconvertible_t" @ %TypeTraits)),
			/ %Set $=
			(
				/ DLDI "flattened nested types",
					// To shorten mangled name and reuse generic key types.
				/ DLI "comparator initialization" ^ "move" ~ "copy",
				(
				* "function templates %(2 lower_bound, 2 upper_bound, 2 \
					equal_range)" $since b678;
				/ "function templates %(count, 2 find) support without generic \
					associative lookup" ^ "function template %equal_range"
				),
				+ "support generic associative lookup" @ "function templates \
					%(2 lower_bound, 2 upper_bound, 2 equal_range, count, 2 \
					find)" @ '__cpp_lib_generic_associative_lookup >= 201304 \
					|| __cplusplus >= 201402L',
					// See WG21 P0096R1.
				/ "limited all 9 generic associative lookup function templates \
					only for comparator with member type %is_transparent"
					^ $dep_from ("%enable_if_transparent_t" @ %Functor)
					// As WG21 N3657.
			),
			/ DLDI '201402' -> '201402L' @ "condition test for %__cplusplus"
				@ %IteratorOperation,
			/ %Functor $=
			(
				(
				* "wrong spelling for %divides" $orig
					(@ %Functional $since b578)
					$= (/ "%devides" => "%divides");
				/ "functors %(plus, minus, multiplies, divides, modulus, \
					negate, equal_to, not_equal_to, greater, greater_equal, \
					less_equal, logical_and, logical_or, logical_not, bit_and, \
					bit_xor, bit_not") $=
				(
					>> "inline namespace %cpp2014"
						@ !'__cpp_lib_transparent_operators >= 201210 \
						|| __cplusplus >= 201402L';
					+ "using functors from namespace %std"
						@ '__cpp_lib_transparent_operators >= 201210 \
						|| __cplusplus >= 201402L' $dep_from
						("%__cpp_lib_transparent_operators" @ %Ref)
				)
				),
				+ "unary type trait %has_member_is_transparent; metafunction \
					%enable_if_transparent"
			)
		),
		/ $dev $re_add(b628) "updated feature-testing macros" $=
		(
			/ $doc "updated Doxygen comments" @ %YDefinition,
			(
			+ "2 feature-test macros %(__cpp_lib_bool_constant, \
				__cpp_lib_void_t recommended) by WG21 P0096R1 when not defined"
				@ 'YB_IMPL_MSCPP >= 1900' @ %YDefinition;
			/ %YStandardEx.TypeTraits $=
			(
				/ $lib "simplified inclusion condition for %(void_t, \
					bool_constant)" !^ 'YB_IMPL_MSCPP',
				/ $lib "simplified inclusion condition for %void_t"
					!^ 'YB_IMPL_MSCPP'
			)
			),
			/ %YStandardEx
			(
				(
				+ "feature-test macro %__cpp_lib_invoke by WG21 P0096R1 when \
					not defined" @ 'YB_IMPL_MSCPP >= 1900' @ %Ref;
				/ $lib "simplified inclusion condition for %invoke"
					!^ 'YB_IMPL_MSCPP' @ %Function
				),
				/ $doc "updated Doxygen comments" @ %Functor,
				+ "feature-test macro %__cpp_lib_transparent_operators by WG21 \
					P0096R1 when not defined" @ 'YB_IMPL_MSCPP >= 1800' @ %Ref
			)
		)
	),
	/ %YFramework.YSLib.Core $=
	(
		/ @ "class %ValueNode" @ %ValueNode $=
		(
			(
			* "missing friend functions %operator(>, ==) between \
				'const ValueNode&' and 'const string&'" $since b678;
			/ DLI "simplified (function %operator[], function template \
				%EmplaceTypedValueTo)" !^ "%AsNode" $dep_from
				(("%ystdex::search_map" @ %Container,
				"%mapped_set::lower_bound" @ %Set) @ %YBase.YStandardEx)
				// Temporary %ValueNode avoided.
			),
			/ DLI "simplified function templates %SplitChildren" !^ "%AsNode"
				$dep_from ("%mapped_set::find" @ %YBase.YStandardEx.Set)
				// Ditto.
			/ DLI "simplified function templates %AddValueTo" !^ "%AsNode"
				$dep_from ("%mapped_set::equal_range" @ %YBase.YStandardEx.Set)
				// Ditto.
			/ DLI "simplified function %Remove with node" !^ "%AsNode"
				// Ditto, but this was purely redundant even without generic \
					associative lookup support.
		),
		/ DLI "simplified all 2 functions %AccessNodePtr with name parameter"
			!^ "%AsNode" $dep_from
			("%mapped_set::find" @ %YBase.YStandardEx.Set)
			// Ditto.
	),
	* $dev $doc "wrong macro lists between %YBase.YStandardEx.(Memory, Functor)"
		@ %Documentation.Definitions $since b649
),

b678
(
	/ %YBase.YStandardEx $=
	(
		* "%search_map with functor parameter" @ %Container $since b566,
		/ %Any $=
		(
			/ @ "class %any" $=
			(
				* "missing decaying for non rvalue reference type"
					@ "constructor template with holder parameter" $since b677,
					// Tested on saving for %release configuration in all \
						platforms.
				+ "constructor with holder tag and in-place initialization \
					parameters"
			),
			/ @ "namespace %any_ops" $=
			(
				/ "reduced redandant holder construction"
					@ "class template %holder_handler",
					$= (/ "(function, function template %init) other than with \
						%unique_ptr instance parameter" -> 'using base::init;')
				/ "supported reference wrappers" @ ^ "%is_reference_wrapper"
					~ "%lref"
			)
		),
		* $re_ex(b665) "constructor template with other iterator and optional \
			transformer parameter selected explicit cast before conversion to \
			other instance of %tranformed_iterator" @ "class template \
			%transformed_iterator" @ %Iterator $since b665
			$= (/ "constructor template" -> "2 constructor templates"
				^ "%enable_if_t" ~ "default argument"),
		/ @ "class template %mapped_set" @ %Set $=
		(
			+ "non %key_type key support"
				$= (+ "function templates %(find, 2 lower_bound, 2 \
					upper_bound, 2 equal_range) with key template parameter"),
				// As %count. See also WG21 N3567 adopted in C++14.
			* $comp "failed explicit cast from %iterator to %const_iterator"
				$since b665 $dep_from ("%transformed_iterator" @ %Iterator)
				$dep_to "mapped_set iterator cast"
		)
	),
	/ %YFramework.YSLib $=
	(
		/ %Core $=
		(
			/ %ValueNode $=
			(
				(
				+ DLD "class name declaration %ValueNode";
				+ "inline function %AsNode for 'const ValueNode&' parameter",
				+ "function template declaration %AsNode" $dep_to "simple node \
					creation"
					// Defined later with previously .
				);
				/ @ "class %ValueNode" $=
				(
					* $comp "invalid access when the value not existed"
						@ "%operator[]" $since b667 $dep_from
						%YBase.YStandardEx.Container,
					/ DLD "2nd parameter type function template \
						%EmplaceValueWithHintTo" -> "%const_iterator"
						~ "%ContainerType::const_iterator"
					(
					(
					+ "static function templates %(2 EmplaceTypedValueTo; \
						EmplaceForTypedValueTo)";
					+ "function template %EmplaceForTypedValue" $dep_from
						"mapped_set iterator cast"
					),
					/ "function template %AddValueTo" ^ 'YSLib::AsNode',
					/ "function %Remove, function template %SplitChildren"
						^ 'AsNode'
					) $dep_from "simple node creation",
					(
					+ 'using key_type = typename Container::key_type;';
					+ "4 function templates %try_emplace"
					),
					/ "alias %Container" ^ "comparator %ystdex::less"
						~ "default comparator",
					+ "%operaotr< for 'const ValueNode&' and 'const string&'",
					- "%operator const string&",
					+ "private base class %ystdex::totally_ordered<ValueNode>",
					+ "private base class %ystdex::totally_ordered<ValueNode, \
						string>"
				)
			)
			/ %YObject $=
			(
				+ "alias template %InPlaceTag";
				/ @ "class %ValueObject" ^ "%InPlaceTag" $=
				(
					+ "constructor template with %InPlaceTag instance \
						parameter",
					/ "reduced redendant holder construction"
						@ "constructor templates"
				)
			)
		),
		/ DLDI "simplified function %GetEvent" @ %UI.YWidgetEvent
			^ $dep_from ("%ystdex::search_map with functor parameter"
			@ %YBase.YStandardEx.Container)
	),
	* $comp "crash when accessing empty configuration nodes" @ %YReader $since
		b667 $dep_from %YFramework.YSLib.Core.ValueNode,
		// The error was "BOM mismatch" for a fresh install.
	/ "access-specifier" @ "non member operators basees" ^ "explicit 'private'"
		$effective @ (("class template %path" @ %Path, "class template \
		%observer_ptr" @ %Memory, ("class template %transformed_iterator")
		@ %Iterator, "class template %optional" @ %Optional, "class template \
		%nptr" @ %Pointer, "class template %basic_string_view" @ %StringView,
		"class template %basic_tstring_view" @ %TStringView, "class template \
		%fixed_point" @ %Rational, %"class %ifile_iterator" @ %CStandardIO)
		@ %YBase.YStandardEx, ("class %FileDescriptor" @ %YCLib.FileIO,
		("class %Path" @ %Service.FileSystem, ("class template specialization \
		%GHEvent" @ %YEvent, ("class template %GBinaryGroup",
		"classes %(Size, Rect)") @ %YGDIBase, "class %ValueObject" @ %YObject)
		@ %Core) @ %YSLib) @ %YFramework);
		// See $2016-03 @ %Documentation::Workflow::Annual2016.
),

b677
(
	/ %YBase.YStandardEx $=
	(
		/ %Any $=
		(
			/ @ "namespace %any_ops" $=
			(
				+ "empty class template %in_place_t",
				/ @ "class template %value_holder" $=
				(
					/ "protected data member %held"
						-> "protected base %boxed_value instance" $dep_from
						("%boxed_value" @ %Utilities);
					/ DLDI "member functions %(clone, get)",
					/ "2 constructors" -> "explicitly defaulted default \
						construcor, inherited constructor, constructor \
						template with 1 template"
				)
			),
			/ @ "class %any" $=
			(
				+ "member function templates %(emplace_with_handler; 2 \
					emplace)",
				+ "constructor template" ^ $dep_from "%in_place_t instance",
				/ DLDI "simplified all constructor templates",
				(
				^ DLDI "empty braced-init-list" @ "data members";
				/ DLD "explicitly defaulted default constructor"
					$= (- 'yconstfn')
					// Since it is first declared as defaulted, 'constexpr' \
						will be implictly implied. This will also meet the \
						requirements of the standard, see \
						http://wg21.cmeerw.net/lwg/issue2013.
				),
				+ "constructor template with holder rvalue reference parameter"
					$dep_to "non-pointer holder construction",
				(
				+ "functions %(unchecked_get, unchecked_get_holder, \
					unchecked_type)";
				/ DLDI "simplified functions %(get, get_holder, type)"
					^ "%(unchecked_get, unchecked_get_holder, unchecked_type)"
				)
			),
			+ "2 function templates %unchecked_any_cast" ^ $dep_from
				"%any::(unchecked_get, unchecked_type)",
			+ "function template %extract_key",
			/ @ "all function templats %search_map" @ %Container $=
			(
				/ "differentiate const and non-const map types"
					$= (/ "2 function templates" -> "4 function templates"),
				/ "%key_type for map" -> "key template parameter",
				+ "support set-like type" ^ $dep_from "%extract_key"
			),
			* "ill-formed function %value_comp" @ "class template %mapped_set"
				@ %Set $since b665
		),
		/ %Utilities $=
		(
			+ "struct %default_init_t; object %default_init",
			/ @ "class template %boxed_value" $=
			(
				+ 'mutable' @ "data member %value",
				+ "exception specification" @ "all non-defaulted constructors",
				+ "constructor with %default_init_t parameter for uninialized \
					member initialization" $dep_from "%default_init_t",
				/ "default constructor" ^ "value-initialized member"
					~ "default-initialized member"
			)
		)
	),
	/ %YFramework.YSLib.Core $=
	(
		/ %YObject $=
		(
			/ @ "class %ValueObject" $=
			(
				/ "constructors templates with holders" !^ "%unique_ptr"
					$dep_from "non-pointer holder construction",
					// To utilize small object optimization of %ystdex::any. \
						Also to reduce size of binary code (esp. in %debug \
						configurations).
				+ "2 function templates %(Emplace; EmplaceIfEmpty)" ^ $dep_from
					("%ystdex::any::emplace" @ %YBase.YStandardEx.Any),
				/ $lib $impl "all 2 function templates %GetObject" ^ $dep_from
					("%ystdex::unchecked_any_cast" @ %YBase.YStandardEx.Any)
					~ "%ystdex::unsafe_any_cast"
					// To improve performance a little.
			),
			/ @ "class template %ValueHolder" $=
			(
				/ "protected data member %held"
					-> "protected base %boxed_value instance" $dep_from
					("%ystdex::boxed_value" @ %YBase.YStandardEx.Utilities);
				/ DLDI "member functions %(clone, get, operator==)",
				/ "2 constructors" -> "explicitly defaulted default \
					construcor, inherited constructor, constructor template \
					with 1 template"
			)
		),
		/ @ "class template specialization %GEvent" @ %YEvent $=
		(
			+ "constructor with invoker parameter",
			+ "optional invoker parameter with empty default argument"
				@ "constructor template"
		),
		/ DLDI "simplified member function %ValueNode::operator[]" ((^ $dep_from
			("%ystdex::search_map" @ %Container), $dep_from
			"%ystdex::mapped_set::value_comp" @ %Set) @ %YBase.YStandardEx)
	);
),

b676
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %ScopeGuard $=
			(
				+ "function template %ystdex::make_shared_guard",
				* "wrong '\sa' command" @ "Doxygen comments" @ "class %guard"
					$since b627
			),
			/ %Any $=
			(
				/ $lib @ "class %bad_any_cast" $=
				(
					/ "in-class defined member functions %(from, to, what)"
						-> ("out-of-line defined functions"
						@ "non-header file"),
					+ ('YB_ATTR_returns_nonnull' $dep_from %YBase.YDefinition)
						@ "functions %(from, to)"
				),
				/ @ "class %any" $=
				(
					/ DLDI "copy constructor" !^ "conversion to %bool";
					- "member functions %operator(!, bool)" $dep_from \
						("%any_input_iterator::equals" @ %AnyIterator)
						// Use %any::empty instead, since it is more like a \
							container.
				)
			),
			/ "%void_t" ^ "%std::void_t" @ 'YB_IMPL_MSCPP >= 1900'
				@ %TypeTraits,
			/ %AnyIterator $=
			(
				/ @ "class template %any_input_iterator" $=
				(
					/ DLDI "member function %any_input_iterator::equals"
						-> "friend function %operator==" ^ $dep_from
						("%any::empty" @ %Any) ~ "%any conversion to bool",
					/ "base class %std::iterator instance" -> "member types \
						%(iterator_category, value_type, difference_type)"
				),
				/ @ "class templates %(any_input_iterator, \
					any_forward_iterator, any_bidirectional_iterator)" $=
				(
					(
					+ "instance %(input_iteratable, forward_iteratable, \
						bidirectional_iteratable) as base class"
					+ "friend function %operator==";
					- "non-friend related comparison function templates, \
						member postfix functions %operator(++, --)"
					),
					/ "function %check_undereferenceable, related non-member \
						function %is_undereferenceable"
						-> "friend function %is_undereferenceable"
					- $revert(b454) "workaround for Microsoft VC++ 2013"
						@ ("move %operator=", "move constructor")
				)
			),
			/ @ "class %ifile_iterator" @ %CStandardIO $=
			(
				/ "base class %iterator_operators_t instance"
					-> "%input_iteratable instance",
				/ "base class %std::iterator instance" -> "member types \
					%(iterator_category, value_type, difference_type, \
					pointer_type, referece_type)",
				/ "related non-member function %is_undereferenceable"
					-> "friend function"
			),
			/ "base class %iterator_operators_t instance"
				@ "class template %subscriptive_iterator" @ %Iterator
				-> "%random_access_iteratable instance",
			/ @ "class template %bitseg_iterator" @ %BitSegment $=
			(
				/ "base class %iterator_operators_t instance"
					-> "%random_access_iteratable instance",
				/ "base class %std::iterator instance"
					-> "member types %(iterator_category, value_type)"
			)
		),
		/ %YDefinition $=
		(
			* "%__has_attribute test wrongly tested %__noreturn__ for \
				%__flatten__ attribute" $since b646,
			+ "macro %YB_ATTR_returns_nonnull"
		)
	),
	/ %YFramework $=
	(
		/ @ "generated guard" @ "static member function \
			%WindowThread::DefaultGenerateGuard" @ %Helper.HostRenderer $=
		(
			+ DLDI 'ynothrow' @ "guard handler",
			^ $dep_from
				("%ystdex::make_shared_guard" @ %YBase.YStandardEx.ScopeGuard)
		),
		/ %NPL.NPLA1 $=
		(
			+ "struct %PassesCombiner; alias template %GPasses; aliases \
				%(TermPasses, EvaluationPasses)",
			+ "aliases %(Guard; GuardPasses)",
			+ "functions %(DetectReducible, LiftTerm)",
		),
		/ "missing handling reading failure" @ "all functions %VerifyEncoding"
			@ %YSLib.Service.TextFile $since b614
			$= ("returned %CharSet::Null before further check if reading calls \
				failed")
	),
	/ %Tools $=
	(
		* "missing updating %LIBS for %YFramework.YCLib.YCommon"
			@ "%SHBuild-bootstrap.sh" @ %Scripts $since b633,
		* "silently exited when 'pkg-config' detection for package %freetype2 \
			failed" @ "%install-sysroot.sh" $since b563
	),
	/ $dev DLDI "'YB_ATTR(returns_nonnull)'" -> $dep_from
		("%YB_ATTR_returns_nonnull" @ %YBase.YDefinition) $effective
		%(YBase.YStandardEx.Any, YFramework.(CHRLib.MappingEx, YCLib.(HostedGUI,
		FileSystem), 'YCLib_(Win32)'.MinGW32, 'YCLib_(DS)'.DSVideo,
		Helper.ShellHelper));
		// Also to eliminate warning for unsupported implementations: \
			[-Wignored-attributes].
),

b675
(
	/ %YBase.YStandardEx $=
	(
		/ $revert_ex(b527) "forbid ADL comparison overloadings unconditionally"
			@ %Operators,
			// It seems that Clang++ 3.7 does not support it as well. There \
				was one additional usage note, see $2016-02 \
				@ %Documentation::Workflow::Annual2016.
		/ @ "class template %observer_ptr" @ %Memory $=
		(
			^ "passed by value" @ "comparison" ~ "passed by reference",
			* "missing exception specification" $since b669,
			* $doc "%std::hash specialization for %ystdex::observer_ptr" $since
				b669
		),
		* $re_ex(b668)
			"static member function template %always_equal::are_equal"
			@ %Examiner $since b668 ^ "%has_equality_operator",
			// To avoid ambiguity for Clang++ 3.7. Not now it requires \
				complete types as arguments.
		* $impl "missing 'std::' before 'strlen'" @ "function %strcatdup"
			@ %CString $orig (@ %YCLib.YCommon $since $before b132),
		/ "updated reference to library fundamental TS final draft(WG21 N4480)"
			~ "WG21 N4081" $=
			// See $2016-03 @ %Documentation::Workflow::Annual2016.
		(
			/ $doc "updated Doxygen comments" @ %Any,
			/ %Optional $=
			(
				+ '&&' @ "return type" @ "2 member functions %(operator*, \
					value)" @ "class template %optional"
				/ $doc "updated Doxygen comments"
			),
			/ %StringView $=
			(
				- "member function %clear"
					@ "class template %basic_string_view",
				/ $doc "updated Doxygen comments"
			)
		),
		+ "class template %default_last_value and its specialization for %void"
			@ %Functional,
		/ %Optional $=
		(
			+ "class template %optional_last_value and its specialization for \
				%void" ^ $dep_from ("%default_last_value<void>" @ %Functional),
			* "missing return-statement" @ "(functions, function templates) \
				%operator=" @ "class template %optional" $since b591,
			* "missing 'YB_API'" @ "class %bad_optional_access" $since b590
		),
		/ %Functional $=
		(
			/ @ "metafunctions %(make_parameter_tuple, return_of)" $=
			(
				/ DLDI "simplified" ^ "macros",
				(
				/ "specialization for lvalue references to functions"
					-> "2 specializations for lvalue and rvalue types";
				* $comp "missing specializations for rvalue reference types to \
					function types" $since b333,
				* $comp "missing specializations for reference types to \
					non-function types" $since b358
				)
			),
			* "missing specializations for types with variadic parameter in the \
				parameter list" @ "metafunction %return_of" $since b333
		),
		- DLDI "redundant parenthese" @ "%operator()"
			@ ("functors" $effective @ "functors %(get, indirect)")
			@ "namespace %iterator_transformation" @ %Iterator,
		+ "function templates %(fast_all_of, fast_any_of, fast_none_of, \
			strict_all_of, strict_any_of, strict_none_of)" @ %Algorithm,
		/ %Reference $=
		(
			+ "unary type trait %is_reference_wrapper",
			+ "metafunctions %(unwrap_reference; unwrap_reference_t)",
			(
			- "metafunction %unwrap_reference_t" $dep_from
				"removal of wrapped_traits_t";
			- "metafunction %wrapped_traits" $dep_from %Functor
			)
		),
		+ "support for general reference wrapper as construcor parameter"
			~ "%lref instances handling" @ "class %any" @ %Any ^ $dep_from
			("%(is_reference_wrapper, unwrap_reference_t)" @ %Reference),
		/ %AnyIterator $=
		(
			/ DLDI @ "struct %any_ops::wrap_handler" $=
			(
				/ "%value_type" ^ $dep_from ("%unwrap_reference_t" @ %Reference)
					~ "%wrapped_traits_t" $dep_to "removal of wrapped_traits_t",
				/ "%type" ^ $dep_from ("%is_reference_wrapper" @ %Reference)
					~ "%wrapped_traits"
			),
			/ @ "constructor template with 1 function parameter"
				@ "class template %any_input_iterator" $=
			(
				/ DLDI "static assertion" ^ ("%unwrap_reference_t" @ %Reference)
					~ "%wrapped_traits",
				* $re_add(b376) "missing excluding of 'input_any_iterator&'"
					$since b356,
				/ $re_add(b595) "handled reference types" ^ "%decay_t"
					~ "%remove_rcv_t"
			)
		),
		/ @ "class template %thunk" $=
		(
			/ DLDI "default template argument, %value_type"
				^ ("%unwrap_reference_t" @ %Reference) ~ "%wrapped_traits_t"
				$dep_to "removal of wrapped_traits_t",
			+ "support for general reference wrapper as construcor parameter"
				~ "%std::reference_wrapper instances handling"
		),
		/ DLDI "functor %is_equal" ^ "%is_reference_wrapper"
			~ "%(wrapped_traits, not_, or_, and_)"
	),
	/ %YFramework $=
	(
		/ %NPL $=
		(
			+ 'using YSLib::ValueObject' @ %SContext,
			/ %NPLA1 $=
			(
				+ "function %FetchValue" $dep_from %Scontext
				+ "function %LookupName"
			)
		),
		/ %YSLib.Core.YEvent $=
		(
			(
			+ "struct %CountedHandlerInvoker";
			+ "support for invoker" @ "function template %GEvent" $=
			(
				+ "template parameters with default argument \
					%CountedHandlerInvoker",
				+ "alias %InvokerType";
				(
				+ "data member %Invoker",
				+ "%result_type"
				);
				/ @ "function %operator()" $=
				(
					/ "return type" -> 'result_type' ~ 'size_type';
					/ "called by forwarding to invoker"
				)
			)
			),
			(
			+ "class template %GCombinerInvoker";
			+ "alias templates %(GDefaultLastValueInvoker, \
				GOptionalLastValueInvoker)"
			)
		)
	)
),

b674
(
	/ %YBase.YStandardEx $=
	(
		/ @ "class template %mapped_set" @ %Set $=
		(
			/ "optimizated insertion and emplacement" $=
			(
				(
				^ $impl "%emplace for underlying map" ~ "pair %insert";
				/ $comp "requireed EmplaceConstructible on key and value types \
					rather than MoveInsertable on the underlying pair type"
				),
				(
				^ "%std::(piecewise_construct, forward_as_tuple)"
					~ "direct pair construction";
				/ $comp
					"requireed no MoveConstructible on %set_value_move result"
				),
				(
				/ $re_add(b673) "optimized %insert rvalue with hint"
					^ "%set_value_move";
				/ $impl "simplified %emplace_hint" ^ "%insert"
				)
			),
			* "all 2 functions %equal_range" $since b665
		),
		/ 'ynothrow' @ "all 5 function templates %polymorphic_downcast" @ %Cast
			-> 'ynothrowv'
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core.ValueNode $=
			(
				/ $re_ex(b673) DLDI "all 2 functions %AccessNodePtr"
					^ "%AsNode",
				+ "yconstexpr tag %NoContainerTag %NoContainer",
				/ @ "class %ValueNode" $=
				(
					+ "static function templates %(EmplaceValueTo, \
						EmplaceValueWithHintTo)" $dep_from "%NoContainer",
					(
					+ "static function template %AddValueTo" ^ $dep_from
						("%NoContainer", "%mapped_set::equal_range"
						@ %YBase.YStandardEx.Set);
					+ "function template %Add" $dep_from "constructor template"
					),
					(
					/ $re_ex(b673) DLDI "functions %(Remove#2, operator[]), \
						function template %SplitChildren" ^ "%AsNode";
					/ "1st parameter type 'int'" @ "constructor template"
						-> ($dep_from "%NoContainerTag") $dep_from
						("%WidgetLoader::TransformUILayout" @ %UI.Loader,
						"%AccessNodePtr");
					/ $forced DLDI @ "function %operator[]" ^ $dep_from
						"%EmplaceValueWithHintTo",
					/ $forced DLDI @ "function template %Split" ^ $dep_from
						"%EmplaceValueTo"
					),
					+ "functions %(RemoveEmptyChildren, 2 RemoveHead)"
				),
				/ $forced DLDI "function templates %(AsNode, MakeNode, \
					StringifyToNode)" $dep_from "constructor template \
					%ValueNode" ^ $dep_from "%NoContainer",
				(
				+ "yconstexpr tag %ListContainerTag %ListContainer";
				/ "1st parameter type 'int'"
					@ "constructor template %NodeLiteral" -> "%ListContainerTag"
					$dep_from ("%MakeTop" @ %NPL.NPLA);
				/ $forced DLDI @ "function template %AsNodeLiteral"
				)
			),
			/ $re_ex(b673) DLDI
				@ "member function %WidgetLoader::TransformUILayout" ^ "%AsNode"
		),
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ $re_ex(b673) DLDI "simplified function %InsertChild"
					^ "%AsNode",
				(
				+ "aliases %((ContextNode; ContextHandler), LiteralHandler)";
				+ "functions %(RegisterContextHandler, RegisterLiteralHandler)",
				+ "class %FormContextHandler"
				),
				/ $forced "type" @ ("parameters" @ "functions %(InsertChild, \
					InsertSequenceChild; TransformNode, TransformNodeSequence)")
					^ $dep_from ("%TermNode" @ %SContext) ~ "%ValueNode",
				/ DLDI @ "function templates %(LoadNode, LoadNodeSequence)"
					$dep_from %SContext $=
				(
					/ "all 'YSLib::LoggedEvent'" -> 'LoggedEvent',
					^ "%TermNode" ~ "%ValueNode"
				),
				/ DLDI "functions %(InsertChild, InsertSequenceChild)"
					^ ($dep_from "%MapToValueNode" @ %SContext)
					// To be compatible with nominal typed %TermNode.
			),
			/ %NPLA $=
			(
				/ DLDI "function template %MakeTop" ^ "%YSLib::AsNodeLiteral",
				/ DLDI "function %TransformToSyntaxNode" ^ ($dep_from
					"%ValueNode::EmplaceValueTo" @ %YSLib.Core.ValueNode),
				(
				/ "included %SContext";
				/ ("type and assertion strings" @ (("2nd parameter"
					@ "function %PrintSyntaxNode", "1st parameter"
					@ "functions %(ConvertDocumentNode, ConvertStringNode, \
					ConvertAttributeNodeString)") @ "namespace %SXML",
					"parameter type" @ "function %MapNPLALeafNode"),
					"aliases %(NodeMapper, NodeInserter, GNodeInserter)")
					^ $dep_from ("%TermNode" @ %SContext) ~ "%ValueNode",
				/ $dev $lib "simplified aliases"
				),
				/ DLDI "function %MapNPLALeafNode"
					^ ($dep_from "%MapToValueNode" @ %SContext)
					// Ditto.
			),
			/ %SContext $=
			(
				+ 'using YSLib::observer_ptr',
				+ 'using YSLib::LoggedEvnet',
				(
				+ 'using TermNode = ValueNode;';
				+ "2 functions %(MapToValueNode,MapToTermNode)",
				+ "aliases %(TNIter, TNCIter)",
				/ "all %(Reduce, Analyze)" ^ "%TermNode" ~ "%ValueNode"
				)
			),
			(
			/ $dev $lib %NPL $=
			(
				/ "included %YSLib.Adaptor.YAdaptor" ~ "module %YCLib.Platform";
				/ 'using ystdex::byte' -> 'using YSLib::byte'
			);
			/ %Lexical $=
			(
				+ "included %NPL.NPL";
				/ $dev $lib "simplified aliases"
			)
			)
		)
	)
),

b673
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %GUIState" @ %UI.YGUI $=
			(
				/ DLDI "simplified function %ResponseKey" !^ 'IWidget*',
				/ @ "function %ResponseCursor" $=
				(
					/ "set %RoutedEventArgs::Bubble only when event argument \
						handled flag not set yet" @ "function %ResoponseCursor",
					/ DLDI "simplified"
				)
			),
			/ %Core $=
			(
				/ @ "class %ValueNode" @ %ValueNode $=
				(
					/ "member functions %operator(==, <)"
						-> "friend functions %operator(==, <) with 'ynothrow'",
						// To avoid unintuitive asymmetric behavior involving \
							implicit conversions.
					(
					+ "friend function %set_value_move";
					/ $comp $lib "improved insertion and emplacement \
						performance" $dep_from
						("%ystdex::mapped_set" @ %YBase.YStandardEx.Set)
					)
				),
				/ "class %ValueObject" %YObject $=
				(
					/ "member function %operator==" $=
					(
						/ "member function" -> "friend function",
							// Ditto.
						/ "returned 'true' when parameters are empty"
							// Like %GEvent comparator. This is a breaking \
								change, but it should not change the current \
								behavior as no interface implementation has \
								been relying on it.
					),
					/ @ "all 2 function templates %GetObject" $=
					(
						/ DLDI "simplified" ^ ("%ystdex::unsafe_any_cast"
							@ %YBase.YStandardEx.Any);
						+ 'ynothrowv'
					)
				),
				/ %YEvent $=
				(
					/ "member function %operator==" @ "all 2 class template \
						specializations %GHandlerAdaptor" -> "friend function"
						// Ditto.
					/ @ "class %GHEvent specialization" $=
					(
						+ "base class" ^ "%ystdex::equality_comparable" $dep_to
							"simplified event comparison",
						* "possible null pointer access" @ "equality comparison"
							$since b516
					),
					- "redundant function templates (%operator==, all 3 \
						%operator!=) for %GHEvent specialization" $dep_from
						"simplified event comparison",
					* $re_add(b672) DD "missing '!'" @ "end of '/*'"
						@ "multiline Doxygen comments" @ "function %swap"
						$orig (@ "function %Swap" $since b188)
						@ "class template specialization %GEvent"
				),
				/ @ "class template %GBinaryGroup, classes %(Size, Rect)"
					@ %YGDIBase $=
				(
					+ "base class" ^ "%ystdex::equality_comparable" $dep_from
						%Service.YDraw,
					- "all redundant functions %operator!="
				)
			),
			/ DLDI "member function %operator== for private data"
				@ "class %Typeface" -> "friend function" @ %Adaptor.Font,
			/ %Service $=
			(
				/ "simplified class %TextFileBuffer::iterator" @ %TextManager $=
				(
					+ "base class" ^ "%ystdex::bidirectional_iteratable";
					- "friend function %operator!=",
					* $comp "missing postfix %(++, --) for bidirectional \
						iterator requirements" $orig
						(@ "class %TextFileBuffer::Iterator" since b145)
				),
				/ $impl "avoid potentional ambiguity" @ %YDraw ^ "%std::cref"
					~ "%cref"
			)
		),
		* $re_add(b669) DD "missing document" @ "function %operator!= for \
			%FileNodeID" @ %YCLib.FileIO $since b638,
		/ DLDI "function %Reduce" @ %NPL.SContext ^ "%AsNode" ~ "%MakeNode"
	),
	/ $re_add(b613) $dev @ "%DrMemory-YSLib-suppress.txt" @ %Tools $=
	(
		+ "1 'INVALID HEAP ARGUMENT' case concerned with %std::string \
			allocation and deallocation for libstdc++ with C++11 ABI",
		+ "1 'POSSIBLE LEAK' case concerned with %operator<< for %std::cerr \
			allocation for libstdc++"
	),
	/ %YBase.YStandardEx $=
	(
		/ @ "all 2 function templates %unsafe_any_cast" @ %Any $=
		(
			+ 'ynothrowv',
			+ "assertion for type precondition"
		),
		/ %Set $=
		(
			+ "function template %set_value_move",
			/  @ "class template %mapped_set" $=
			(
				/ "optimized value move" ^ "ADL %set_value_move" $dep_from
					"%set_value_move" $=
				(
					/ "implemented optimized %insert for types meet \
						MoveConstructible",
					/ "implemented optimized %emplace_hint for types meet \
						MoveConstructible rather than CopyConstructible"
				),
				* "missing %std::move call" @ "move constructor" $since b665
			)
		)
	),
	/ DLDI "function %Reduce" @ %YReader.ReaderSetting ^ "%AsNode" ~ "%MakeNode"
),

b672
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ $re_add(b671) "wrapped return type with %observer_ptr"
				@ "member function %TextFileBuffer::iterator::GetBufferPtr"
				@ %Service.TextManager,
			/ %UI $=
			(
				* $re_add(b671) DD "missing '!'" @ "end of '/*'" @ "multiline \
					Doxygen comments" @ (("function %UpdateState" @ "class \
					template %GMSelector" $since b478, "private data member"
					@ "class %MSharedSelection" $since b479) @ %Selector,
					"data member %Visual::Visible" @ %YWidgetView $since b568,
					"protected data members" ("%MLinearUIContainer::vWidgets"
					$since b494, "%MUIContainer::mWidgets" $since b279)
					@ %YUIContainer, "function %clone" $orig (@ "function \
					%Clone" $since b243) @ "class %AController" @ %YWidgetEvent)
				),
				/ %Selector $=
				(
					/ "wrapped %StateType with %observer_ptr"
						@ "class %MSharedSelection";
					/ $forced DLDI "member function %RadioBox::(IsSelected, \
						SetSelected, UpdateState)"
				),
				/ @ "class %TextPlaceholder" @ %TextBox $=
				(
					/ DLDI "wrapped private data member with %observer_ptr",
					/ $re_add(b671) "wrapped return type with %observer_ptr"
						@ "function %GetCapturedPtr";
					/ $forced DLDI "function template %BindByFocus"
				),
				/ %Menu $=
				(
					/ @ "class %MenuHost" $=
					(
						/ $forced "private menu map type" ^ $dep_from
							("%ystdex::lref_less"
							@ %YBase.YStandardEx.Functional),
						/ "type" @ "data member %Roots" $=
						(
							(
							/ "key type" -> 'lref<IWidget>' ~ 'IWidget*';
							/ $forced "comparator type"
								^ $dep_from ("%ystdex::lref_less"
								@ %YBase.YStandardEx.Functional)
								~ "implicit %less<IWidget*>"
							),
							/ "wrapped key and mapped type with %observer_ptr"
						),
						/ $forced DLDI @ "operator+=" $dep_from "%Menu::pHost",
						/ $forced DLDI @ "HideUnrelated" $dep_from
							"%Menu::GetParentPtr",
						/ "wrapped mapped type with %observer_ptr"
							@ "alias %SubMap",
						/ $re_add(b671) "wrapped return type with %observer_ptr"
							@ "function %ShowSub"
					),
					/ @ "class %Menu" $=
					(
						/ $forced DLDI @ "constructor" $dep_from
							"%(Roots, GetParentPtr)",
						/ "wrapped protected data members %(pHost, pParent) \
							with %observer_ptr",
						/ $re_add(b671) "wrapped return type with %observer_ptr"
							@ "function %GetParentPtr",
						/ $forced DLDI @ "operator+=" $dep_from "%pParent"
					)
				),
				/ "wrapped data members %AView::(ContainerPtr, DependencyPtr, \
					FocusingPtr) with %observer_ptr" @ %YWidgetView,
				/ %YWidget $=
				(
					(
					/ $re_add(b671) $forced ("wrapped return type with \
						%observer_ptr" @ "function %FetchContainerPtr",
						"wrapped 3rd parameter type" @ "function \
						%SetContainerPtrOf") $dep_from
						("%AView::ContainerPtr" @ %YWidgetView);
					/ $foced DLDI @ "functions %(Invalidate, \
						InvalidateVisible, RequestToFront)"
					),
					/ $re_add(b671) $forced "wrapped return type with \
						%observer_ptr" @ "function %FetchFocusingPtr"
						$dep_from ("%AView::FocusingPtr" @ %YWidgetView)
				),
				/ %YUIContainer $=
				(
					/ $re_add(b671) $forced "wrapped type with %observer_ptr"
						@ "1st element" @ ("return type"
						@ "function %FetchTrace", "1st parameter type"
						@ "function %LocateForTrace") $dep_from
						("%FetchContainerPtr" @ %YWidget),
					(
					/ $re_add(b671) $forced "wrapped (1st, 3rd) parameter type \
						with %observer_ptr" @ "function %LocateOffset",
						$dep_from ("%FetchContainerPtr" @ %YWidget);
					/ $forced DLDI @ "function template %LocateForWidgetNode"
					)
				),
				/ $forced DLDI @ ("constructor %ListBox, detaching"
					@ %ComboList, "constructors %(ATrack, ScrollBar, \
					ScrollableContainer)" @ %Scroll, "member functions \
					%(TabBar, TabControl)::operator+=" @ %TabControl,
					"constructor %DialogBox" @ %UIContainerEx,
					"constructor %TextList" @ %ListControl,
					("all 2 functions %operator+=", "function %Add")
					@ "class %Window" @ %Window, "member functions \
					%Panel::(operator+=, Add)" @ %Panel)
					$dep_from ("%SetContainerPtrOf" @ %YWidget),
				/ $forced DLDI @ ("constructor %Menu" @ %Menu, "functions \
					%(RequestFocusCascade, ReleaseFocusCascade, \
					ReleaseFocusFrom)" @ %YFocus, "all 2 member functions \
					%Window::operator-=" @ %Window, "function %RemoveFrom"
					@ %YUIContainer, "member functions \
					%GUIState::(ResponseCursor, ResponseKey)" @ %YGUI)
					$dep_from ("%FetchContainerPtr" @ %YWidget),
				/ %YFocus $=
				(
					/ $re_add(b671) $forced "wrapped type with %observer_ptr"
						@ "2nd parameter type" @ "function %IsFocusedCascade",
						$dep_from
						("%(FetchContainerPtr, FetchFocusingPtr)" @ %YWidget);
					/ $forced DLDI @ "functions %(IsFocused, DoRequestFocus, \
						DoReleaseFocus)"
				),
				/ $forced DLDI @ ("all 2 member functions %Window::operator-="
					@ %Window, "function %RemoveFrom" @ %YUIContainer,
					"member functions %GUIState::ResponseKey" @ %YGUI)
					$dep_from ("%FetchFocusingPtr" @ %YWidget),
				/ $forced DLDI @ "constructor %DropDownList" $dep_from
					("%AView::DependencyPtr" @ %YWidgetView),
				/ %YGUI $=
				(
					/ $re_add(b671) "wrapped with %observer_ptr"
						@ ("private widget pointer data members",
						"parameter type" @ "function %CheckDraggingOffset",
						"return type" @ "functions %(GetIndependentFocusPtr, \
						GetCursorOverPtr)", "type" @ "data member \
						%ExternalTextInputFocusPtr") @ "class %GUIState";
					/ $forced DLDI @ "function %IsFocusedByShell, member \
						function %GUIState::(CleanupReferences, Wrap, \
						HandleCascade)"
				),
				/ $forced DLDI ("function %OnTouchHeld_DraggingRaw"
					@ %YControl, "function template %ActOnHover" @ %Hover,
					"constructors %(TextBox, Caret), member functions \
					%TextBox::(ExportCaretLocation, Caret::Check)" @ %TextBox)
					$dep_from ("%GUIState" @ %YGUI),
				/ DLDI "private data member" @ "class %UIEventArgs"
					@ %YWidgetEvent ^ 'lref<IWidget>' ~ 'IWidget*',
				/ %Animation $=
				(
					/ $re_add(b671) @ "class %InvalidationUpdater" $=
					(
						/ "wrapped type with %observer_ptr"
							@ "data member %WidgetPtr",
						/ "wrapped 1st parameter type with %observer_ptr"
							@ "constructor"
					);
					/ $forced DLDI @ "function template %Restart"
				),
				/ @ "class %TabControl" @ %TabControl $=
				(
					/ $re_add(b671) DLDI "wrapped private data member types \
						with %observer_ptr";
					/ $re_add(b671) $forced "wrapped type with %observer_ptr"
						@ "element type" @ "return type" @ "function %GetPages",
					/ $forced DLDI @ "functions %(operator([], +=), Find)"
				)
			)
		),
		/ $re_add(b671) "wrapped private input cache type with %observer_ptr"
			@ "platform %Win32" @ "class %InputManager" @ %Helper.InputManager,
		/ $forced "alias %OpenFileSet" @ "class %Partition" @ %'YCLib_(DS)'.DSIO
			^ $dep_from ("%ystdex::lref_less" @ %YBase.YStandardEx.Functional)
	),
	/ $forced DLDI %YReader $=
	(
		/ %ShlExplorer $=
		(
			/ $re_add(b671) "radio box" $dep_from
				("%MSharedSelection" @ %YFramework.YSLib.UI.Selector),
			/ @ "constructor %ShlExplorer" $=
			(
				/ $re_add(b671) $dep_from ("%TextPlaceholder::GetCapturedPtr"
					@ %YFramework.YSLib.UI.TextBox),
				/ "menu roots setting" $dep_from ("%Menu::(Roots, SubMap)"
					@ %YFramework.YSLib.UI.Menu),
				/ "animation reset" $dep_from %YFramework.YSLib.UI.Animation
			)
		),
		/ %ShlReader $=
		(
			/ "constructor %ShlTextReader" $dep_from
				("%Menu::Roots" @ %YFramework.YSLib.UI.Menu),
			/ "constructors %(TextInfoBox, ReaderBox)" $dep_from
				("%SetContainerPtrOf" @ %YFramework.YSLib.UI.YWidget)
		),
		/ "member function %DualScreenReader::Detach" @ %DSReader $dep_from
			("%FetchContainerPtr" @ %YFramework.YSLib.UI.YWidget)
	),
	/ %YBase.YStandardEx $=
	(
		* "wrong noexcept-specification" @ "member function template \
			%mem_get::operator()" @ %Functor $orig (@ %Functional $since b537);
		/ "functor %lref_less" -> "%get_less" @ %Functional
	),
	/ $dev $repo $re_add(b654) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.YSLib.UI.("%ywindow.cpp" => "%YWindow.cpp",
		"%ypanel.cpp" => "%YPanel.cpp")
),

b671
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				+ 'YB_NONNULL(1)' @ "function %FAT::LFN::GenerateAliasChecksum"
					@ "namespace %platform",
				/ $forced DLDI "simplified member function \
					%HDirectory::operator++" @ %FileSystem $dep_from
					("%DirectoryFindData::Read" @ %'YCLib_(Win32)'.MinGW32)
			),
			/ $forced DLDI "member functions %(Clipboard::Receive#(1, 2), Send#3)"
				@ %HostedGUI $dep_from ("%GlobalLocked::GetPtr"
				@ %'YCLib_(Win32)'.MinGW32),
			+ "metafunction %unique_ptr_from" @ %Reference ^ $dep_from
				("%ystdex::(defer_element, unique_ptr_pointer)"
				@ %YBase.YStandardEx.Memory),
			/ "abandoned element type"
				@ ("alias %UniqueFile", "alias %UniqueHandle") @ %FileIO
				^ $dep_from ("%unique_ptr_from" @ %Reference),
				// The element type is not used.
			/ DLDI "simpilified private data" @ ("class %DirectorySession"
				@ %FileSystem, "platform %Win32" @ "class %ScreenBuffer, \
				desturctor %HostWindow, clipboard string copy" @ %HostedGUI)
				^ $dep_from ("%unique_ptr_from" @ %Reference),
				// The element type is not changed.
			+ 'const' @ "member function %operator()"
				@ ("class %UnmapDelete" @ !"platform %DS" @ %MemroyMapping,
				"class %FileDescriptor::Deleter" @ %FileIO, "private deleter"
				@ "class %DirectorySession" @ %FileSystem,
				"class %HostWindowDelete" @ %HostedGUI)
				// To be consistent with %default_delete::operator().
		),
		/ %YSLib $=
		(
			/ $forced DLDI "all 2 functions %AccessPtr" @ "class %ValueObject"
				@ %Core.YObject $dep_from
				("%ystdex::any_cast" @ %YBase.YStandardEx.Any),
			/ %Adaptor $=
			(
				+ 'using platform::unique_ptr_from;' @ "namespace %YSLib"
					@ %YAdaptor,
				/ %Image $=
				(
					/ @ "class %ImageMemory" $=
					(
						/ DLDI "private data members order",
						/ "threw %BadImageAlloc on native handle allocation \
							failure" ~ "%GeneralEvent",
						(
						/ "explictly defaulted move constructor",
						+ $re_add(b669) DLDI "private deleter class";
						(
						^ DLDI $dep_from
							("%unique_ptr_from" @ %Adaptor.YAdaptor);
						* $comp $revert(b470) "leak for native resource when \
							buffer is not used" @ "destructor" $since b470
						),
						/ $forced DLDI @ "function %GetNativeHandle"
						)
					),
					/ @ "class %HBitmap" $=
					(
						* $re_add(b670) DD "missing '!'" @ "end of '/*'"
							@ "multiline Doxygen comments" @ ("constructor#2"
							$since b430, "constructor#6" $since b431,
							"function %swap" $since b430),
						(
						(
						+ "class %Deleter";
						^ DLDI ("%unique_ptr_from" @ %Adaptor.YAdaptor);
						/ "explicitly defaulted (move constructor, destructor)"
						),
						/ "wrapped %DataPtr with %observer_ptr";
						/ $forced "function %Release"
						)
					)
				),
				/ %Font $=
				(
					/ @ "class %FontFamily" $=
					(
						/ $re_add(b670) "wrapped return type with %observer_ptr"
							@ "all 2 functions %GetTypefacePtr"
						/ DLDI "simplified all 2 functions %GetTypefaceRef"
					),
					/ @ "class %FontCache" $=
					(
						/ "wrapped protected data member %pDefaultFace with \
							%observer_ptr",
						/ $re_add(b670) "wrapped return type with %observer_ptr"
							@ "functions %(GetDefaultTypefacePtr, \
							GetTypefacePtr, GetFontFamilyPtr)",
						/ "simplified %GetTypefacePtr"
							^ "%ystdex::call_value_or"
					),
					/ DLDI "simplified function %FetchDefaultTypeface"
				)
			),
			/ %UI $=
			(
				/ %YControl $=
				(
					/ @ "class %Control" $=
					(
						/ "wrapped %observer_ptr" @ "return type" @ "template \
							argument" @ "type" @ "data member %BoundControlPtr",
						/ $re_add(b670) "wrapped return type"
							@ "function %GetBoundControlPtr"
					),
					* $re_add(b670) DD "missing '!'" @ "end of '/*'"
						@ "multiline Doxygen comments"
						@ "function template %OnEvent_StopRouting" $since b285
				),
				/ $forced "member function %ScrollBar::GetBoundControlPtr"
					@ %Scroll $dep_from ("%Control" @ %YControl)
			)
		),
		/ $re_add(b670) "wrapped return type with %observer_ptr"
			@ "member function %DirectoryFindData::Read", "member function \
				template %GlobalLocked::GetPtr" @ %'YCLib_(Win32)'.MinGW32,
		/ $re_add(b670) $forced DLDI "function %InitializeSystemFontCache"
			@ %Helper.Initialization $dep_from
			("%FontCache::GetDefaultTypefacePtr" @ %YSLib.Adaptor.Font)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Any $=
		(
			+ "unary type trait %is_any_cast_dest",
			/ @ "function template %any_cast" $=
			(
				(
				/ $revert(b398) "cast template parameter type"
					@ "all 2 overloads for pointer";
				* $comp $doc "semantics equivalency with %boost::any_cast"
					$mismatch $since b398,
					// The interface was updated to WG21 N3508 (which was \
						superseded by WG21 N3804), but 'boost::any_cast' \
						actually did not changed all the time. So at least the \
						documentation was (solely) wrong.
				* $comp "conformance for WG21 N4081" $mismatch $since b590,
				/ $forced DLDI "all 2 overloads for reference"
				),
				* "missing overload for rvalue reference" $mismatch $since b590,
					// This overload was also introduced by WG21 N3804.
				+ $dev "static assertion for destination type"
					@ "all overloads for reference" ^ $dep_from
					"%is_any_cast_dest"
			),
			(
			/ "made 2nd default template argument 'true' only when 1st \
				template argument meets %is_nothrow_move_constructible"
				@ "class template %value_handler" @ "namespace %any_ops";
			* $comp "conformance of %any storage for WG21 N4081 \
				[any.class]/3" $mismatch $since b590
				// It requires that the small object optimization can only \
					apply to "nothrow copyable types". This was added since \
					WG21 N3804.
			)
		),
		/ %TypeTraits $=
		(
			+ "metafunctions %(indirect_element_t, are_same, is_in_types)",
			/ DLDI "simplified speicialization" @ "metafunctions %(and_, or_)"
		),
		/ %Memory $=
		(
			/ $re_add(b670) DLDI "simplified default template argument"
				@ "function template %clone_monomorphic"
				^ $dep_from ("%indirect_element_t" @ %TypeTraits),
			+ "metafunctions %(deleter_member_pointer_t; unique_ptr_pointer)",
			+ "metafunction %defer_element" ^ $dep_from
				("%indirect_element_t" @ %TypeTraits),
			/ DLDI "simplified static assertion"
				@ "function template %clone_polymorphic" $=
			(
				- "'std::' before 'is_polymorphic'",
				^ $dep_from ("indirect_element_t" @ %TypeTraits)
			)
		),
		/ %IntegerSequence $=
		(
			/ "metafunction %vfold" -> "metafunctions %(vfold_i; vfold_s)",
			/ DLDI "simplified metafunction %same_value_as"
				$= (- "'std::' before %is_same")
		),
		/ @ "namespace %ystdex" @ %Tuple $=
		(
			(
			* "wrong %vseq::fold result" $since b589 $orig
				(@ %sequence_fold $since b507);
			+ "metafunction %vfold" @ %Tuple $dep_from
				("%vfold" @ %IntegerSequence)
			),
			/ "metafunction %_q" => "namespace %vseq",
		),
		/ %TypeOperation $=
		(
			(
			+ "metafunction %underlying_cond_type_t";
			/ "metafunction supported non-enumeration types"
				^ "%underlying_cond_type_t" ~ "%underlying_type_t"
			),
			/ "metafunctions %(identity, identity_t)" >> %TypeTraits
		),
		+ "metafunctions %_a" @ "group %composition" @ "namespace %vseq"
			@ %Variadic ^ $dep_from ("%identity" @ %TypeOperation),
		/ DLDI "simplified" ("static assertion"
			@ "class template %used_list_cache" @ %Cache,
			"metafunction %have_same_iterator_category" @ %IteratorTrait)
			^ $dep_from ("%are_same" @ %TypeTraits) ~ "%(and_, is_same)"
		/ DLDI "simplified unary type trait %is_char_specialized_in_std"
			^ $dep_from ("%is_in_types" @ %TypeTraits) ~ "%(or_, is_in_types)"
	),
	/ $forced DLDI "constructor %ShlExplorer" @ %YReader.ShlExplorer
		@ ("%Control::BoundControlPtr" @ %YFramework.YSLib.UI.YControl)
),

b670
(
	/ %YBase.YStandardEx.Memory $=
	(
		* "ambiguity of friend comparison calls for %observer_ptr instances"
			$since b669
			$= (/ "all friend function templates %operator(==, !=, <)"
				-> "non-member function templates"),
		/ "ill-formed constructor template due to invalid access"
			@ "class template %observer_ptr" $since b669
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ "using %platform::(nptr, tidy_ptr, pointer_iterator, \
				make_observer, observer_ptr)" @ "namespace %YSLib"
				@ %Adaptor.YAdaptor,
			/ DLDI "class %TextFileBuffer" @ %YSLib.Service.TextManager
				^ $dep_from ("%tidy_ptr" @ %Adaptor.YAdaptor) $dep_from
				%YBase.YStandardEx.Memory ~ "%ystdex::nptr",
			/ %Core $=
			(
				/ @ "class %ValueObject" @ %YObject $=
				(
					"all 2 function template %AccessPtr" $=
					(
						/ "wrapped return type with %observer_ptr";
						/ $impl ^ $dep_from ("%YSLib::make_observer"
							@ %Adaptor.YAdaptor)
					),
					* $re_add(b667) DD "missing '!'" @ "end of '/*'"
						@ "multiline Doxygen comments"
						@ "function %Clear" $since b296
				),
				/ %ValueNode $=
				(
					/ $forced "wrapped return type with %observer_ptr"
						@ "all 4 function template %(AccessPtr; AccessChildPtr)"
						$dep_from %YObject $dep_to
						"observer pointer for node pointer access",
					(
					/ "wrapped return type with %observer_ptr"
						@ "all 4 functions %AccessNodePtr",
					+ "2 inline functions %(AccessNode, AccessNodePtr) with \
						wrapped container pointer parameter type with \
						%observer_ptr";
						// Instead of replacing, to keep efficiency on ABI. \
							Also to minimal modification and to keep ABI \
							compatibility.
					/ $forced "wrapped container pointer parameter type with \
						%observer_ptr" @ "all 2 function templates %AccessPtr \
						with container pointer parameter",
						// This could be inefficient than builtin pointers in \
							passing parameters on some ABI, but it is \
							acceptable as in templates.
					/ $forced "all 2 member function %ValueNode::at_p"
						-> "non-member functions %AccessNodePtr with wrapped \
						return type with %observer_ptr"
					),
					/ "all 2 function template %AccessChild supported \
						forwarding parameters to %AccessNode",
					(
					/ "merged all non-member %at" -> "%AccessNode"
						!^ "member function %ValueNode::at" $=
					(
						^ "ADL %AccessNode" ~ "%at",
						/ "supported node references for range access",
							// To support const tranparency.
						/ "disabled range of string to avoid ambiguity"
					);
					- "all 2 member functions %ValueNode::at" $dep_from
						%(Helper.Initialization, UI.(Loader, TreeView), \
						YReader.ShlReader)
					),
					+ "inline function %AccessNode for non-const %ValueNode",
					+ "function %AccessNode for non-const %ValueNode with \
						index parameter",
					+ "2 functions %AccessNodePtr for %ValueNode with index \
						parameter",
					(
					+ "function template %AccessNodePtr for node references \
						and iterator pair",
					+ "function template %AccessNodePtr for node references \
						and range"
					),
					/ "all 4 function template %AccessChildPtr supported \
						forwarding parameters to %AccessNodePtr",
				),
				/ %YFunc $=
				(
					- $revert(b171) "class template %ExpandMemberFirstBinder",
						// This should better be replaced other call wrappers \
							with explicit 'dynamic_cast' at construction site.
					- $revert(b167) "class template %ExpandMemberFirst",
						// This should better be replaced by lambda-expression.
					/ DLD "cleanup '#if 0' code",
						// Polymorphic functors should be better typed in \
							construction side. Other removed call wrappers \
							should be better be replaced by lambda-expressions.
					- "including <functional> and <typeinfo>" $dep_from
						%(UI.YComponent, Documentation.YSLib)
						// No YFramework code will be implicitly break due to \
							new guarantees.
				)
			),
			/ %UI $=
			(
				/ DLDI %UI.Loader $=
				(
					/ @ "member function %WidgetLoader::DetectWidgetNode" $=
					(
						/ $forced $dep_from
							"observer pointer for node pointer access",
						^ "AccessNode" ~ "%ValueNode::at"
					),
					/ "function template %AccessWidgetNode, member function \
						%WidgetLoader::TransformUILayout" ^ "%AccessNode"
						~ "%ValueNode::at",
					/ $forced "function %AccessWidget" ^ "%AccessWidget"
						~ $dep_from ("%ValueNode::at_p" @ %Core.ValueNode)
				),
				+ "including <typeinfo>" @ %UI.YComoponent,
				/ DLDI @ "class %TreeList" @ %TreeView ^ "%AccessNode"
					~ "%at for %ValueNode"
			)
		),
		/ DLDI "data receive" @ "class %Clipboard" @ %YCLib.HostedGUI
			^ "private data class" ~ 'void*',
		/ %Helper $=
		(
			/ DLDI "function %InitializeInstalled" @ %Initialization
				^ "%AccessNode" ~ "%ValueNode::at",
			/ %Envrionment $=
			(
				* $impl "wrong pointer cast" @ "window procedure" $since b430,
					// Not synchronized with %HostWindow, insignificant since \
						the ABI uses same representation for different pointers.
				/ $dev "all 'Host::Window*'" -> 'observer_ptr<Host::Window>'
					$dep_from ("%observer_ptr" @ %YSLib.Adaptor.YAdaptor)
					$dep_to "wrapping window pointer"
			),
			/ $forced DLDI ("member function %InputManager::Update"
				@ %InputManager, "constructor %Window#2") @ %HostWindow
				$dep_from "wrapping window pointer",
			/ "wrapped return type with %observer_ptr"
				@ ("functons %(GetHostRendererPtrOf, GetWindowPtrOf)"
				@ %HostedUI, "member function %InputManager::Update"
				@ %InputManager, "function %GetWindowPtr"
				@ "classes %(WindowThread, HostRenderer)" @ %HostRenderer)
		)
	),
	+ "new guaranteed including of headers" @ %Documentation.YSLib,
	/ DLDI "member functions %ShlReader::(LoadBookmarks, \
		LoadGlobalConfiguration)" @ %YReader.ShlReader
),

b669
(
	/ %YBase.YStandardEx $=
	(
		/ %Memory $=
		(
			(
			+ "class template %observer_ptr" @ "namespace %ystdex";
			+ "function templates %ystdex::(swap, make_observer), %std::hash \
				specialization for %ystdex::observer_ptr"
			),
			* DD "Doxygen name" @ "group %get_raw" $since b442
		),
		+ "unary type traits %(addrof_t, indirect_t)" @ %DereferenceOperation,
		/ DLDI "simplified functor %(addrof, indirect)" @ %Functor
			^ $dep_from ("%(addrof_t, indirect_t)" @ %DereferenceOperation)

		(
		+ "unary type traits %(addrof_t, indirect_t)" @ %TypeTraits;
		/ DLDI "simplified functor %(addrof, indirect)" @ %Functor
			^ "%addrof_t, indirect_t",
		/ DLDI "simplified static assertion" @ "constructor %any_input_iterator"
			@ %AnyIterator ^ "%indirect_t",
		/ DLDI "simplified metafunction %enable_for_iterator_t" @ %IteratorTrait
			^ "%indirect_t",
		/ DLDI "simplified default template argument"
			@ "function template %clone_monomorphic" @ %Memory ^ "%indirect_t"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Reference $=
			(
				+ "aliases %(make_observer, observer_ptr)" $dep_from
					%YBase.YStandardEx.Memory,
				+ "alias %default_delete",
				(
				+ 'using ystdex::nptr';
				+ "alias template %tidy_ptr" $dep_from "%observer_ptr"
				)
				+ 'using ystdex::pointer_iterator'
			),
			/ %FileIO $=
			(
				* "wrong 'ynothrow'" @ "functions with nonnull pointer \
					parameter" $orig (@ %FileSystem $since b461) $=
					(/ 'ynothrow' -> 'ynothrowv' $effective @ "functions \
						%(SetBinaryIO, SetupBinaryStdIO, RetryClose, 2 \
						uaccess, 2 uopen, 4 ufopen, 2 ufexists, upclose, 2 \
						upopen, uchdir, umkdir, urmdir, uunlink, uremove, 2 \
						FetchNumberOfLinks)"),
				* DD "missing document" @ "function %FetchNumberOfLinks#2"
					$since b639,
				/ DLDI "simplified" @ "platform %Win32" @ "member functions \
					%FileDescriptor::(GetCategory, GetSize)"
			),
			/ %MemoryMapping $=
			(
				+ "class type %UnmapDelete" $dep_from
					("%default_delete" @ %Reference),
				/ DLDI "class %MappedFile" $=
				(
					/ "simplified mapped storage" ^ $dep_from "%UnmapDelete",
					/ "simplified file descriptor" ^ "%UniqueFile";
					/ "explictly defaulted destructor"
						// Also avoided explicit delete-expression.
				)
			),
			/ "made %HandleDelete ill-formed" @ !"platform %Win32 or with \
				%YCL_API_Has_unistd_h" @ %Host,
				// The old declarations of %pointer as 'int*' is nonsense and \
					confusing. The delete-expression is also removed now.
			/ @ "class %DirectorySession" @ %FileSystem $=
			(
				(
				+ DLDI "private class type %Data";
				/ "%NativeHandle" -> 'Data*';
				/ $comp DLD "native handle type changed" -> 'Data*' ~ 'void*'
					@ "platform %Win32"
					// Though it is still an incomplete type.
				),
				+ DLDI "private deleter class",
				^ DLDI "%unique_ptr";
				/ DLDI "simplified function %Rewind",
				/ $forced DLDI "explictly defaulted move constructor",
				/ DLDI "simplified by explictly defaulted destructor"
					@ "non-header file",
					// Also avoided explicit delete-expression.
				/ DLDI @ "class %HDirectory" $=
				(
					/ "wrapped private data" ^ $dep_from
						("%tidy_ptr" @ %Reference);
					/ "simplified indirection" @ "platform %Win32",
					/ "explictly defaulted move constructor"
				)
			),
			/ %HostedGUI $=
			(
				+ "class %HostWindowDelete";
				/ DLDI "simplified destructorr %HostWinddow"
					^ "%HostWindowDelete"
					// Also avoided explicit delete-expression.
			)
		),
		/ DLDI "simplified" @ "destructor %WindowThread"
			@ %Helper.HostRenderer ^ "%unique_ptr" ~ "delete-expression",
		* $lib $impl "mismatched delete-expression" @ "function %Unmount" $since
			b611
			// The correspoinding 'delete' should not be global for \
				%make_unique. This bug would have effect once 'operator new' \
				is overloaded for %Partition. On the other hand, explicit \
				%::operator new and %::operator delete are intended for \
				%::devoptab_t, since they are always global names and '::' is \
				mandated.
			$= (^ 'delete' ~ '::delete')
	)
),

b668
(
	/ %YBase.YStandardEx $=
	(
		/ "function template %split_if_iter" -> "%split_if" @ %Algorithm
			$= (* "invalid access '++' when no delimiter found" $orig
				(@ %String $since b545)),
		+ "2 function templates %(nonnull_or, value_or, call_value_or)"
			@ %DereferenceOperation,
		/ %Examiner $=
		(
			/ "static member function %equal::are_equal" $=
			(
				/ "hid 3rd parameter as trailing-return-type",
				/ "accepted expression result explicit cast to 'bool'"
			),
			* "wrong overloading of %are_equal for lvalues"
				@ "struct %equal_examiner" $since b348
				$= (/ "static member function %equal::are_equal"
					^ "parameter pack" ~ "explicit unused parameter")
		),
		/ DLDI "simplified %Exception" @ %Exception ^ ("%ystdex::call_value_or"
			@ %DeferenceOperation, "%std::nested_exception::nested_ptr",
			"%std::mem_fn"),
		+ "functors %(addrof, indirect)" @ %Functor,
		/ DLDI "function %fexists" @ %CStandardIO
			^ ("%ystdex::compose", "%addrof" $dep_from %Functor,
			"%ystdex::call_value_or" $dep_from %DereferenceOperation),
		/ @ "%std::numeric_limits specialization for %ystdex::fixed_point \
			instances" @ %Rational $=
		(
			* $doc "wrong name" @ "'\brief' command" @ "Doxygen comments" $since
				b266,
			* "strict ISO C++ conformance" $since b261
				// See ISO C++11 18.3.2.3/2, also http://wg21.cmeerw.net/lwg/issue559.
				$= (* "missing specialization for cv-qualified types")
		)
	),
	/ %YFramework $=
	(
		/ DLDI %NPL.NPLA $=
		(
			/ "simplified function %SXML::ConvertAttributeNodeString",
			/ "simplified functions" ^ "%AccessPtr" ~ "%Access" $=
			(
				// To avoid explicit exception handling immediately, %Access \
					calls are mostly not fit.
				/ "simplified functions %(TransformToSyntaxNode, PrintNode)",
				/ "simplified function %ParseNPLANodeString"
					^ "%ystdex::value_or"
					$dep_from %YBase.YStandardEx.DereferenceOperation),
				/ "simplified function %SXML::ConvertStringNode"
					^ "%ystdex::call_value_or" $dep_from
					%YBase.YStandardEx.DereferenceOperation)
				/ "simplified function %SXML::ConvertDocumentNode" ^ $dep_from
					('==' @ "%ValueNode" @ %YSLib.Core.YObject)
			)
		),
		/ %YSLib $=
		(
			/ DLDI "simplified function %AddMIMEItems" @ %Service.ContentType
				^ "%AccessPtr" ~ "%Access",
				// To avoid explicit exception handling immediately.
			/ %UI.Loader $=
			(
				/ DLDI "simplified function %AccessWidget"
					^ ($dep_from "%ValueNode::at_p"
					@ %Core.ValueNode, "%Access)" ~ "%AccessChild",
					// Ditto. Note that %AccessChildPtr may hide \
						%ystdex::bad_any_cast, thus is not desired here.
				/ @ "class %WidgetLoader" $=
				(
					/ @ "function %WidgetLoader::DetectWidgetNode" $=
					(
						(
						/ $impl ^ "%(Access, ValueNode::at)" ~ "%AccessChild";
							// Ditto.
						/ $doc "explicitly specified possible exception \
							%std::out_of_range"
						),
						* "caught %ystdex::bad_any_cast& in registered handler \
							%WidgetLoader::Bounds silently" $since b433
					),
					/ @ "function %TransformUILayout" $=
					(
						* "caught %ystdex::bad_any_cast& in registered handler \
							%WidgetLoader::(Insert, InsertZOrdered) silently"
							$since b433,
						+ $lib $impl "assertion to check null '$pointer' field"
							^ "%Deref"
					)
				)
			)
			/ %Core $=
			(
				/ $comp %YObject $=
				(
					(
					* "%(HeldEqual::are_equal; AreEqualHeld) for lvalue always \
						return 'true'" $since b454 $dep_from
						("%ystdex::examiners::equal_examiner::are_equal"
						@ %YBase.YStandardEx.Examiner);
					* $comp "%(ValueHolder, PointerHolder::operator==); \
						%ValueObject::operator== always return 'true'"
						$since b348 $orig (@ "protected member function \
							templates %IValueHolder::AreEqual" $since b240)
					),
					(
						+ "target type check"
							@ "%(ValueHodler, PointerHolder)::operator==";
						- "target type check"
							@ "member function %ValueObject::operator=="
					),
					/ @ "class %ValueObject" $=
					(
						- $lib $design "cast for holders" @ "function \
							%operator==" ^ "%ystdex::polymorphic_downcast"
							~ 'static_cast',
						+ "base class %ystdex::equality_comparable<ValueObject>"
							// For %operator!=.
					)
				)
				/ %ValueNode $=
				(
					/ DLDI "simplified all 2 functions %AccessNodePtr with \
						container reference parameter" ^ $dep_from
						(("%ystdex::call_value_or" @ %DereferenceOperation,
						"%ystdex::addrof" @ %Functor) @ %YBase.YStandardEx),
					+ 'ynothrow' @ "all 4 (functions %AccessNodePtr; function \
						templates %AccessChildPtr)",
					+ "2 functions %at_p" @ "class %ValueNode" ^ $dep_from
						"%AccessNodePtr",
					+ "function templates %(AsNode, AsNodeLiteral)"
				)
			),
			/ DLDI "all 2 functions %ufexists" @ %YCLib.FileSystem
				^ ("%ystdex::compose", "%addrof" $dep_from
				%YBase.YStandardEx.Functor, "%ystdex::call_value_or"
				$dep_from %YBase.YStandardEx.DereferenceOperation)
		),
		/ DLDI "simplified member function %ShlDS::OnGotMessage"
			@ %'Helper_(DS)'.Shell_DS ^ $dep_from ("%ystdex::value_or"
			@ %YBase.YStandardEx.DereferenceOperation)
	),
	/ DLDI ^ $dep_from ("%AsNode" @ %YFramework.YSLib.Core.ValueNode)
		~ "initializer with '0'" $effective @ "functions"
		((("%(MapNPLALeafNode, TransformToSyntaxNode)" @ %NPLA,
		"%TransformNodeSequence" @ %NPLA1, "%Reduce" @ %SContext) @ %NPL
		"member function %WidgetLoader::TransformUILayout" @ %YSLib.UI.Loader)
		@ %YFramework, "%AddButtonToTabBar" @ %YReader.Shells),
	/ DLDI ^ $dep_from ("%AsNodeLiteral" @ %YFramework.YSLib.Core.ValueNode)
		~ "initializer with '0'" $effective @ "function %MakeXMLDecl"
		@ %YFramework.YSLib.NPL.NPLA
),

b667
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ DLDI "function %SXML::ConvertDocumentNode" @ %NPLA
				^ "%ValueNode::GetContainer" ~ "%ValueNode::GetContainerRef",
			- 'const' @ "1st parameter type"
				@ "functions %(all 3 Analyze; Reduce)" @ %Scontext,
			/ DLDI "simplified function %DecomposeMakefileDepList"
				@ %Dependency,
			/ DLDI "function %Decompose" @ $Lexical
				!^ "%ystdex::split_l with range parameter"
		),
		/ %YSLib $=
		(
			/ @ "class %ValueNode" %Core.ValueNode $=
			(
				(
				- 'const' @ ("function %GetContainerRef" $dep_from
					%(NPL.NPLA, YReader.ShlReader), "functions %(SetChildren, \
					(Clear; ClearContainer))", "all 2 functions %(operaotr+=, \
					Add)" $dep_from %(NPL.SContext, YReader.Shells), "function \
					template %SplitChildren; all functions %(2 operaotr-=, \
					Remove)", "functions %(SwapContainer, SwapContent) and \
					their parameter type", "function template %(insert, \
					emplace_hint)", ("return type" @ "all 2 functions \
					%operator/=", ("return type" @ "function %operator[]";
					"function %operator[]");
					"all 2 functions %operator(/=; %=)"));
				- 'mutable' @ "%Value, container data member"
				),
				* $re_add(b662) DD "missing '!'" @ "end of '/*'"
					@ "multiline Doxygen comments"
					@ ("%operator=" $since b502, "%swap" $since b501)
			),
			- 'const' @ ("1st parameter type" @ "all 2 function templates \
				%AccessWidget"; "parameter type; return type" @ "(function \
				template; function) %AccessWidgetNode") @ %UI.Loader,
			/ DLDI "static member function %Path::Parse" @ %Service.FileSystem
				!^ "%ystdex::split with range parameter"
		)
	),
	/ %YReader $=
	(
		- 'const' @ "2nd parameter type" @ "function %AddButtonToTabBar"
			@ %Shells $dep_from %YFramework.YSLib.UI.Loader,
		/ DLDI @ "class %ShlReader" @ %ShlReader $=
		(
			/ "functions %LoadGlobalConfiguration" ^ "%ValueNode::GetContainer"
				~ "%ValueNode::GetContainerRef",
			/ $comp "functions %SaveGlobalConfiguration" $dep_from
				("%ValueNode::operator[]" @ %YFramework.YSLib.Core.ValueNode),
			/ "function %LoadBookmarks" !^ "%ystdex::split with range parameter"
		)
	),
	/ "all 'yconstfn explicit'" -> 'explicit yconstfn' $effective
		@ %(YBase.YStandardEx.(BitSegment, Pointer),
		YFramework.YSLib.Core.YGDIBase),
	/ @ %YBase.YStandardEx $=
	(
		/ %Operators $=
		(
			* $re_ex(b656) "workaround for G++" @ $since b655,
			* "wrong corresponding expression argument and function argument \
				order"
				@ "friend function %operator(==, !=#2)"
					@ "%equality_comparable2" $since b260
				// This may lead to recursive instantiation. The order is \
					different to Boost.Operators.
		),
		- 'explicit' @ "constructor template"
			@ "class template %pointer_iterator" @ %Pointer,
		/ %Iterator $=
		(
			* "missing including %TypeOperation for %(first_tag, second_tag)"
				$since b627,
			/ DLD "simplified return type" @ "friend function %operator-"
				@ "class template %pseudo_iterator",
			/ @ "class template %transformed_iterator" $=
			(
				+ 'yconstfn' @ "friend function %operator(==, <)",
				+ 'yconstfn_relaxed' @ "function %get_transformer",
				(
					(
					+ "aliases %(pointer, iterator_category, value_type)",
					- "function %operator (iterator&, const iterator_type&)",
						// To avoid ambiguity.
					+ "3 friend function %operator- for difference",
					+ "friend functions %operator(==, <) for comparison with \
						underlying iterator",
					+ "base classes for comparison with underlying iterator"
						^ "%totally_ordered2" $dep_from %Operators
					);
					/ "public base iterator" -> "private member" $dep_from
						%Pointer;
						// Behavior other than bug fix should not change \
							surprisingly.
					* $comp "ambiguous %operator-> calls of friend function \
						declared in %iterator_operators_t but not declared in \
						class explicitly" $since b576
				)
			)
		),
		/ %Set $=
		(
			* "missing including %Functor for %less" $since b665,
			* "function %erase with 2 arguments" @ "class templates %mapped_set"
				$since b665
		),
		/ @ "function templates %(split, split_if_iter, split_l)" @ %String $=
		(
			- "overloaded version for ranges" $dep_from
				%YFramework.(NPL.Lexical, YSLib.Service.FileSystem),
			/ "overloaded version for iterators" >> %Algorithm
		)
	),
	/ $forced DLDI @ %Tools.ProjectGenerator.Main $dep_from
		("%ValueNode" @ %YFramework.YSLib.Core.ValueNode)
),

b666
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			* DLB $impl "ill-formed member access"
				@ "constructor %WindowClass#4" @ %HostedGUI $since b658
				// G++ accepts it, Clang++ rejects. It is in the assertion \
					check so normally it does not alter the behavior.
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			* $impl "strict ISO C++ code conformance" $since b660
				// To eliminate Clang++ error: [-Werror,-Wnested-anon-types].
			* DLB "alias %ModuleProc" $since b651
				// This occasionally worked for G++, but not for Clang++.
		),
		/ %YSLib.Core.ValueNode $=
		(
			/ @ "class %ValueNode" $=
			(
				/ DLDI "function %operator[]" ^ "const iterator",
				/ "alias %Container" -> 'ystdex::mapped_set<ValueNode>'
					~ 'set<ValueNode>' $dep_from %YBase.YStandardEx.Set,
				+ "function 'ValueNode& at(const string&);'" $dep_from
					"%AccessNode"
			),
			/ @ "function template %(Access, AccessPtr; AccessNode, \
				AccessNodePtr, AccessChild, AccessChildPtr)" $dep_from
				"%ValueNode::Container" $=
			(
				+ "overloaded function template for 'ValueNode&'"
				+ 'const' @ "return type"
					@ "overloaded function templates for 'const ValueNode&'"
			)
		),
		- 'const' @ "parameter type 'const ValueNode&'"
			@ "function template %InsertChildSyntaxNode#1" @ %NPL.NPLA
	),
	+ $build '-Wno-missing-braces' @ "%CXXFLAGS_IMPL_WARNING for Clang++"
		@ "%SHBuild-common-options.sh" @ %Tools,
		// To eliminate Clang++ warning: [-Wmissing-braces]. See \
			https://llvm.org/bugs/show_bug.cgi?id=21629. Since it is resolved \
			for GCC at frontend but not per library API level (possible by \
			'#pragma's), make it done manually here as well. G++ < 4.9 is \
			formally not being used for test, so no backport effort.
	/ %YBase.YStandardEx $=
	(
		/ @ "class template %pointer_iterator" @ %Pointer $=
		(
			+ 'yconstfn' @ "function %operator*, friend function %operator==",
			+ 'yconstfn_relaxed' @ "functions %operator(+=, -=, ++, --)",
			+ "friend function %operaotr<"
		),
		/ %Tuple $=
		(
			* "metafunction specialization %front for %std::tuple" $since b589,
				// The result should be an element rather than a sequence.
			- "metafunction specialization %back for %std::tuple" $dep_from
				("%back" @ %Variadic),
			- "metafunction specialization %pop_back for %std::tuple" $dep_from
				("%pop_back" @ %Variadic)
		),
		/ %Variadic $=
		(
			/ @ "metafunction %deduplicate" $=
			(
				* "wrong result" $since b589 $dep_from ("%front" @ %Tuple)
					$= (/ $impl ^ "%push_back_t" ~ "%concat_t");
				/ $impl "optimized" ^ "%(front_t, pop_front_t, push_front_t)"
					~ "%back_t, pop_back_t, push_back_t)"
					// This is more efficient by default since it avoids \
						expensive %split_n instantiation used by %pop_back.
			),
			+ "primary templates %(back, pop_back)"
			/ $impl "optimized primary template %unique" ^ "%pop_front_t"
				~ "%pop_back_t"
				// Ditto for performance, though %split_n has already been used.
			/ $impl "primary template %split_n" ^ "%push_front_t"
				~ "%push_back_t"
				// To reduce dependencies conceptually.
		),
		/ @ %IntegerSequence $=
		(
			(
			- "metafunction specialization %back for %integer_sequence"
				$dep_from ("%back" @ %Variadic);
			* $comp "wrong %back result for %integer_sequence" $since b589
				// It should have used %at rather than %at_t at base-specifier.
			),
			- "metafunction specialization %pop_back for %integer_sequence"
				$dep_from ("%pop_back" @ %Variadic);
		),
		/ @ "class template %mapped_set" @ %Set $=
		(
			/ @ "function templates %(emplace, emplace_hint), 2 functions \
				%insert" $=
			(
				/ "always used copy instead of move or emplacement";
				* $comp "invalid key access" $since b665
			);
			/ DLDI "simplified %mapped_key_type"
		)
	),
	/ DLD "all 'yconstfn friend'" -> 'friend yconstfn' $effective
		@ %YFramework.YSLib.Core.YEvent,
	/ %Test.YBase $=
	(
		/ DLDI "test namesapce order",
		+ "static assertions for %vseq operations",
		+ "1 test case" ^ "%ystdex::(integer_sequence, make_peano_sequence_t)"
	)
),

b665
(
	+ $fmt "YAML configuration %.clang-format",
		// This is not sufficient. Manually tweaking is also needed, see wiki \
			page %Development.zh-CN.md for details.
	/ %YBase $=
	(
		* $fmt DLDI "redundant indent" @ "namespace scope declarations"
			@ %LibDefect.CMath $since b556,
		/ %YStandardEx $=
		(
			* $fmt DLDI "redundant space after 'template'"
				@ "deleted function template %ref" @ %Ref $since b588,
			/ @ %Iterator $=
			(
				/ @ "class template %transformed_iterator" $=
				(
					(
					+ $dev "friend class template declaration";
					+ "2 constructor templates for parameters of \
						%transformed_iterator with other template parameters",
					),
					* "wrong type for %(++, --)" $since b301
						$= (+ "functions %operator(++, --)"),
					* "default function parameter unusable due to missing \
						default template argument" @ "constructor template \
						with deduced transformer" $since b288
				),
				/ @ "class template %pseudo_iterator" $=
				(
					/ @ "function %operator--" $=
					(
						/ 'yconstfn' -> 'yconstfn_relaxed';
						* "wrong 'const'" $since b412
					),
					+ 'yconstfn_relaxed' @ "function %operator++"
						// As same as %operator--.
				),
				(
				/ "all function templates %(first, get, indirect, second)"
					@ "namespace %iterator_transformation" -> "functors \
					with 'void' specialization as ISO C++14 standard functors"
					$dep_from %Operators;
					// It will be ill-formed if the bug of return type of \
						generated %operator-> remains.
				/ $forced "all 4 function templates %operator|"
				)
			),
			/ "implemented function %operator->" @ "struct %dereferenceable"
				@ %Operators $=
			(
				^ $re_ex(b576) "%ystdex::constfn_addressof" ~ 'std::addressof',
				* "wrong return type" $since b576
			)
		),
		* "reserved identifier used" @ "friend class template declaration"
			@ "class template %fixed_point" @ %Rational $since b260
		+ %Set
			$= (+ "class template %mapped_set" $dep_from
				("%(transformed_iterator, iterator_transformation::second)"
				@ %Iterator))
	),
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				+ "namespace %A1";
				/ "wrapped all entities" @ "namespace %NPL"
					>> "namespace %NPL::A1" $=
				(
					/ "%InsertNPLA1Child" => "%InsertChild",
					/ "%InsertNPLA1SequenceChild" => "%InsertSequenceChild",
					/ "%TransformNPLA1" => "%TransformNode",
					/ "%TransformNPLA1Sequence" => "%TransformNodeSequence",
					/ "%LoadNPLA1" => "%LoadNode",
					/ "%LoadNPLA1Sequence" => "%LoadNodeSequence"
				),
				+ "enum class %ValueToken" @ "namesapce %A1"
			),
			/ "1st parameter type" @ "functions (%Reduce, all 3 %Analyze)"
				@ %SContext -> 'const ValueNode&' ~ 'ValueNode&'
		),
		/ %YSLib $=
		(
			/ %Core.ValueNode $=
			(
				/ DLDI @ ("functions %(begin, end) with 'const', function %at"
					@ "class %ValueNode", "functions %(MakeIndex#2, at)")
					^ "%ValueNode::GetContainer"
					~ "%ValueNode::GetContainerRef",
				/ @ "class %ValueNode" $=
				(
					* $impl "invalid argument used for %erase"
						@ "function %Remove" $since b403,
						// The iterator type of container is unspecified and \
							there are multiple overloaded %erase, so there may \
							be ambiguity for brace-initializer.
					* $impl "wrong iterator type used" $since b338
						// The type 'const_iterator' is not guaranteed to be \
							convertible to 'iterator'.
						$= (/ DLD ^ "%ystdex::as_const")
				)
			),
			/ DLDI @ "function %AddMIMEItems" @ %Service.ContentType
				^ "%ValueNode::GetContainer" ~ "%ValueNode::GetContainerRef"
		),
		/ DLDI @ "function %SaveConfiguration" ^ "%ValueNode::GetContainer"
			~ "%ValueNode::GetContainerRef"
	)
),

b664
(
	* $dev $design "missing %Documentation::Workflow::Annual2016"
		@ "filter of Microsoft VC++ project" $since b663,
	* $build "generated code with dependency on ('u8', 'u32')" @ "makefiles"
		@ ("platform %DS" $since $before b132, "platform %Android" $since b492),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ 'using ystdex::arrlen;' -> 'using ystdex::size;' @ %Container,
			/ $forced DLDI @ %(FileSystem, HostedGUI, Keys)
			* "missing '#undef FormatMessage'" @ "platform %Win32" @ %NativeAPI
				$since b435
				// This caused %Win32Exception::FormatMessage is actually \
					'FormatMessageW'.
		),
		/ %YSLib $=
		(
			(
			/ $forced 'using ystdex::arrlen' -> 'using platform::size;'
				@ %Adaptor.YAdaptor $dep_from %YCLib.Container;
			/ $forced DLDI @ %Service.TextFile
			),
			/ @ "class %ValueNode" @ %ValueNode $=
			(
				+ "function %ValueNode::GetContainer",
				+ "function templates %(SelectChildren, SplitChildren)"
			)
		),
		/ @ "function %PrintNode" @ %NPL.NPLA $=
		(
			* "empty node ignored to handle" $orig (@ %NPLA1 $since b597),
				// Empty node should be handled if intended.
			/ "always inserted single ' ' after the prefix even if handling of \
				node printing nothing"
				// To simplify the implementation. Note that with default \
					arguments, the suffix ' ' would already be outputted when \
					the non-name term is a list which is beginning next to the \
					line containing the name.
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "struct %LocalDelete",
			/ @ "static member function %Win32Exception::FormatMessage" $=
			(
				* "resource leak on encoding conversion failure" $since b435
					^ $dep_from "%LocalDelete",
				/ "simplified exception handling" ^ "%TryInvoke"
					// Trace warning would be remained.
			),
			* "missing error handling" $since b435
				^ ("%YCL_CallWin32F" $dep_from %YCLib.NativeAPI)
			/ @ "member function %GlobalDelete::operator()" $=
			(
				* "missing check null handle befroe calling %::GlobalFree"
					$since b593
				* "wrong trace for error handling" $since b593
			)
		)
	),
	/ $forced @ %YReader.(ShlReader, ReaderSettingUI) $dep_from
		%YFramework.YSLib.Adaptor.YAdaptor
		$= (/ DLDI ^ "%(size, ystdex::cend)" ~ "%arrlen"),
	/ %YBase.YStandardEx $=
	(
		(
		/ DLDI "function templates %(write, write_literal)" ^ "%size"
			~ "%ystdex::arrlen";
		- "all 2 function templates %arrlen" @ %Utilities $dep_from %(YReader,
			YFramework.(YCLib.Container, YSLib.Adaptor.YAdaptor))
		),
		/ %String $=
		(
			(
			/ "function template %string_end" ^ "%ystdex::ntctslen",
			/ "function template %string_length" -> "3 overloaded function \
				templates with parameters of pointers and \
				%std::initializer_list instances";
			/ $forced "function templates %(string_begin, string_end)"
				^ "pointer type parameter" ~ "array reference type parameter",
			/ $comp "function templates %(begins_with, ends_with; split, \
				split_iter, split_l) treated array as NTCTS"
			),
			+ "overloaded function templates %(to_string, to_wstring) for \
				class types" ^ "%std::(wstringstream, wostringstream)",
			* "wrong assumption on nonzero formatted string length caused \
				assertion failure" @ "function template %vsfmt" $since b564
		),
		* "missing overloaded %range_size for %std::initializer_list instances"
			@ '__cplusplus <= 201402L' @ %Container $since b663
			$= (+ $revert_ex(b663) "function template %range_size for \
				%std::initializer_list instances"),
		/ %Range $=
		(
			+ $re_add(b663) "overloaded %(cbegin, cend, crbegin, crend) for \
				%std::initializer_list instances" @ '__cplusplus <= 201402L',
			+ $re_add(b663) "overloaded function template %(begin, end, \
				cbegin, cend) for rvalue reference to array types",
			* "conditional inclusion for overloaded function templates for \
				rvalue reference parameter without conditional inclusion"
				$since b663
				// This is actually irrelevant to CWG 616. To make C++14 works, \
					they should be defined unconditionally.
		)
	),
	/ $re_add(b601) "all 'yconstexpr auto'" -> 'yconstexpr const auto'
		@ "namespace scope variable declarations" $effective
		@ %YFramework.YCLib.FileSystem,
	/ %Test $=
	(
		/ %YBase.Main $=
		(
			/ $forced "test case for %ystdex::string_length" $dep_from
				("%string_length" @ %YBase.YStandardEx.String),
			+ "1 test case" ^ "%ystdex::string_begin",
			+ "2 test cases"
				^ ("%ystdex::string_end" $dep_from @ %YBase.YStandardEx.String),
			+ "30 test cases" ^ ("%ystdex::(begin, end, cbegin, cend, cbegin, \
				cend, crbegin, crend, size, data)" $dep_from
				@ %YBase.YStandardEx.Range),
			/ DLDI "worked around to superfluous Clang++ warning"
				// To eliminate warning: [-Wunneeded-internal-declaration]. \
					This seems to be a bug.
		),
		+ "'$EXESFX' at end of output file name" @ "%test.sh"
			// This makes Clang++ also produce '.exe' file on MinGW like G++.
	)
),

b663
(
	/ %YBase.YStandardEx $=
	(
		+ %IOS $=
			// Note that libstdc++ has %_M_setstate which sets state without \
				throwing and Microsoft VC++ also has extention to do rethrowing \
				directly, but since %YBase.YStandardEx is required to rely on \
				no specific implementation, they are not available.
			(+ "function templates %(setstate; rethrow_badstate")),
		* "exception thrown by %setstate instead of rethrown exception when \
			exception mask is set for %std::ios_base::badbit"
			@ "function template %extract" @ %String $since b565 ^ $dep_from
			("rethrow_badstate" @ %IOS),
			// This violates the requirements of ISO C++ as an unformatted \
				input function.
		/ %Container $=
		(
			+ "function template %erase_all for iterator range",
			/ @ "function templates %(erase_all, erase_all_if)" $=
			(
				/ "optimized function template %(erase_all, erase_all_if) for \
					entire range of sequence container" ^ "member function \
					%(remove, remove_if)" ~ "%std::(erase, remove, remove_if)",
					// To effect optimized operations for types like \
						%std::list and %std::forward_list.
				+ "member %key_type detection for non-sequence container types",
				+ "adaptive overloaded function templates for container or iterator \
					range"
			),
			* "missing %yforward for range pareameter passing"
				@ "function templates" ("%concat#2" $since b546,
				"%make_container#2" $since b532),
			/ $impl "assertions" @ "%erase_n" ^ "ADL %(end, cend)" ~ "member",
			/ $impl "function template %search_map#1" $=
			(
				^ $dep_from "%as_const" @ %Utilities,
				^ "non-member ADL %cend" ~ "member %end"
			),
			/ "all 2 function template %vector_size" ^ "non-member ADL %size"
				~ "member %size" $dep_from %Range,
			(
			// See $2016-01 @ %Documentation::Workflow::Annual2016.
			/ "function templates %range_size" ^ "non-member ADL %size"
				$dep_from %Range;
				// Funtion templates %ystdex::arrlen are delayed to be removed \
					since it has many instance of usage.
			- "%range_size for arrays and %std::initializer_list instances",
				// Now this is covered by ADL %size provided by %ystdex::size.
			* DD "wrong group separator '//{'" @ "Doxygen comments" $since b546
			)
		),
		/ "function template %as_const" @ %Cast >> %Utilities,
		/ %Range $=
		(
			// See $2016-01 @ %Documentation::Workflow::Annual2016.
			+ "function templates %(2 size, 3 empty, 4 data)"
				// See WG21 N4280.
			+ "overloaded function templates %(empty, data) for rvalue \
				reference of array types" @ '__cplusplus <= 201103L',
			+ "overloaded function template %size for rvalue reference \
				to array types" @ '__cplusplus <= 201402L'
		)
	),
	/ %YFramework $=
	(
		* "exception thrown by %setstate instead of rethrown exception when \
			exception mask is set for %std::ios_base::failbit"
			@ "function %operator>>" @ %NPL.Configuration $since b662
			^ $dep_from ("rethrow_badstate" @ %IOS),
		/ %NPL $=
		(
			/ DLDI "simplified function %ConvertAttributeNodeString" @ %NPLA1
				^ "%Access for %ValueNode",
			+ %NPLA;
			/ "all 13 alias-declarations, struct %NPLATag, all function \
				templates (2 %InsertSyntaxNode, 3 %InsertChildSyntaxNode), \
				functions %(MapNPLALeafNode, TransformToSyntaxNode, \
				EscapeNodeLiteral, LiteralizeEscapeNodeLiteral, \
				ParseNPLANodeString, DefaultGenerateIndent, PrintIndent, \
				PrintNode, PrintNodeChild, PrintNodeString), namespace %SXML"
				@ %NPLA1 => %NPLA
		)
	)
),

b662
(
	/ %YFramework $=
	(
		/ @ "function %ResolveReparsePoint" @ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "trace with level 'Warning'" @ "unspported tag",
			* "opened reparse point already resolved" $since b558
		),
		* $comp "resolved link target instead of link" @ "platform %Win32"
			@ "function %ReadLink" $since b558 $dep_from
			("%ResolveReparsePoint" @ %'YCLib_(Win32)'.MinGW32),
		/ %YBaseMacro $=
		(
			/ "required explicit 2 arguments for attribute list and interface \
				name" @ "macro %YInterface";
			/ $forced DLDI "macros %(FwdDeclI, DeclDerivedI)"
		),
		/ %YCLib $=
		(
			/ $impl "made trailing normailzation of paths earlier than call to \
				%::opendir" @ "constructor %DirectorySession"
				@ !"platform %Win32" @ %FileSystem,
			/ "directly failed and set %errno to %ENOSYS" @ "platform %DS"
				@ "functions %(upopen, upclose)" @ %FileIO,
			+ "functions %(IsAssignableFrom, IsInstanceOf, IsSameObject)"
				@ "class %JNIBase" @ %JNI
		),
		/ $revert(b655) "directory resolving empty string" %'YCLib_(DS)'.DSIO
			$dep_from %YCLib.FileSystem $=
		(
			/ "treated empty path as current working directory" ~ "root entry"
				@ "constructor %DEntry with path resolution",
			/ $forced $doc "explicitly specified empty path string for 1st \
				parameter would be treated as current working directory"
				@ "constructors %(FileInfo, DirState), class%Partition)"
		),
		/ %YSLib $=
		(
			* $revert(b440) "returned lvalue reference bound on temporary"
				@ "member functions %View::(GetLocationRef, GetSizeRef)"
				@ %UI.YWidgetView $since b569,
				// To eliminate warning: [-Wreturn-local-addr].
			+ DLD 'YB_ATTR(returns_nonnnull)' @ "allocation functions which \
				may throw" @ "'#if 0' code" @ %YSLib.Adaptor.YNew
		),
		/ %Helper $=
		(
			+ $doc "comments" @ "class %InputManager" @ %InputManager,
			/ DLDI "simplified function %LoadNPLA1File" @ %Initialization
				!^ "%std::ios_base::in"
		),
		/ %NPL $=
		(
			/ DLDI "simplified constructor template %SContext with iterator \
				pair" @ %SContext ^ "%std::bind",
			/ @ "function %operator>> for %Configuration" @ %Configuration $=
			(
				/ DLDI "simplified" ^ "%std::istreambuf_iterator"
					~ "%std::istream::get",
				* "missing set %std::ios_base::failbit on failure" $since b619
			)
		)
	),
	/ @ %Tools.Scripts $=
	(
		/ @ "install-sysroot.sh" $=
		(
			+ "function %SHB_EnsureDirectory"
				^ '$SHBuild_S1_SHBuild -xcmd,EnsureDirectory';
			/ "all 4 'mkdir -p'" -> 'SHB_EnsureDirectory'
		),
		+ 'C_CXXFLAGS_COMMON += -fno-threadsafe-statics' @ "%Toolchain.DS.mk"
			// See $2015-12 @ %Documentation::Workflow::Annual2015.
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %Mixin $=
			(
				/ DLDI "simplified metafunction %wrap_mixin_t",
				* $re_add(b644) DD "missing '!'" @ "end of '/*'" @ "multiline \
					Doxygen comments" @ "class template %mixin" $since b477
			),
			/ $re_ex(b655) "switched to workaround" @ 'YB_IMPL_GNUCPP == 50300'
				@ %Operators,
			+ 'ynothrow' @ "all 3 functions %(iswprint, iswspace, iswgraph)"
				@ %CWideCharacterType
		),
		* DLD "mixed EOL markers" @ %LibDefect.CMath $since b556 $=
			(/ $re_add(b431) "all EOL markers are normalized as CR+LF")
	),
	/ DLP "toolchain and library using" @ "platform %DS" $=
	(
		// See $2015-12 @ %Documentation::Workflow::Annual2015.
		^ $re_ex(b558) "updated devkitARM release 45"
			~ "devkitARM release 44" $dep_from %(YBase.YStandardEx.Operators,
				"%upopen" @ %YCLib.FileIO),
			// Now there are no %::popen definition provided by devkitARM.
		^ $re_ex(b558) "updated libnds 1.5.12" ~ "libnds 1.5.10"
	),
	/ %YReader $=
	(
		/ DD %ReadingList $=
		(
			- $design "redundant trailing '\t'"
				@ "function %operator ValueNode::Container" @ "class %Bookmark",
			* "invalid Doxygen comments" @ "%(IsAtBegin, IsAtEnd)"
				@ "class %ReadingList" $since b404
		),
		- "redundant ';' after in-class member function definition \
			%DualScreenReader::BufferReady" @ %DSReader
	)
),

b661
(
	/ %YBase.YStandardEx $=
	(
		* "friend function operator%==" @ "class template %nptr" @ %Pointer
			$since b660
			$= (/ $impl ^ "%std::equal_to" ~ "%std::equal"),
		/ @ "class template %lref" $=
		(
			+ 'lref(_type&&) = delete;'
			+ $doc "conformance to WG21 N4277 as %std::reference_wrapper",
		),
		/ %Functor $=
		(
			* "missing 'yconstfn' as specified for %void specializations"
				@ "standard functors" @ %Functor $since b588 $orig
				(@ %Functional $since b578),
			(
			- "functor %deref_comp" $dep_from
				("%FontCache::FaceMap" @ %YFramework.YSLib.Adaptor.Font);
			* $comp DD "missing '!'" @ "end of '/*'"
				@ "multiline Doxygen comments" @ "%deref_comp::operator()"
				$orig (@ %Utilities $since b315)
			)
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			- "member function %PenStyle::GetCache" @ %Service.TextBase,
			/ %Adaptor.Font $=
			(
				- "member function %Font::GetCache" $dep_from %Service.TextBase,
				/ "class %FontFamily" $=
				(
					(
					- "reference data member %Cache" @ "class %Typeface";
					- "1st parameter" @ "constructor"
					),
					(
					/ DLDI "alias %FaceMap" ^ "%lref<Typeface>" ~ 'Typeface*';
					/ $forced DLDI "functions %(operator-=, GetTypefacePtr)"
					)
				),
				/ @ "class %FontCache" $=
				(
					/ $forced DLDI "function %LookupFamily" $dep_from
						"constructor %FontFamily",
					(
					/ "alias %FaceSet" -> "%FaceMap" !^ "%ystdex::deref_comp",
					/ "protected data member %sFace" -> "mFace";
					/ $forced "return type" @ "function %GetFaces",
					/ $forced DLDI "private functions, functions \
						%(InitializeDefaultTypeface, LoadTypefaces)"
					),
					- DLDI "private functions for dynamic adding or removing \
						%FontFamily"
				),
				/ @ "class %Typeface" $=
				(
					(
					/ DLDI "constructor" $dep_from "%FontCache::LoadTypefaces",
					- "function %operator<" $dep_from "%Font::FaceMap"
					),
					- "function %operator==";
					- "data member %Path"
				)
			),
			* "wrong assertion" @ "member function %FileBox::GetPath"
				@ %UI.ComboList $since b639
				// The range shall be determined by list but not by view. This \
					is rare to be triggered.
		),
		/ @ "class %Logger" @ %YCLib.Debug $=
		(
			(
			/ "emptied operations" @ "platform %DS"
				@ "static function %DefaultSendLog";
			- "including <iostream>" @ "platform %DS"
				// This would reduced ~6 KiB in the output binary file for \
					%YReader.
			),
			- "screen initialization" @ "platform %DS"
				@ "functions %(SendLog, SendLogToFile)"
		),
		/ %Helper.Initialization $=
		(
			/ DLDI "simplified 21 instances of initalization trace"
				^ "%YTraceDe" $effective @ "functions %(LoadComponents, \
				CreateDefaultNPLA1File, HandleFatalError, LoadNPLA1File, \
				LoadConfiguration, InitializeInstalled, \
				InitializeSystemFontCache, Uninitialize") $dep_from
				%YCLib.Debug;
			/ $impl "simplified function %HandleFatalError"
		),
		- "function %InitConsole" @ %'Helper_(DS)'.DSMain
	),
	/ @ "function %::main" @ %YReader.Main $=
	(
		* "fatal error handling" @ "platform %DS" $since b604,
		/ $re_add(b633) $design "exception decription" -> '::main' ~ 'main'
	)
),

b660
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				* "assertion string" @ "function \
					%platform::FAT::LFN::WriteNumericTail" $since b658,
				/ "functions %(CreateHardLink, CreateSymbolicLink)" $=
				(
					^ "assertion to ensure nonnull parameters" $effective
						@ "platform %DS",
					/ "thrown error code" ^ "%std::errc::function_not_supported"
						~ "%std::errc::not_supported"
				),
				+ "function %ReadLink" $=
				(
					/ "threw %std::system_error with \
						%std::errc::function_not_supported" @ "platform %DS",
					/ DLDI ^ $dep_from ("%platform_ex::ResolveReparsePoint"
						@ %'YCLib_(Win32)'.MinGW32) @ "platform %Win32",
					/ DLDI ^ "%::(lstat, readlink)" @ !"platforms %(DS, Win32)"
				),
				/ $forced DLDI @ "platform %Win32" @ "member function \
					%HDirectory::GetNodeCategory" $dep_from
					("%DirectoryFindData" @ %'YCLib_(Win32)'.MinGW32),
				* "exceptions might be thrown" @ "'ynothrow' member function \
					%HDirectory::GetNodeCategory" @ %FileSystem $since b543 $=
				(
					/ $comp $impl @ "platform %Win32" $dep_from
						("%DirectoryFindData::GetNodeCategory"
						@ %'YCLib_(Win32)'.MinGW32),
					/ $impl "caught all exceptions" @ !"platform %Win32"
						^ 'CatchIgnore(...)'
						// Not quite the same to %Win32 since there is no \
							logging.
				),
				/ "specified following symbolic link for source"
					@ "function %CreateHardLink"
					$= (/ $impl ^ "%::linkat" @ !"platform %(DS, Win32)"
						$dep_from %NativeAPI)
			),
			+ "parameter 'bool = true' to allow specifying following link \
				behavior" @ "functions %(FetchNumberOfLinks, IsNodeShared)"
				@ %FileIO $=
			(

				/ $forced @ "platform %Win32" @ "%FetchNumberOfLinks" $dep_from
					("platform_ex::QueryFileLinks" @ %'YCLib_(Win32)'.MinGW32),
				/ $forced @ "platform %Win32" @ "%IsNodeShared" $dep_from
					("platform_ex::QueryFileNodeID" @ %'YCLib_(Win32)'.MinGW32),
				/ DLDI "simplified" @ !"platform %Win32"
			),
			/ $forced DLDI "functions %('FileDescriptor::Get*Time', \
				'GetFile*TimeOf')" $dep_from
				("%QueryFileTime" @ %'YCLib_(Win32)'.MinGW32),
			+ "function ::linkat" @ "platform %Android" @ %NativeAPI
		),
		/ @ %'YCLib_(Win32)'.MinGW32 $=
		(
			* "always failed" @ "functions %SetFileTime with path parameter"
				$since b651
				$= (/ $impl ^ "%AccessRights::GenericWrite"
					~ "%AccessRights::GenericRead"),
			/ @ "functions %MakeFile" $=
			(
				* "ambiguity call between %MakeFile#1 and %MakeFile#2 with 4 \
					arguments" $since b632
					$= (- "default argument" @ "%MakeFile#2"),
				/ "4th parameter ignored and always treated as \
					%FileAttributesAndFlags::NormalAll" @ "%MakeFile#4" $since
					b632,
				+ "4 inline overloaded funtions"
			),
			+ "2nd parameter 'bool = {}' to allow specifying following reparse \
				point behavior" @ "functions \
				%(QueryFileLinks, QueryFileNodeID) with path parameter",
			* DD "wrong directive '\breif' used" ~ '\brief' @ "Doxygen comments"
				@ "function %GetErrnoFromWin32" $since b622,
			/ @ "all 2 functions %ConvertTime" $=
			(
				/ DLDI "simplified" ^ "%ystdex:throw_error"
					~ "throw-expression";
				/ "thrown error code" ^ "%std::errc::not_supported" ~ "%ENOSYS"
			),
			+ "function %ResolveReparsePoint",
			- "UTF-8 string dependency on non-conversion routines which has \
				wide string replacement" $=
			(
				// User code should call corresponding wide string versions \
					and 'UTF8ToWCS' on arguments, if needed.
				- "constructor %DirectoryFindData with ('const char*', \
					'string_view') respectively",
				- "functions %(QueryFileTime, SetFileTime) with 'const char*' \
					parameter"
			),
			/ @ "class %DirectoryFindData" $=
			(
				(
				/ $doc "explicitly guaranteed directory name invariant";
				+ "assertion to ensure directory name invariant"
					@ "function %GetDirName";
				/ $impl "simplified assertions"
					@ "functions %(GetNodeCategory, Read)" ^ "%GetDirName"
				),
				/ DLDI "simplified function %GetNodeCategory" ^ 'string_view'
					~ "%wstring deduced from 'auto'",
					// Possibly a bit more efficient of cleanup of trailing \
						backslash.
				* "exceptions might be thrown" @ "'ynothrow' member function \
					%DirectoryFindData::GetNodeCategory" $since b658 $orig
					(@ "member function %HDirectory::GetNodeCategory"
					@ %FileSystem $since b543)
					$= (/ $impl "caught all exceptions" ^ "%FilterExceptions")
			)
		),
		/ %YSLib.Adaptor.Font $=
		(
			/ @ "class %FontCache" $=
			(
				/ DLDI "simplified function %GetTypefacePtr" !^ "%YB_UNLIKELY",
				+ "function %LookupFamily",
				+ $doc "explicitly invariant to ensure nonnull mapped family \
					pointer" @ "alias %FontCache::FamilyMap" $dep_from
					"constructor %Typeface"
			),
			/ DLDI "simplified constructor %Typeface" ^ $dep_from
				"%FontCache::LookupFamily"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Functor $=
		(
			/ @ "standard functors" $=
			(
				/ DLDI "simplified macro replacement",
				* "total order not kept on %(greater, less, greater_equal, \
					less_equal) for pointers" $since b588 $orig
					(@ %Fuctional $since b578)
					$= (+ DLDI "specializations for pointer types"
						^ "%std::(greater, less, greater_equal, less_equal)")
			),
			- "functors %(deref_op, const_deref_op)",
				// Function template %ystdex::constfn_addressof should be used \
					instead in general. Overloaded %operator& should be rare.
			- "functor %deref_str_comp",
				// Newly added function template %ystdex::ntctscmp should be \
					used instead in general. Custom order is rare and confusing.
			/ "functor %addressof_op" $=
			(
				+ "default template argument 'void'",
				+ "specialization for 'void' with member function template \
					%operator()",
				/ "member %operator()" $=
				(
					/ $impl ^ $dep_from
						("%ystdex::constfn_addressof" @ %AddressOf);
					+ 'yconstfn'
				)
			)
		),
		* "missing including %Utilities for %is_nothrow_swappable" @ %ScopeGuard
			$since b588,
		/ "supported deterministic comparison" @ "class template %nptr"
			@ %Pointer $=
		(
			/ "friend function %operator(==, <)"
				^ "standard functor respectively" ~ ('==', '<');
				// Now '<' guarantees it is totally-ordered. See ISO C++ \
					[comparisons]. Note this is not necessary to provide \
					specific result for '==' as '<', etc. However, the \
					behavior about template specialization would be consistent.
			* $comp "wrong result" @ "friend function %operator<" $since b600
		),
		/ %CString $=
		(
			+ "function template %ntctscmp with 2 length parameters"
				^ "%std::lexicographical_compare",
			/ $doc "group %NTCTSUtil" $=
			(
				+ '\ingroup nonmodifying_algorithms',
				+ '\ingroup string_algorithms',
				+ "details"
			)
		),
		(
		+ %AddressOf;
		/ ("metafunction %has_overloaded_addressof" @ %TypeOperation,
			"function templates %constfn_addressof" @ %Memory) >> %AddressOf;
		* "invalid 'constfn'" @ "constructor %lref" @ %Ref $since b588 $orig
			(@ %Functional $since b554) ^ "%ystdex::constfn_addressof"
			~ "%std::addressof",
		/ DLDI "function template %constructor" ^ "%ystdex::constfn_addressof"
			~ "%std::addressof"
		),
		/ %TypeOperation $=
		(
			- DLDI "redundant diagnostic pragma",
			/ DLDI "simplified details traits",
			/ "metafunction %has_common_nonempty_virtual_base"
				-> "%have_common_nonempty_virtual_base"
				// Now only differenct types can be considered to have common \
					virtual bases.
		),
		/ %Cast $=
		(
			* "missing including %TypeOperation for traits" $since b650,
			/ $forced DLDI "%general_cast" ^ $dep_from
				("%have_common_nonempty_virtual_base" @ %TypeOperation)
		)
	),
	/ %Test.YBase.Main $=
	(
		+ "6 test cases" ^ "%ystdex::has_nonempty_virtual_base",
		+ "5 test cases" ^ ("%ystdex::have_common_nonempty_virtual_base"
			$dep_from %YBase.YStandardEx.TypeOperation)
	)
),

b659
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Host $=
			(
				+ "assertion to ensure nonnull string pointer in parameter"
					@ "all 4 constructor %Exception",
				/ "checked for conversion to %string_view" @ "parameter"
					@ "function, function template %DecodeArg"
					@ "platform %Win32" ~ "checked for conversion to %string",
				* $lib $impl "missing 'using YSLib::string;'" @ "non-headers"
					$since b593,
					// To allow %YSLib::string not same to %platform::string.
				+ $lib $impl 'using platform::string_view;' @ "non-headers"
					// To allow %YSLib::string_view not same to \
						%platform::string_view.
			),
			/ %XCB $=
			(
				(
				+ 'using platform::string_view;';
				/ "constructor %XCBException" -> "2 constructors with \
					'const char*' and 'string_view' parameters",
				),
				- $revert(b593) 'using platform::string;'
					// Since only %YSLib::string can determine whether it is \
						ambiguous.
				+ $lib $impl 'using platform::string_view;' @ "non-headers",
					// To allow %YSLib::string_view not same to \
						%platform::string_view.
				* $lib $impl "missing 'using YSLib::string;'" @ "non-headers"
					$since b563,
					// To allow %YSLib::string not same to %platform::string.
				/ @ "constructor#2 %Atom" $=
				(
					/ "2nd parameter type 'const string&'" -> 'string_view',
					+ "assertion to ensure nonnull data pointer of string view",
					/ 'ynothrow' -> 'ynothrowv'
				),
				/ DLDI "simplified making atom" ^ 'string_view' ~ 'string'
					// Also avoided exceptions in this particular call.
			),
			/ @ "class %Logger" @ %Debug $=
			(
				/ "parameter type 'const string&'" @ "function %DoLog"
					-> 'string_view',
				/ DLDI "private function pamameter type" ^ 'string_view'
					~ 'const string&'
			),
			/ %HostedGUI $=
			(
				/ @ "class %Clipboard" @ "platform %Win32" @ $=
				(
					/ "parameter type 'const YSLib::string&'"
						@ "function %Send#1" -> 'string_view'
					/ "parameter type 'const YSLib::String&'"
						@ "function %Send#2" -> 'u16string_view'
				),
				* $lib $impl "missing 'using YSLib::string;'" @ "non-headers"
					$since b612,
					// To allow %YSLib::string not same to %platform::string.
				+ $lib $impl 'using platform::string_view;' @ "non-headers"
					// To allow %YSLib::string_view not same to \
						%platform::string_view.
			),
			/ "2nd parameter type 'const string&'" @ "parameter list"
				@ "2nd parameter" @ "member function %EntryData::FillNewName"
				@ "namespace %platform::FAT" @ %FileSystem -> 'string_view'
		),
		/ %NPL $=
		(
			/ @ "namespace %NPL" @ %Lexical $=
			(
				(
				+ 'using YSLib::string_view;';
				/ @ "functions %(CheckLiteral, Deliteralize, Escape, \
					EscapeLiteral, EscapeXML, Literalize, Decompose, \
					UnescapeContext::IsHandling)" $=
				(
					/ "1st parameter type 'const string&'" -> 'string_view',
					+ "assertion to ensure nonnull data pointer of string view"
				)
				),
				+ 'ynothrowv' @ "function %CheckLiteral",
				/ @ "function %Deliteralize" $=
				(
					/ "return type" -> 'string_view' ~ 'string';
					+ 'ynothrowv' $dep_from "%CheckLiteral"
				)
			),
			/ @ "function %Analyze#3" @ %NPL.SContext $dep_from
				("%NPL::string_view" @ %Lexical) $=
			(
				/ "2nd parameter type 'const string&'" -> 'string_view',
				+ "assertion to ensure nonnull data pointer of string view"
			),
			/ $forced DLDI @ "functions %(MapNPLALeafNode, ConvertDocumentNode)"
				@ %NPLA1 $dep_from ("return type" @ "%Deliteralize" @ %Lexical)
		),
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ "parameter type 'const char*'"
					@ "function %FetchEnvironmentVariable" @ %YCoreUtilities
					-> 'const char*',
				/ %ValueNode $=
				(
					/ @ "function %IsPrefixedIndex" $=
					(
						/ "1st parameter type 'const string&'"
							-> 'string_view',
						+ "assertion to ensure nonnull data pointer of string \
							view",
						/ DLDI "simplified string creation"
					),
					* "wrong result when the size is not fit for 4 decimal \
						digits" $since b599
						$= (/ "threw %std::invalid_argument when the size is \
							not less than 10000")
				)
			),
			(
			/ "overloded function templates %(PrintLine, PrintString, PutLine, \
				PutString) with string class parameter passing string iterators"
				@ %Service.TextRenderer ^ "%ystdex::(string_begin, string_end)";
			/ $comp "null characters embedded in string would not treated as \
				end of string" @ ("all functions %(DrawClippedText, DrawText)"
				@ %Service.TextRenderer;
				"member function %MLabel::DrawClippedText" @ %UI.Label)
			),
			/ %UI.Loader $=
			(
				/ "function %ParseRect" $=
				(
					/ DLDI ^ ("%istringstream::exceptions", "directly parsed"),
					+ "trace with level 'Warning' on failure"
				),
				/ @ "member function %WidgetLoader::LoadUILayout" $=
				(
					/ "parameter type 'const string&'" -> 'string_view',
					/ DLDI "simplified" ^ "%NPL::SContext::Analyze"
				),
				/ "2nd parameter type 'const string&'"
					@ "constructor %DynamicWidget" -> 'string_view',
				/ @ "function %CheckChildName" $=
				(
					/ "parameter type 'const string&'" -> 'string_view',
					+ "assertion to ensure nonnull data pointer of string view"
				),
				/ "constructor %WidgetNotFound" -> "2 constructors with 1st \
					parameter 'string_view' as well as 2nd parameter \
					'const char*' and 'string_view' respectively"
			),
			+ 'YB_NONNULL(1)' @ "function %VerifyDirectory with \
				'const char*' parameter" @ %Service.FileSystem,
			+ "aliases %(HaveSameContents, IsNodeShared, CreateHardLink, \
				CreateSymbolicLink) from namespace %platform"
				@ "namespace %YSLib::IO" @ %Adaptor.YAdaptor
		),
		/ "functions %(InstallFile, InstallDirectory, InstallHardLink, \
			InstallSymbolicLink, InstallExecutable)" @ %Helper.ShellHelper
			-> ("overloded functions with 'const char*' and 'const string&' \
			parameters" @ %NPL.Dependency $dep_From %YSLib.Adaptor.YAdaptor)
	),
	/ %YBase.YStandardEx.String $=
	(
		/ @ "string erasure operations" $=
		(
			+ DLDI 'yconstfn'
				@ "specializatioin for %std::basic_string like instances" $=
			(
			+ DLDI "assertion to ensure no exception would be throw";
			+ DLDI 'ynothrowv'
			),
			* DLDI ("missing '-1' handling" @ "%erase_left", "assertion"
				@ "%erase_right") @ "specialization for %basic_string_view \
				like instance" $since b640 $dep_to "string erasure length check"
		),
		* $comp "assertion failure for %string_view like instances for %rtrim"
			$since b640 $dep_from "string erasure length check",
		/ @ "function templates %(ltrim, rtrim, trim)" $=
		(
			(
			+ $doc "explicit requirements about string operations and exceptions";
			+ 'ynothrowv' @ "overloaded function template string parameters"
			),
			/ 'inline' -> 'yconstfn'
		)
	),
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			/ $forced DLDI $dep_from "function %FetchEnvironmentVariable"
				@ %YFramework.YSLib.Core.YCoreUtilities,
			+ "'-cmd,' option with commands %(EnsureDirectory, InstallFile, \
				InstallDirectory, InstallHardLink, InstallSymbolicLink, \
				InstallExecutable) available" $dep_from %NPL.Dependency $dep_to
				"SHBuild installation commands support"
		)
		/ $impl %RevisionPatcher.Main $=
		(
			/ DLD "simplified" ^ "%string_view",
			+ "2 assertions to ensure enough size for string access"
		),
		/ "all 4 stage 1 installation functions 'SHB_*'" @ "%install-sysroot.sh"
			^ "stage 1 SHBuild commands"
			~ ("shell functions" @ "SHBuild-common%.sh" @ %Scripts) $dep_from
			"SHBuild installation commands support";
	)
),

b658
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ @ "namespace %platform" @ %FileSystem $=
			(
				(
				+ 'enum class NodeCategory : std::uint_least32_t';
				/ "enum class %NodeCategory, 'DefBitmaskEnum(NodeCategory)'"
					>> %FileIO
				),
				/ DLDI "simplified member function %HDirectory::GetNodeCategory"
					$=
				(
					/ !"platform %Win32" ^ ("%CategorizeNode" @ %FileIO)
					(
					/ "platform %Win32"
						^ ("%platform_ex::DirectoryFindData::GetNodeCategory"
						@ %'YCLib(Win32)'.MinGW32);
					+ $comp "support for %NodeCategory::Unknown result"
					)
				),
				+ "assertion to ensure the alias can store the prefix and \
					converted value" @ "function %FAT::LFN::WriteNumericTail"
			),
			/ %FileIO $=
			(
				+ "function %CategorizeNode" $dep_from "%NodeCategory",
				+ "function %GetCategory" @ "class %FileDescriptor" $=
				(
					// Note for directory verfication, using %DirectorySession \
						may be more efficient. Since there is no need to check \
						mode, this is easier to be optimized in the file \
						system implementation.
					+ DLDI @ "platform %Win32" $dep_from
						("%platform_ex::CategorizeNode"
						@ %'YCLib(Win32)'.MinGW32),
					+ DLDI @ "platform %Win32" $dep_from "%CategorizeNode"
				),
				* "initialized '0'" @ "constructor %FileDescriptor with \
					'nullptr_t' parameter" $since b629,
				* $comp "files of paths with same first character are \
					considered same" @ "functions %(IsNodeShared; \
					HaveSameContents) with path parameters" $since b657
					$dep_from (%ntctscmp @ %YBase.YStandardEx.CString),
				/ DLDI @ !"platform %Win32" @ "functions %IsNodeShared",
				/ @ "functions %HaveSameContent" $=
				(
					* "possible %errno polluted by node comparison" $since
						b638
						$= (/ DLDI "cleared %errno between %IsNodeShared call \
							and buffer creation"),
					(
					/ "merged overloded function for %string"
						-> "overloded function for 'const char*'";
					+ "%mode_t" @ "overloaded function with path parameters"
					),
					(
					+ "2 name parameters to be used in exceptions"
						@ "overloaded function with %UniqueFile parameters";
					/ DLDI "overloaded function with paths"
						^ "overloaded function with %UniqueFile parameters"
					),
					* "missing directory check" $since b636 ^ $dep_from
						"%FileDescriptor::GetCategory"
						// It is implementation-defined to open the stream of \
							a directory file. So the result was unspecified.
				),
				/ "parameter 'const u16string&'" @ "function %MakePathString#4"
					-> 'u16string_view',
				- "trailing '.'" @ "exception message" @ "fetching time"
					@ "platform %Win32"
			),
			/ @ "constructor#4 %WindowClass" @ "platform %Win32" @ %HostedGUI $=
			(
				/ "parameter type 'const wstring&'" -> 'wstring_view',
				+ "assertion to ensure nonnull data pointer of string view"
			),
			/ @ ("class %AndroidLogSender" @ "platform %Android", "static \
				member function %Logger::FetchDefaultSender") @ %Debug $=
			(
				/ "parameter type 'const string&'" -> 'string_view',
				+ "assertion to ensure nonnull data pointer of string view"
			),
			/ %Host $=
			(
				/ @ "function %FetchCommandOutput" @ %Host $=
				(
					/ "1st pamameter type 'const string&'"  -> 'const char*';
					+ 'YB_NONNULL(1)'
				),
				/ @ "function %FetchCachedCommandResult" $=
				(
					/ $forced DLDI $dep_from "%FetchCommandOutput",
					- "trailing '.'" @ "traced exception message"
				)
			)
		),
		/ %'YCLib(Win32)' $=
		(
			/ %MinGW32 $=
			(
				+ "2 functions %CategorizeNode with \
					'const ::WIN32_FIND_DATAW&' and 'UniqueHandle::pointer' \
					parameter respectively";
				+ "function %GetNodeCategory" @ "class %DirectoryFindData",
				* "wrongly treated file size as file index"
					@ "functions %QueryFileNodeID" $since b638,
				/ @ "class %DirectoryFindData" $=
				(
					/ "parameter type 'const string&'" @ "constructor#2"
						-> 'string_view',
					/ "parameter type 'const wstring&'" @ "constructor#3"
						-> 'wstring_view'
				),
				- "overloaded function %ExpandEnvironmentStrings with \
					'const wstring&' parameter",
				/ @ "function %ExpandEnvironmentStrings with character pointer \
					parameter" @ %Registry $=
				(
					- "2nd parameter" @ "function %ExpandEnvironmentStrings",
						// The length is actually useless and misleading.
					+ ("explicitly requiring parameter to be nonnull by \
						assertion"; 'YB_NONNULL(1)'),
					/ DLDI "simplified" ^ "%YCL_CallWin32F"
				),
			),
			/ "1st parameter type 'const wstring&'" @ "member function \
				%RegistryKey::GetRawValue#2" @ %Registry -> 'wstring_view'
		),
		/ %Helper $=
		(
			/ %ShellHelper $=
			(
				* "function %InstallFile threw exceptions if destination file \
					is not existed" $since b657,
				* $comp "functions %(IstanllFile; InstallTree) wrongly skipped \
					for paths with same first character" $since b657 $dep_from
					("function %platform::HaveSameContents" @ %YCLib.FileIO),
				+ "check hardlink source and threw %std::invalid_argument if \
					source is a valid directory before creation hardlink"
					@ "function %InstallHardLink",
				/ '#include <ysbuild.h>' -> "including headers only used"
					@ "header" -> "simplified shell helper header",
					// To make the use of header cleaer and reduce some build \
						performance overhead.
				/ "1st parameter 'const string& = {}'" -> 'string_view = ""'
					@ "class %DebugTimer"
			),
			/ "traced exception message" @ "exception handler"
				@ "function %LoadComponents" @ %Initialization
		),
		+ 'const' @ "parameter type 'std::exception&'" @ ("parameter list"
			@ "type argument" %ExceptionTracer), "functions \
			%(TraceExceptionType, TraceExceptionType)") @ %YSLib.Core.YException
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %CString $=
			(
				* $re_ex(b604) "missing check termination of string" $since b329
					$orig (@ "function template %sntctscmp" $since b245),
				/ DLDI "simplified function template %ntctsicmp",
				+ "3 overloaded functions %ntctscmp without length parameter \
					for %(char, wchar_t, uchar)"
			),
			+ "assertion to ensure nonnull data pointer"
				@ "function templates %(operator std::basic_string, to_string)"
				@ "class template %basic_string_view" @ %StringView
		),
		+ $doc DLD "notes for LWG 1130" @ "comments" @ "header"
			@ %LibDefect.Exception
	),
	/ $forced DLDI "including headers" @ %YReader.Shells $dep_from
		"simplified shell helper header"
),

b657
(
	/ %YFramework $=
	(
		/ %'YCLib_(DS)'.DSIO $=
		(
			(
			/ @ "class %AllocationTable" $=
			(
				(
				+ "check at end to ensure returned cluster valid"
					@ "%AllocationTable";
				+ "function %TryLinkFreeCleared"
				),
				+ $doc "Doxygen comments to explicitly warn about missing of \
					transaction semantics",
				(
				/ "function %IsValidCluster" => "%IsValid";
				+ "function %IsFreeOrValid"
				),
				/ @ "function %TrimChain" $=
				(
					(
					/ "accepted 2nd parameter value more 1 than old value";
						// Removing '--' on parameter before iteration \
							effectively means input parameter should be minus \
							1. than before to keep compatibility.
					- DLDI "handling of 0 case"
						// This is different with %::_FAT_fat_trimChain in \
							libfat. If the length is 0, it should have made \
							call directly to %ClearLinks instead of %TrimChain.
					),
					(
					/ 'ynothrow' -> 'ythrow(std::system_error)';
					+ "check next cluster in iteration and throwing \
						%std::system_error with %std::errc::io_error if failed"
					)
				)
			),
			/ "all linking and clearing free cluster" ^ ($dep_from
				"%AllocationTable::TryLinkFreeCleared")
				~ "%Partition::LinkFreeClusterCleared",
				$effective "%Partition::(ExtendPosition, MakeDir)";
			* $comp "possible trying to writing invlaid cluster on linking and \
				clearing free cluster" $since b611
				// Validity should be checked before filling.
			),
			/ @ "class %Partition" $=
			(
				/ "function %LinkFreeClusterCleared"
					-> "%AllocationTable::TryLinkFreeCleared" $dep_from
					"all linking and clearing free cluster",
				* "%Unlink throw %std::system_error with %std::errc::io_error \
					on success but ignored error on clearing links failure"
					$since b611,
				/ @ "function %IncrementPosition" $=
				(
					/ "treated invalid cluster as EOF cluster",
					+ $comp "cluster component of parameter as invariant"
				),
				+ "indirect assertion" @ "function %ExtendPosition" $dep_from
					"assertion for invalid clusters",
				/ "function %EntryGetCluster" -> "%TryGetClusterFromEntry"
					^ $dep_from "%AllocationTable::IsFreeOrValid",
				/ "allowed %StatFromEntry to report when read cluster is \
					invalid" $=
				(
					/ 'ynothrow' -> 'ythrow(std::system_error)';
					+ $forced "throwing %std::system_error with \
						%std::errc::io_error on invalid cluster for \
						%st_ino found" ^ "%TryGetClusterFromEntry"
				),
				/ @ "class %FileInfo" $=
				(
					/ $forced DLDI "simplified cluster number argument"
						@ "function %Truncate" $dep_from
						"AllocationTable::TrimChain",
					/ "merged function %Shrink" -> "function %Truncate"
				),
				/ "merged function %Sync"
					-> "member function %FileInfo::SyncToDisc"
			),
			/ $re_ex(b634) DLDI "simplified member function \
				%AllocationTable::ClearLinks" ^ "%ystdex::exchange",
			* "%Partition::Unlink throw %std::system_error with \
				%std::errc::io_error on success but ignored error on clearing \
				links failure" $since b611,
			(
			/ @ "member functions %(AllocationTable::QueryNext, \
				Partition::IncrementPosition)" $=
			(
				/ 'ynothrow' -> 'ynothrowv',
				+ "assertion to ensure parameter is valid when it is allocated"
			),
			/ $forced DLDI @ "functions %(AllocationTable::(ClearLinks, \
				QueryLast, TrimChain), FileInfo::TrySeek)" ^ ($dep_from \
				"%AllocationTable::IsValid") ~ "%Clusters::IsFreeOrEOF",
			+ $forced "throwing %std::system_error with %std::errc::io_error"
				@ "constructor %DEntry with leaf action parameter, member \
				function %Partition::Unlink"
				^ ($dep_from "%Partition::TryGetClusterFromEntry");
			+ $forced "check for invalid cluster"
				@ "member function %Partition::CheckPositionForNextCluster"
				^ ($dep_from "%IsFreeOrValid");
			* $comp "missing invalid cluster check" $since b623 $orig
				(@ "libfat" $since $before b132) $dep_from
				"%Partition::(IncrementPosition, ExtendPosition, \
				StatFromEntry)"
			),
			/ DLDI "simplified constructor %DEntry with leaf action parameter"
				^ $dep_from ("%(LFN::ValidateName, EntryData::FillNewName)"
				@ %YCLib.FileSystem)
		),
		/ %YCLib $=
		(
			/ @ "platform_ex::FAT" @ %FileSystem $=
			(
				/ @ "namespace %LFN" $=
				(
					+ "function %ValidateName",
					* "redundant 'YF_API'" @ "definition"
						@ "function %WriteNumericTail" $since b608
				),
				+ "function %FillNewName" @ "class %EntryData"
			),
			/ @ "all 2 functions %IsNodeShared with character pointer \
				parameters" @ %FileIO $=
			(
				/ 'ynothrow' -> 'ynothrowv',
				+ $impl "assertions" ^ "%Nonnull",
				+ $impl "check for string equality before calling native API"
			)
		),
		/ %YSLib.Service.FileSystem $=
		(
			+ "function template %TraverseTree";
			/ DLDI "simplified function template %CopyTree" ^ "%TraverseTree"
		),
		/ $impl %Helper.ShellHelper $=
		(
			/ "skipped copy if file is same" @ "function %InstallFile"
				^ "%platform::HaveSameContents",
			/ "function %InstallDirectory" ^ ($dep_from ("%IO::TraverseTree"
				@ %YSLib.Service.FileSystem), "%InstallFile") ~ "%IO::CopyTree"
		)
	),
	* $re(b656) $comp "strict POSIX.1-2013 compatibility" @ "platform %DS"
		$since b611 $=
	(
		* "wrong %EIO set on success and ignored on failure %::unlink and \
			variants" $dep_from "%Partition::Unlink"
			@ %YFramework.'YCLib_(DS)'.DSIO
		* "missing setting %EIO for %::ftruncate and variants" $dep_from
			"%Partition::Trucate"
	),
	/ %YBase.YStandardEx $=
	(
		/ %Functional $=
		(
			* "no optimized order would cause probable ambiguity" @ "class \
				template %expand_proxy" $since b634 $orig (@ $impl $since b448)
				$= (/ "using-declaration of base class %call"
				-> "static function template %call");
			* "possible ambiguity for zero and one argument"
				@ "call of condition function object"
				@ "function template %retry_on_cond" $since b634
		),
		/ "parameter" @ "function template %raise_exception" @ %Exception
			-> '_type&&' ~ 'const _type&';
			// As 'std::throw_with_nested'.
	),
	/ %Tools.SHBuild $=
	(
		+ DLDI 'YB_NONNULL(1)' @ "exception filter handler" @ %Main,
		* $doc "out-of-date contents" @ %Readme $since b539 $=
		(
			* "description of return values" $since b539,
			* "build and test" $since b546
		)
	)
),

b656
(
	/ %YBase $=
	(
		/ @ "class template %path" @ %YStandardEx.Path $=
		(
			/ @ "specifying parameter is parent node" @ "%operator/= with \
				string parameter" $=
			(
				* "missing check self node" $since b600 $orig (@
					"%Path::operator/=" @ %YSLib.Core.YFileSystem $since b152),
				* "missing ignoring parameter when root path could not be \
					reduced" $since b600 $orig (@ %YSLib.Core.YFileSystem
					$since b409) $dep_to "wrong root reduction"
			),
			* "missing ignoring absolute path parameter"
				@ "%operator/= with path parameter" $since b600 $orig
				(@ %YSLib.Core.YFileSystem $since b410)
		),
		/ %Functor $=
		(
			* "all standard operator functors except %operator<" $since b578 $=
			(
				* "returned %bool except to 'void' specializations",
				* "as '<'"
			),
			+ "standard operator functors %(negate, logical_and, logical_or, \
				logical_not, bit_and, bit_or, bit_xor, bit_not)"
		),
		* "wrong macro detection for GNU C++" @ ("%(yfname, yfsig)" %YDefinition
			$since b638, $impl %YStandardEx.Operators $since b655)
			$= (/ 'YCL_IMPL_GNUCPP' -> 'YB_IMPL_GNUCPP')
	),
	* $comp "reduced parent path of root like '/../../' shown" @ "current path"
		@ %YReader.ShlExplorer @ !"platforms %(DS, Win32)" $since b654 $dep_from
		"wrong root reduction",
		// Note b654 would not refresh the current path if only switching \
			'..', but b655 would.
	/ %YFramework $=
	(
		/ %'YCLib_(DS)'.DSIO $=
		(
			(
			/ "merged 2 constructor templates, 2 constructor with %LeafAction \
				parameter, function %AddTo" -> "constructor function"
				@ "class %DEntry" ^ "%ystdex::ref_opt" $=
			(
				/ "merged path resolution",
				/ $forced DLDI ^ $dep_from "%Partiton::IncrementPosition",
				/ DLDI "simplified %retry_on_cond call"
					^ ("%ystdex::logical_not" @ %YBase.YStandardEx.Functor)
			);
			/ "member function %Partition::(MakeDir, Rename), constructor \
				%FileInfo" ^ "merged check on creation"
			),
			(
			/ $impl "treated allocation failure as conversion failure"
				~ "%ENOMEM" @ "member function %Partition::EntryExists";
			/ $forced DLDI "simplified constructor %DEntry, member function \
				Partition::EntryExists" $dep_from %YCLib.FileSystem
			),
			/ DLDI "simplified by merging throwing %std::system_error with \
				%std::errc::io_error",
			/ @ "class %Partition" $=
			(
				+ "%Flush call at end" @ "function %RemoveEntry",
				(
				/ "return type" @ "function %IncrementPosition"
					-> $dep_from "%ExtensionResult" ~ 'bool';
				/ $impl "simplified %ExtendPosition" ^ "%IncrementPosition",
				/ $forced DLDI "function %RemoveEntry"
				)
			),
			/ @ "class %FileInfo" $=
			(
				/ @ "function %SyncToDisc" $=
				(
					/ "allowed throwing %std::system_error with \
						%std::errc::io_error",
					/ "return type" -> 'void' ~ 'int' $dep_to
						"file synchronization return value";
					* "wrong 'ynothrow' since call to underlying \
						%Partition::Sync may throw" $since b611
				),
				* "missing throwing %std::system_error with \
					%std::errc::io_error" @ "appending error"
					@ "member function %FileInfo::TryWrite" $since b611 $dep_to
					"missing setting appending error"
			),
			/ $forced DLDI ("destructor %Partition", "%devoptab_t routine \
				%close_r") $dep_from "file synchronization return value",
			(
			/ "constructor %DirState accepted partition and path without root \
				parameters";
			/ $impl "simplified %devoptab_t routine %opendir_r"
			),
			+ "enum class %ExtensionResult",
			/ $forced $impl "constructor %DEntry#2" ^ $dep_from
				"%Partition::ExtendPosition" ~ "%Partiton::IncrementPosition",
				// It is not actually used.
			/ $forced DLDI "member function %DEntry::QueryNextFrom" $dep_from
				"%Partiton::IncrementPosition"
				// %Partition::RemoveEntry is not allowed to throw this \
					condition.
		),
		/ "parameters" @ "member function %FAT::EntryData::FindAlias"
			@ %YCLib.FileSystem -> 'string_view' ~ 'const char*, size_t',
	),
	* $re(b655) $comp "strict POSIX.1-2013 compatibility" @ "platform %DS"
		$since $before b132
		$= (* "missing setting %EIO for %::write and variants when appending \
			witout enough space" $dep_from "missing setting appending error"),
	+ $dev $repo "pattern glob '*.VC.opendb'" @ "file %.hgignore"
		// For Microsoft VC++ 2015 Update 1.
),

b655
(
	/ %YBase.YStandardEx $=
	(
		/ %Operators $=
		(
			/ $dev $impl "stopped early for %void parameters for ADL binary \
				operands",
			/ "worked around to disable ADL binary operands overloadings"
				@ 'YCL_IMPL_GNUCPP < 50000'
				// Not tested for G++ 5.
		),
		/ %Optional $=
		(
			* "missing returning value" @ "function %operator->#1"
				@ "class template %optional" $since b591,
			+ "function templates %(make_optional_inplace; 2 ref_opt)"
		)
	),
	/ %YFramework $=
	(
		/ %'YCLib_(DS)'.DSIO $=
		(
			+ "enum class %LeafAction";
			/ "constructor with path resolution" @ "class %DEntry"
				-> "2 constructors" ^ $dep_from "%LeafAction" $=
			(
				/ "treated empty path as root entry" ~ "current working \
					directory" $dep_to "empty directory path handling",
				+ "optional throwing exception when action is specified as \
					%LeafAction::ThrowExisted and entry is existed",
				+ "optional throwing exception when action is specified as \
					%LeafAction::EnsureDirectory and directory entry is \
					nonexisted"
			),
			/ DLDI "simplified member function %Partition::ChangeDir, \
				private constructor %DEntry, constructor %DirState#2"
				^ "%LeafAction::EnsrueDirectory",
			/ @ "class %Partition" $=
			(
				/ DLDI "simplified functions %(MakeDir, Rename)"
					^ "%LeafAction::ThrowExisted",
				/ @ "function %Rename" $=
				(
					+ "direct assertion to ensure nonnull new path",
						// To check first even if the 1st parameter is an \
							empty string.
					/ "checked empty string to throw %std::system_error \
						with %std::no_such_file_or_directory" $dep_to
						"check empty new name"
				)
			),
			/ 'ynothrow' @ "function %FetchPartitionFromPath" -> 'ynothrowv',
			/ $forced $doc "explicitly specified empty path string for 1st \
				parameter would be treated as root directory"
				@ "constructors %(FileInfo, DirState), class%Partition)"
				$dep_from "empty directory path handling",
			/ @ "device table handling" $=
			(
				* $impl "wrong 'ynothrowv' for locking failure" $since b611,
					// When locking failed and %YB_Use_StrictNoThrow used it \
						can call %std::terminate.
				* $impl "wrong 'ynothrowv' for error conditions" $since b637,
					// When expected error occurred and %YB_Use_StrictNoThrow \
						used it can call %std::terminate.
			),
			+ "set %errno to %ENOENT if directory name is an empty string"
				@ "%devoptab_t routine %opendir_r" $dep_to
				"check empty directory name",
			+ "assertion to ensure path is not an empty string" @ "constructor \
				%DirState#2" $dep_from "check empty directory name" $dep_to
				"directory state empty path assertion"
		),
		/ @ "function %SendDebugString" @ "platform %Win32" @ %YCLib.Debug $=
		(
			+ "parameters for logger";
			+ "logged thread id and level information"
		),
		/ $forced DLDI @ "platform %Win32" @ "function %InitializeEnvironment"
			@ %Helper.Initialization $dep_from %YCLib.Debug;

	),
	/ @ "platform %DS" $=
	(
		(
		/ $comp "pathnames without trailing slash(es) handled as if one slash \
			is at end for root" @ "%::(opendir, mkdir, chdir) and variants"
			$dep_from "empty directory path handling",
			// See https://github.com/devkitPro/libfat/issues/7.
		* $comp "missing path for 'fat:/' directory session causing nothing \
			shown in file box" @ $since b654
		),
		* $re_ex(b642) "strict POSIX.1-2013 compatibility" $since $before b132
			$=
		(
			* "nonconforming behavior treating empty path parameters"
				@ "new path for %::rename and variants" $dep_from
				"check empty new name"
				$= ("set %errno to %ENOENT" ~ "set %errno to %EXDEV")
			* $comp "nonconforming behavior treating empty path parameters"
				@ "%::opendir and variants" $dep_from
				"check empty directory name"
				$= ("set %errno to %ENOENT"
					~ "treating empty string path as current working directory")
		)
	),
	* "current file not updated when file box list reloaded"
		@ %YReader.ShlExplorer $since b634
),

b654
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				/ %YAdaptor $=
				(
					+ 'using platform::FetchRootNameLength;',
					+ 'using platform::ThrowFileOperationFailure;' $dep_from
						("%ThrowFileOperationFailure" @ %FileIO)
				),
				/ DLD @ "class %Image" @ %Image $=
				(
					/ 'YB_NONNULL(1)' @ "constructor with %BitmapPtr parameter"
						@ %Image -> 'YB_NONNULL(2)'
					+ 'YB_NONNULL(2)' @ "all 4 constructors with character \
						pointer parameter"
				)
			),
			/ %Service $=
			(
				/ %FileSystem $=
				(
					(
					/ @ "struct %PathTraits" $=
					(
						/ $impl "static member function template %is_root"
							^ ("%FetchRootNameLength" @ %Adaptor.YAdaptor)
							~ "%YCL_FS_StringIsRoot" $dep_to
							"removal use of YCL_FS_StringIsRoot",
						+ $forced "static function %is_root for 'const String&'"
					);
					/ $comp "non 'sd:/' or 'fat:/' supported as root"
						@ "platform %DS",
					/ $comp "supported more than one trailing separators at \
						end as root" $dep_from ("%platform::FetchRootNameLength"
						@ %YCLib.FileSystem)
					),
					/ "simplified path conversion" @ "function template \
						%CopyTree, functions %(DeleteTree, ClearTree)"
						^ "explicit conversion from %Path to %string"
						~ "%Path::VerifyAsMBCS",
					+ "function template %TraverseChildren with 'const char*' \
						parameter",
					(
					+ "function template %TraverseChildren with 'const Path&' \
						parameter";
					/ DLDI "simplified %(ClearTree, CopyTree)"
					),
					/ @ "function template %Traverse with pointer parameter" $=
					(
						/ $doc "explicitly forbade null pointer as argument",
						+ 'YB_NONNULL(1)'
					)
				),
				/ DLDI "simplified" @ (!"platform %Win32" @ "function \
					templates %(TryRemove, TryUnlink), function %OpenFile"
					@ %File ^ $dep_from ("%ThrowFileOperationFailure"
					@ %Adaptor.YAdaptor)
			),
			+ "trace with level 'Notice'" @ "handling %SM_Quit"
				@ "static member function %Shell::DefShlProc" @ %Core.YShell
		),
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				(
				- "macro %YCL_FS_StringIsRoot" $dep_from
					"removal use of YCL_FS_StringIsRoot";
				- "function %platformex::FS_IsRoot" @ !"platform_Win32"
				),
				/ "supported more than one trailing separators at end of root"
					@ "functions %FetchRootNameLength_P; function template \
					%FetchRootNameLength"
				(
				+ "function templates %(IsColon, IsSlash, FindColon)";
				/ "all functions %(IsAbsolute_P, FetchRootNameLength_P)"
					-> "function templates supporting 'const _tChar*' and \
					'basic_string_view<_tChar>' parameters"
				),
				* "wrong name of %FetchRootNameLength_P for %basic_string_view"
					$since b653
					$= ("%FetchRootNameLength_P_" => "%FetchRootNameLength_P"),
				(
				/ "default argument" @ "parameter"
					@ "constructor %DirectorySession" -> '"."' ~ '{}';
				/ "asserted for null parameter" @ "classes"
					("%DirectorySession", $comp "%HDirectory") $dep_from
					("%IO::Traverse" @ %YSLib.Service.FileSystem)
				)
			),
			+ "function template %ThrowFileOperationFailure" @ %FileIO,
			/ DLDI "simplified" @ ("constructor %DirectorySession" @%FileSystem,
				("function %FetchCommandOutput",
				!"platform %Win32" @ "function %MakePipe") @ %Host,
				"constructor %MappedFile" @ %MemoryMapping)
				^ $dep_from ("%ThrowFileOperationFailure" @ %FileIO),
			+ "keycode platform emulation" @ "namespace %platform::KeyCodes"
				@ %Keys $=
			(
				+ "class template %PlatformSet and specializations";
				/ $dev "ported key codes" @ "all platforms"
					^ "%PlatformSet specializations"
			),
			/ %Debug $=
			(
				/ @ "class %platform::Logger" $=
				(
					/ $impl "simplified function %DoLogException"
						$= (- "nullary check for message")
							// See $2015-11 \
								@ %Documentation::Workflow::Annual2015.
					/ $doc "explicitly guaranteed 3rd parameter not null"
						@ "type %Sender"
				),
				+ "function %platform_ex::SendDebugString" @ "platform %Win32"
			)
		),
		+ "constructor %DirectoryFindData with 'const char*' parameter"
			@ %'YCLib_(Win32)'.MinGW32,
			// To reduce empty string conversion overhead.
		/ %Helper.Initialization $=
		(
			/ DLDI "simplified %InitializeSystemFontCache"
				^ "IO::TraverseChildren" ~ "%HDirectory"
			+ "setting default logger sender when environment variable \
				%YF_DEBUG_OUTPUT is '1'" @ "platform %Win32"
				@ "function %InitializeEnvironment" @ %Helper.Initialization
				^ $dep_from ("%platform_ex::SendDebugString" @ %YCLib.Debug)
		)
	),
	/ DLDI "simplified" @ %Tools.ProjectGenerator.Main $dep_from
		("%TraverseChildren" @ %YFramework.YSLib.Service.FileSystem),
	/ %YReader $=
	(
		/ %ShlReader $=
		(
			/ DLDI "simplified path conversion" @ "constructor %HexBrowser",
			/ $impl "constructor %ShlTextReader" ^ "explicit conversion from \
				%Path to %string" ~ "%Path::VerifyAsMBCS"
				// The group name should not be end with slash.
		),
		+ DLD 'YB_NONNULL(2)' @ "constructor %HexModel, member function \
			%HexViewArea::Load" @ %HexBrowser
	),
	+ DLDI 'YB_NONNULL' @ "setting logger sender" @ %Tools.SHBuild.Main,
	+ DLD 'YB_ATTR(returns_nonnull)' @ "virtual member function %what"
		@ "all exception classes" $effective @ ("class %ystdex::bad_any_cast"
		@ %YBase.YStandardEx.Any),
	/ $dev $repo $re_add(b650) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.YSLib.Core.("%yshell.cpp" => "%YShell.cpp")
),

b653
(
	/ %YBase.YStandardEx $=
	(
		+ "function template %bind1 with result type parameter support"
			@ %Functional,
		/ %CString $=
		(
			+ 'ynothrow' @ "function template %is_null",
			+ 'ynothrowv' @ "all function templates and inline functions \
				%(ntctscmp, ntctsicmp, ntctscpy, ntctsncpy, ntctsmove, \
				ntctschr, ntctslen, const_ntctslen, const_ntctscnt, \
				const_ntctscmp)",
				// Since there are pointers as parameters. Note that ISO C++ \
					[res.on.exception.handling]/3 guarantees no exceptions \
					thrown by C standard library routines without \
					user-provided callbacks.
			/ 'ynothrow' @ "all 10 function templates '*str_find_*'"
				-> 'ynothrowv',
				// Since there are pointers as parameters.
			(
			/ "function template %ntctschr" -> "%ntctsfind";
			+ "(functions, function template) %ntctschr for strings without \
				specifying a lenghth parameter",
			* "%ntctslen with 2 parameters" $since b641
			),
			/ "function templates %(ntctschr, ntctschrn, ntctsstr)"
				-> "%ntctsfind"
		),
		/ %TypeTraits $=
		(
			+ "metafunction %always";
			/ $impl "%void_t" @ !'YB_IMPL_GNUCPP >= 50000' ^ "%always"
		),
		(
		* $impl "metafunction %common_nonvoid_t" @ %TypeOperation $since b650;
		* $comp "ill-formed when 'void' specified for deducing common type"
			@ "%common_array_t; make_array; forward_as_array, cast_array)"
			@ %Array $since b650
		),
		* $comp "hard errors for SFINAE causing build to fail" @ ("detectors"
			@ %TypeTraits, "metafunction %vdefer" @ %Tuple;
			"metafunction %common_nonvoid_t" @ %TypeOperation,
			"metafunctions %(has_nested_allocator, nested_allocator)" @ %Memory)
			$since b650 $dep_from ("%void_t" @ %TypeTraits) $dep_to "void_t alias"
	),
	/ %YReader.ShlReader $=
	(
		* "wrong implementation caused recursive painting and assertion failure"
			@ "member function %TextInfoBox::Refresh" $since b650,
		/ DLDI "member function %ShlReader::Exit"
	),
	/ %YFramework $=
	(
		* $comp "failed to build" @ "platform %DS" @ %'YCLib(DS)'.DSIO $dep_from
			%YBase.YStandard.(Memory, TypeOperation) $since b650,
		/ %YCLib.FileSystem $=
		(
			/ @ "function template %IsAbsolute_P for platform %DS" ^ $dep_from
				("%ystdex::ststr" @ %YBase.YStandardEx.CString) $=
			(
				* "absolute path without trailing '/' not recognized" $orig
					(@ "%IsAbsolute" @ "%platform %DS" $since b152);
				* "'/fat:' formatted as relative string result" @ "platform %DS"
					$since b652
			),
			/ "function %GetRootNameLength" -> "(8 functions, 2 function \
				templates) %FetchRootNameLength_P; function template \
				%FetchRootNameLength supporting program emulation and %char16_t"
				$dep_from %YSLib.Adaptor.YAdaptor
		)
		- $revert(b171) 'using platform::GetRootNameLength' @ %YSLib.Adaptor.YAdaptor
	)
),

b652
(
	/ %YReader.ShlExplorer $=
	(
		* "missing trailing path verfication led to wrong current path"
			@ "constructor %ShlExplorer" $since b651
			$= (DLDI ^ "%Path::Verify"
				~ "explicit conversion from %Path to %String")
		* $comp "failed to open file" @ !"platform %Win32" $since b651
			// These POSIX paths are treated as directories, which is stricter \
				than in Win32.
	),
	+ $doc %YCLib @ %Documentation,
	/ %YFramework $=
	(
		/ %YSLib.Service.FileSystem $=
		(
			(
			/ "all functions %IsRelative" -> "function template";
			+ $comp "support for 'const char16_t*' and potentional other types"
				@ "%IsRelative"
			),
			/ @ "class %Path" $=
			(
				/ @ "function %Parse" $=
				(
					/ DLDI "simplified" ^ "%IsRelative",
					/ "ignored empty path components"
						// Both POSIX and Win32 should ignore subsequent \
							separators unless there is double separators (e.g. \
							"//") in the front.
				),
				/ ("operator %String", $comp "%operator %string")
					^ "%GetLeafString" ~ "%GetString"
			),
			/ "directory verifying" @ "function %ClassifyNode" $=
			(
				* "recognized all directories as %NodeCategory::Missing" $since
					b475,
				/ DLDI "simplified" ^ $dep_from "%Path::String"
					~ "%Path::VerifyAsMBCS"
			)
		),
		/ %YCLib $=
		(
			/ @ "functions %IsAbsolute" -> ("6 functions %IsAbsolute_P \
				supporting platforms %(DS, Win32) and others"
				^ $dep_from ("%BaseIDTag, IDTag" @ %YCommon),
				"function template %IsAbsolute" ^ $dep_from
				("%YCL_DefPlatformFwdTmpl" @ %YCommon)) @ %FileSystem $=
			(
				/ "reduced ':/' check" @ !"platform %DS",
				(
				/ @ "platform %DS" $=
				(
					(
					- "second ':/' check";
						// Thus paths as "fat:/xx:/" is now considered \
							absolute by design, even it is not valid, though \
							the design was always wrongly implmented previously.
					* "always failed at second ':/' check to get all paths as \
						absolute paths" $since b334
					),
					/ DLD "simplified char16_t" @ "platform %DS"
						^ "%ystdex::(str_find, ntctslen)"
				);
				+ 'ynothrowv'
				)
			),
			/ $doc %Platform $=
			(
				+ "Doxygen group %TopLevelPlatformNamespaces" $=
					(+ "'\ingroup' command"
						@ "namespaces %(platform, platform_ex)"),
				+ "Doxygen group %PlatformEmulation",
				+ "abstrct platform macros %(YF_Platform_Android, \
					YF_Platform_Linux)"
			),
			/ %YCommon $=
			(
				+ 'using ID = std::uintmax_t;',
					// The most large standard unsigned integer type is used \
						to avoid conversions.
				+ "alias template %MetaID",
				+ "structs %(IDTagBase; HostedIDTagBase)";
				+ "class template %IDTag";
				(
				+ "macros %(YCL_IDTag_Spec; YCL_IDTag_SpecHost, \
					YCL_IDTag_SpecOnBase)";
				+ "%IDTag specializations for platforms %(Win32, Win64, \
					MinGW32, MinGW64)",
				+ "%IDTag specializations for platforms %(Linux, Android, \
					Linux_x86, Linux_x64, Android_ARM)" $dep_from
					"%(YF_Platform_Android, YF_Platform_Linux)" @ %Platform
				),
				+ "class template %IDTagSet",
				+ "macro %YCL_DefPlatformFwdTmpl" ^ $dep_from
					("%DefFwdTmplTrailing" @ %YBaseMacro)
			)
		),
		+ "macro %DefFwdTmplTrailing" @ %YBaseMacro
	),
	/ "saving bookmark without verifying path"
		@ "destructor %ShlTextReader" @ %ShlReader
		$= (/ DLDI ^ "conversion from %Path to %string"
			 ~ "%Path::VerifyAsMBCS")
),

b651
(
	/ %YBase.YStandardEx $=
	(
		/ %Memory $=
		(
			/ "nested allocator detection"
			(
				* @ !'YB_IMPL_GNUCPP < 49200' $since b650 $=
				(
					(
					* "wrong nested type %allocator detected instead of \
						%allocator_type",
						// As a result, nested allocator type would be ignored \
							unless %allocator is declared.
					+ "%rebind check";
					* $comp $forced "wrong detecting expression"
						// However, if the %allocator_type is existed, the \
							program is ill-formed.
					)
				);
				- $re_ex(b650) "conditional inclusion for nested allocator \
					detection as workaround"
			),
			/ DLDI "simplified return type" @ "%const_addressof#2"
		),
		/ %TypeTraits $=
		(
			/ "metafunctions %(meta_apply, meta_apply_t)"
				-> ("%(apply, apply_t)" @ "namespace %ystdex::vseq" @ %Variaic),
			+ "unary type trait %is_array_of_unknown_bound"
		),
		/ %Variadic $=
		(
			+ DD "Doxygen group %composition";
			+ "metafunctions %(bind_back, bind_front)" @ "group %composition"
				// Name 'quote' has already in use at %String.
		),
		/ %Tuple $=
		(
			/ DLDI "simplified %fold" @ %Tuple ^ $dep_from
				("%apply_t" @ %Variadic),
				// See $2015-11 @ %Documentation::Workflow::Annual2015.
			+ "metafunction %_q" @ $dep_from ("group %composition" @ %Variadic),
			(
			// See WG21 P0088R0.
			+ "constexpr object %tuple_not_found";
			+ "metafunction %tuple_find with 5 specializations for \
				%std::(tuple, pair)"
			)
		),
		+ "metafunction %same_value_as" @ %IntegerSequence,
		/ %Functional $=
		(
			+ "function template %bind_forward",
			+ "metafunction %enable_fallback_t"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			* $impl $re_ex(b594) "wrong use of 'yconstexpr'" @ "functions"
				@ %YCLib.FileSystem $since b607,
			/ %FileIO $=
			(
				/ DLDI "simplified file handle cast" @ "platform %Win32",
				/ @ "class %FileDescriptor" @ $=
				(
					- $dev "redundant 'YF_API'"
						@ "functions %(GetAccessTime, GetFlags, \
						GetModificationTime, GetModificationAndAccessTime)",
					+ "functions %(SetAccessTime, SetModificationTime,
						SetModificationAndAccessTime)" $=
					(
						^ $dep_from ("%SetFileTime" @ %'YCLib_(Win32)'.MinGW32)
							@ "platform %Win32"
						^ $dep_from ("%::futimens" @ %NativeAPI)
							@ !"platform Win32"
							// For platform %DS it would always throw \
								%std::system_error with \
								%std::errc::function_not_supported, since \
								%::devoptab_t currently has no support to set \
								time of files.
					)
				),
				+ "set %errno to %ENOMEM" @ "handling %std::bad_alloc for \
					'ynothrow' functions" $effective @ "functions \
					%(FileDescriptor::(GetNodeID, GetNumberOfLinks), 2 \
					(uaccess, uopen, 2 ufopen, upopen, uchdir, umkdir, \
					urmdir, uunlink, uremove, IsNodeShared))",
				+ DLDI 'ynothrow' @ "file ID lookup"
			),
			/ @ !"platform %Android" @ "namespace %platform_ex"
				@ %NativeAPI $=
			(
				// It seems that Android before KitKat does not define the \
					function. The declaration is missing as of NDK r9c even if \
					it has been defined. See http://reviews.llvm.org/D2357.
				+ "macros %(UTIME_NOW, UTIME_OMIT)" @ "not defined",
				+ "functions %::(futimens, utimensat)"
			),
			* "parameters wrongly swapped" @ !"platforms %(DS, Win32)"
				@ "functions %CreateHardLink" $since b633
		),
		/ @ %YSLib.Service.FileSystem $=
		(
			/ @ "function template %CopyTree" $=
			(
				+ $doc "'\warning' command to explicitly warn about \
					recursive traverse"
				/ DLDI "reduced temporary path creation",
				(
				^ DLDI "explicit string conversion" $dep_to
					"explicit path conversion for CopyTree";
				/ $comp "reduced verfying call" $dep_from
					"%Path::operator string"
					// This is intended since the resulted path component is \
						always to be parsed by %Path::Path, where trailing \
						delimiter is insignificant.
				)
			),
			+ "alias %CopyFileHandler",
			/ @ "functions %CopyFile" $=
			(
				+ DLDI 'YB_NONNULL' @ "internal function",
				+ "2 overloaded functions with handlers after copying"
					^ $dep_from "%CopyFileHandler",
			),
			+ "const objects %(PreserveModificationTime, \
				PreserveAndModificationTime)" ^ $dep_from
				("%ystdex::bind_forward" @ %YBase.YStandardEx.Functional,
				"%FileDescriptor::(SetModificationTime,
				SetAccessAndModificationTime)" @ %YCLib.FileIO),
			/ @ "class %Path" $=
			(
				+ "function %VerifyAsMBCS";
					// Essentially as same as previous %GetMBCS. However this \
						cannot be simply renamed directly.
				/ @ "functions %operator(string, String)" $=
				(
					/ "verifying calls replaced by non-verified string \
						conversions" $=
					(
						/ $impl "%operator String" ^ "%GetString" ~ "%Verify";
						/ $impl "%operator string" ^ "%operator String"
							~ "%GetMBCS" $dep_from ("made explicit path \
							verfication", "explicit SHBuild path verification",
							"explicit YReader path verification")
					),
					+ 'explicit' $dep_from
						"explicit path conversion for CopyTree"
				),
				- "function %GetMBCS" $dep_from ("%operator string",
					"removal SHBuild GetMBCS path verification",
					"removal ProjectGenerator GetMBCS path verification")
			),
			/ $impl ("function %DeleteTree#1, function templates %(CopyTree, \
				Traverse#4)", DLD "function %(MakeNormalizedAbsolute, \
				ClearTree, ClassifyNode)") ^ ($dep_from "%Path::VerifyAsMBCS")
				~ "conversion %Path to %string" $dep_to
				"made explicit path verfication"
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "3 functions %SetFileTime",
			/ DLDI "simplified %(QueryFileNodeID, QueryFileLinks, \
				QueryFileTime)",
			+ "function %ConvertTime for conversion from \
				%std::chrono::nanoseconds to %::FILETIME",
			(
			/ "macros %(YCL_WrapCallWin32, YCL_WrapCallWin32_Trace) took \
				message as lambda parameter" ~ "as macro parameter";
			(
			/ $forced $impl "macro %YCL_CallWin32";
			/ DLDI "simplified macro %YCL_CallWin32F" ^ "%YCL_CallWin32"
				~ "%YCL_WrapCallWin32F";
			/ @ "merged macro %YCL_WrapCallWin32F"
				-> "macro %YCL_WrapCallWin32";
			/ $forced DLDI "DirectoryFindData::Close" ^ "%YCL_WrapCallWin32"
				~ "%YCL_WrapCallWin32F"
			),
			(
			/ $forced $impl "macro %YCL_CallWin32_Trace";
			/ DLDI "simplified macro %YCL_WrapCallWin32F_Trace"
				^ "%YCL_CallWin32_Trace" ~ "%YCL_WrapCallWin32F_Trace";
			/ @ "merged macro %YCL_WrapCallWin32F_Trace"
				-> "macro %YCL_WrapCallWin32_Trace"
			),
			* $comp "message signature intercepted by lambda %operator()"
				@ "macros %(YCL_CallWin32F, YCL_CallWin32F_Trace)" $since b638
				// The content of %__func__ is implementation-defined. So as \
					some extensions. However in fact at least G++ could not \
					avoid the lambda signature by default. See also \
					http://stackoverflow.com/questions/12728318/is-there-are-nice-way-of-logging-function-names-when-inside-a-lambda.
			),
			/ "calling postfix-expression took function identifier without '::'"
				@ "macros %(YCL_WrapCallWin32, YCL_WrapCallWin32_Trace)"
				// This allows interception declarations before the calls. \
					Note 'using ::Func' or even 'const auto& Func(::Func)' is \
					needed sometimes.
			/ DLDI "parameter type" @ "constructor %GlobalLocked"
				-> 'GlobalDelete::pointer' ~ '::HGLOBAL',
			(
			+ "alias %ModuleProc";
			+ "(function; 2 function templates) %LoadProc";
			+ "macro %YCL_DeclW32Call" $dep_from
				("%(YCL_CheckDecl_t, YCL_DeclCheck_t)" @ %YCommon)
			)
		),
		+ "macros %(YCL_CheckDecl_t; YCL_DeclCheck_t)" @ %YCommon,
		(
		+ '#undef CreateSymbolicLink' @ "platform %Win32" @ %NativeAPI;
		+ "2 functions %CreateSymbolicLink" @ %FileSystem
		),
		+ "functions %(InstallFile, InstallDir, InstallHardLink, \
			InstallSymbolicLink, InstallExecutable)" @ %Helper.ShellHelper
	),
	/ $impl %Tools $=
	(
		/ %SHBuild.Main $=
		(
			^ $dep_from ("%String::VerifyAsMBCS" ~ "%String::GetMBCS"
				@ %YFramework.YSLib.Service.FileSystem) $dep_to
				"removal SHBuild GetMBCS path verification",
			^ $dep_from ("%Path::VerifyAsMBCS" ~ "implicit conversion from \
				%Path to %string" @ %YFramework.YSLib.Service.FileSystem)
				$dep_to "explicit SHBuild path verification"
		),
		/ @ %ProjectGenerator $=
		(
			^ ($dep_from "%Path::VerifyAsMBCS" ~ "%Path::GetMBCS")
				@ %YFramework.YSLib.Service.FileSystem) $dep_to
				"removal ProjectGenerator GetMBCS path verification",
			/ $comp DLD "reduced verifying call" @ "explicit conversion from \
				%Path to %string" @ "unit check" $dep_from ("%Path::operator \
				string" @ %YFramework.YSLib.Service.FileSystem)
				// This is intended since the path should always not to be a \
					directory for checing units, or the resulted path \
					component is always to be parsed by %Path::Path.
		)
	),
	/ %YReader.ShlReader $=
	(
		/ $impl @ "functions %ShlTextReader::(ShlTextReader, ~ShlTextReader), \
			ShlHexBrowser::ShlHexBrowser" ^ $dep_from ("%Path::VerifyAsMBCS"
			~ "implicit conversion from %Path to %string"
			@ %YFramework.YSLib.Service.FileSystem)
			$dep_to "explicit YReader path verification"
		/ $comp DLD "reduced verifying call" @ "explicit conversion from %Path \
			to %string" @ "%ShlTextReader::LoadFile" $dep_from
			("%Path::operator string" @ %YFramework.YSLib.Service.FileSystem)
			// This is intended since the path should always not to be a \
				directory.
	);
),

b650
(
	/ %YBase.YStandardEx $=
	(
		/ $dev "simplified header dependency" @ %Operators ^ %TypeTraits
			~ %TypeOperation,
		/ $dev "simplified header dependency" @ %TypePun ^ %TypeTraits
			~ %TypeOperation,
		/ DLDI "simplified nested %type member" ^ "%_t" $effecitve
			@ %(Variadic, Utilities, TypeOperation, Tuple, String, Ref,
			Rational, Operators, IteratorOperation, Iterator, IntegerSequence,
			Functional, Enum, Cast, AnyIterator),
		+ "metafunctions %(meta_apply, meta_apply_t, cond_t), unary type trait \
			%is_nonconst_object" @ %TypeTraits,
		(
		+ "metafunctions %((defer; defer_t), (defer_i; defer_i_t))"
			@ "namespace %ystdex::vseq" @ %Variadic;
		/ @ "namespace %ystdex" @ %Tuple $=
		(
			+ "metafunction %defer specialization for %std::tuple"
				@ "namespace %vseq";
			+ "metafunction %vdefer"
		),
		/ @ "namespace %ystdex" @ %IntegerSequence $=
		(
			+ "metafunction %defer_i specialization for %std::integer_sequence"
				@ "namespace %vseq";
			+ "metafunction %vdefer_i"
		)
		),
		/ %Utilities $=
		(
			/ "enabled only when result type convertible"
				@ "function template %decay_copy" ^ "%enable_if_convertible_t",
				// To fully conform WG21 N3255.
			- $revert(b383) "function template %decay_forward"
				// Not useful.
		),
		/ %TypeOperation $=
		(
			+ "unary type trait %has_mem_value_type",
			/ $impl "metafunctions %(remove_rcv, remove_rp, remove_rpcv)"
				^ "base class",
			/ DLDI "simplified %common_nonvoid",
			- $revert(b290) "metafunction %qualified_decay" $dep_from
				("%decay_forward" @ %Utilities),
				// Not useful.
			(
			- $revert(b290) "unary type trait %array_ref_decay" $dep_from
				("%operator|" @ %Iterator, "%unqualify" @ %Cast);
				// Better be explicit to adding reference on types.
			- $revert(b290) "unary type trait %array_decay"
				// Not useful.
			),
			(
			/ "all type traits 'is_*' except for %(is_covariant, \
				is_contravariant); all 3 metafunctions 'enable_if_*'"
				>> %TypeTraits $dep_to "simplification of traits dependency";
			+ "header dependency %Tuple" $dep_from "simplified traits \
				dependency" $dep_to "extended traits support with tuple";
			/ DLDI "simplified %common_nonvoid_t" ^ $dep_from
				("%cond_t" @ %TypeTraits, "%vdefer" @ %Tuple)
			)
		),
		/ @ %Memory $=
		(
			+ "unary trait %is_allocatable" ^ $dep_from
				("%is_nonconst_object" @ %TypeTraits),
			/ "unary type trait %has_nested_allocator"
				@ !'YB_IMPL_GNUCPP < 49200' $=
				// G++ fron Android NDK is buggy.
			(
				/ DLDI "simplified %has_nested_allocator" ^ "%detected_t"
					~ "%enable_if_t",
				+ "check for member %value" ^ $dep_from ("%vdefer" @ %Tuple
					$dep_from "extended traits support with tuple",
					"%has_mem_value_type" @ %TypeOperations)
			),
			/ DLDI "simplified %nested_allocator" @ !'YB_IMPL_GNUCPP < 49200'
				^ "%(conditional, detected_t)"
				// Ditto.
		),
		* "wrong 'YB_NORETURN' specifier order" @ "function %yassert"
			@ %CAssert $since b642,
			// 'YB_API YB_NORETURN' is wrong and Clang++ treats it as error \
				but G++ does not. However G++ does warn about \
				'inline YB_NORETURN'.
		/ DLDI "simplified function template %range_size#1" @ %Container
			^ "%is_detected_convertible",
		/ %Iterator $=
		(
			* "missing including %IntegerSequence for %(make_index_sequence, \
				index_sequence)" $since b595,
			/ $impl "simplified all 4 function template %operator|"
				^ "%decay_t" ~ "%array_decay_t"
		),
		/ %Cast $=
		(
			- "function template %unqualify";
				// Better make 'const_cast' explicit.
			/ $dev "simplified header dependency" ^ %TypeTraits
				~ %TypeOperation,
		),
		/ "simplified conditional meta call when 1st argument is trait call \
			result" ^ $dep_from ("%cond_t" @ %TypeTraits) ~ "%conditional_t"
			$effective @ %(AnyIterator, CString, Iterator, Rational, Ref,
			Utilities, Variadic),
		(
		/ "binary type traits %(is_covariant, is_contravariant) and \
			spacializations" @ %(TypeOperation, Tuple) >> %Functional $dep_to
			"merged traits specializations"
		/ $dev "simplified header dependency" @ %Tuple !^ %TypeOperation
			$dep_to "simplified traits dependency"
		),
		/ $forced $dev "simplified header dependency" @ %Functional
			^ %TypeOperation ~ %Tuple $dep_from
			"extended traits support with tuple",
		/ $dev "simplified header dependency" @ %(Thunk, ScopeGuard)
			^ %TypeTraits ~ %TypeOperation $dep_from
			"simplification of traits dependency"
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			(
			+ 'using ystdex::_t;' @ %Adaptor.YAdaptor;
			/ DLDI "simplified nested %type member" ^ "%_t" %effecitve
				@ %(Core.YEvent, UI.YWidgetEvent),
			)
			- $revert(b201) "structs %(SelectConvertible; MoreConvertible)"
				@ %Core.YCoreUtilities
				// Not useful.
			/ "simplified conditional meta call when 1st argument is trait \
				call result" ^ $dep_from ("%cond_t" @ %TypeTraits)
				~ "%conditional_t" $effective @ %(Service.YBrush, UI.YWindow)
		),
		/ %Helper.ShellHelper $=
		(
			- "function template %HandleToReference",
				// Better use '*_cast' instead.
			- $revert(b278) "struct %ChildPainter" $dep_from
				("%TextInfoBox::Refresh" @ %YReader.ShlReader),
				// Use bind expressions or lambdas instead.
			- $revert(b278) "struct %ContainerSetter" $dep_from ("constructors
				(ReaderBox, TextInfoBox)" @ %YReader.ShlReader),
				// Ditto.
			- $revert(b213) "function template %CreateRawBitmap"
		),
	),
	/ DLDI %YReader.ShlReader $=
	(
		/ @ "member function %TextInfoBox::Refresh" ^ "lambda-expression"
			~ "%ChildPainter",
		/ @ "constructors (ReaderBox, TextInfoBox)"
			^ "%(ystdex::bind1, SetContainerPtrOf)" ~ "%ContainerSetter"
	),
	/ $dev $repo $re_add(b641) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.YSLib.UI.("%ywindow.h" => "%YWindow.h")
),

b649
(
	/ %Tools $=
	(
		/ @ "thread options" @ "SHBuild-common-options.sh" @ %Scripts $=
		(
			// See $2015-10 @ %Documentation::Workflow::Annual2015.
			/ "hard-coded detection for platform without specs 'mthreads'"
				-> "check for no 'no-pthread' in specs";
			+ $comp "supported for OS other than Windows, Linux and OS X with \
				pthread support";
			* "missing '-pthread' for Clang++" $since b547
		),
		/ %Tools.CreationTimeManager $=
		(
			* "path with non current code page not usable" @ %Main $since b437,
				// However, it might be still limited in command line. Note \
					that 'chcp 65001' for pipe in 'cmd' is not supported, see \
					http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using.
			+ "G++ command example for build" @ "%Readme.en-US.txt"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib.Service $=
		(
			/ "exception message" @ "function %OpenFile" @ %File,
			/ DLDI "simplified functions %CopyFile" @ %FileSystem
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ @ "function templates %make_guard" @ %ScopeGuard $=
		(
			+ "overloading with variadic parameters",
				// To support move.
			- "overloading for %lref instances"
		),
		+ %TypeTraits $=
		(
			+ "enable_when",
			(
			+ "metafunctions %_t",
			+ "struct %nonsuch";
				// See WG21 N4502.
			+ "metafunctions %(is_detected, (detected_t; is_detected_exact, \
				is_detected_convertible), (detected_or; detected_or_t))"
			),
			/ $forced DLDI "%exclude_self_ctor_t" $dep_from "moving traits"
				^ "decay_t" ~ "%remove_rcv_t"
				// Since %remove_rcv_t is not also moved here.
		),
		/ %TypeOperation $=
		(
			/ "inline namespaces %(cpp2011, cpp2014), type %bool_constant, \
				metafunctions %(void_t, and_, or_, exclude_self_ctor_t)"
				>> %TypeTraits $dep_to "moving traits",
			(
			/ @ "type trait %has_equality_operator" $=
			(
				+ "2nd template default argument as 1st template parameter",
				/ DLDI "simplified" ^ $dep_from "%is_detected_convertible"
					~ "%YB_TYPE_OP_TEST_2"
					// Also more readable.
			),
			/ DLDI "simplified %has_subscription" ^ $dep_from "%(is_detected, \
				detected_t)" ~ "%YB_TYPE_OP_TEST_2";
			- $revert(b399) "macro %YB_TYPE_OP_TEST_2"
				// Superseded by detector APIs.
			),
			(
			/ DLDI "simplified %has_mem_value" ^ $dep_from "%is_detected"
				~ "%YB_HAS_MEMBER";
			- $revert(b453) $build "conditional inclusion as workaround for \
				Microsoft VC++ 2013",
			- $revert(b440) "macro %YB_HAS_MEMBER"
				// Ditto.
			),
			/ "%has_addressof" -> "%has_overloaded_addressof" ^ $dep_from
				"%is_detected"
		),
		* "'void' type treated as character" @ "type traits %is_string_class"
			$since b640
			$= (^ $dep_from ("%enable_when" @ %TypeTraits) ~ "%void_t"),
		/ %Utilities $=
		(
			/ "struct %any_constructible" >> @ %TypeTraits,
			(
			- "struct %not_constructible"
			/ $forced "return type" @ "function %dependent_swap::swap#1"
				^ $dep_from ("%nonsuch" @ %TypeTraits) ~ "%not_constructible"
			)
		),
		/ @ "function templates %constfn_addressof" @ %Memory $=
		(
			/ $forced DLDI $dep_from ("%has_overloaded_addressof"
				@ %TypeOperation),
			* "invalid 2nd function template parameter"
				@ "overloading for type with overloaded %operator&" $since b591
		),
		/ "simplified header dependency" @ %BitSegment !^ %TypeOperation,
		/ %Variadic $=
		(
			/ $dev "header dependency" ^ %TypeTraits ~ %YDefinition $dep_from
				"moving traits" $dep_to "variadic sequence using traits"
			/ DLDI "simplified %(deduplicate, reverse)" ^ "%conditional_t"
				~ "%std::conditional",
			/ DLDI "simplified %(find, unique)" ^ "%is_same" ~ "%std::is_same"
			/ DLDI "simplified %find" ^ "%is_sameintegral_constant"
				~ "%std::integral_constant"
			* "wrong 'split_n<1, *>::type'" $since b589
				$= (^ "%(clear_t, push_back_t, front_t)" ~ "%front_t"),
				// The metafunction %project_t is not fit because no \
					%index_sequence is guaranteed to be defined here and it is \
					also too inefficient.
			/ @ "metafunction %unique" $=
			(
				/ DLDI ^ "binary recursive instantiation",
				* "wrong %type" $since b589
					$= (^ "%(split_n, back_t, front_t, concat_t, pop_back_t)"
						~ "%(front_t, push_front_t, split_t, concat_t)")
			)
		),
		/ "simplified header dependency" @ %(Exception, Cache, Future, \
			IteratorTrait) ^ %TypeTraits ~ %TypeOperation
		* "missing including header for %exclude_self_ctor_t" @ %Ref $since b640
			// Originally this should be %TypeOperation.
			$= (+ $dev "including %TypeTraits" ),
		/ DLDI "simplified %make_successor" @ %IntegerSequence $dep_from
			"variadic sequence using traits" ^ "%common_type_t"
			~ "%std::common_type"
	),
	+ "2 test cases" @ %Test.YBase ^ $dep_from "%constfn_addressof"
		@ %YBase.YStandardEx.Memory),
	/ $dev $repo $re_add(b641) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %Tools.CreationTimeManager.("%main.cpp" => "%Main.cpp")
),

b648
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ "supported multiple character encodings" @ "class %HDirectory"
				@ %FileSystem $=
			(
				+ "alias %NativeChar";
				(
				/ "function %GetName" -> "%GetNativeName";
				* $comp "bad UTF-8 name reserved after exception ignored for \
					getting name" @ "platform %Win32" $since b412
				/ $forced DLDI "function %operator string",
				/ DLDI "simplified data members and constructor"
					@ "platform %Win32",
				+ "functions operator %(u16string, \
					basic_string_view<NativeChar>)"
				)
			),
			/ %FileIO $=
			(
				/ @ "class %FileDescriptor" $=
				(
					/ "merged static member function \
						%FileDescriptor::NodeCompare" -> "function \
						%platform::IsNodeShared for %FileDescriptor parameters",
					* DD "Doxygen member group end" $since b634,
					/ DLDI "cast size parameter to 'unsigned'"
						@ "functions %(Read, Write) for non POSIX compliant \
						%::(read, write)" @ "platform %Win64"
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				),
				* DLB $impl $re(b585) "strict ISO C++ code conformance"
					@ "platform %Win32" $since b632
					$= (* "missing user-provided default constructor for \
						default initialized const objects"
						$= (+ '{}')),
				+ 'ynothrow' @ "functions %(omode_conv; omode_convb)"
			)
		),
		/ %YSLib $=
		(
			/ @ "namespace %YSLib::IO" @ %Adaptor.YAdaptor $=
			(
				+ 'using NativePathView \
					= basic_string_view<HDirectory::NativeChar>;',
				+ 'platform::MakePathString;',
				* DD "Doxygen member group end for algorithms" $since b308
			),
			/ %Service.FileSystem $=
			(
				- "catching and ignoring exception 'FileOperationFailure&'"
					@ "function %ListFiles",
					// To keep it consistent with other APIs in the module and \
						also to make the error able to be handled by caller.
				/ "function templates %(TryRemove, TryUnlink)" >> %File
					$= (* "explicit platform-dependent 'platform::' used \
						directly" $since b639 $dep_from ("%MakePathString"
						@ %YSLib.Adaptor.YAdaptor)),
				+ "function template %CopyTree",
				- "redundant source mode parameter"
					@ "functions %CopyFile#(2, 4)"
			),
			+ $forced DLDI "catching and ignoring exception \
				'FileOperationFailure&'" @ "member function %FileBox::ListItems"
				@ %UI.ComboList $dep_from ("%ListFiles" @ %Service.FileSystem),
		),
		/ DLDI "path string parameter" @ "callback" $effective @ ("function \
			templates %(Traverse, TraverseChildren), function %(ClearTree, \
			ListFiles)" @ %YSLib.Service.FileSystem, "function \
			%InitializeSystemFontCache" @ %Helper.Initialization) -> $dep_from
			("%NativePathView" @ %YSLib.Adaptor.YAdaptor) ~ 'const string&',
		/ DLDI "cast size parameter to 'unsigned long'"
			@ "member function %WConsole::WriteString for %wstring_view"
			@ %'YCLib_(Win32)'.Consoles
			// To eliminate Clang++ warning: [-Wshorten-64-to-32].
	),
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			/ $forced DLDI "path traverse" $dep_from
				%YFramework.YSLib.Service.YFramework,
			/ DLDI "rule API parameters" ^ "%string_view" ~ "%string",
			/ "quoted all paths in messages by '\''" ^ "%ystdex::quote"
				// To be clear with spaces.
			/ DLDI "simplified quoted all paths in commands by '"'" ^ "%ystdex::quote"
		),
		/ $forced DLDI "path traverse" @ %ProjectGenerator.Main $dep_from
			%YFramework.YSLib.Service.YFramework
	)
),

b647
(
	/ %YFramework $=
	(
		- $revert(b646) "all %YB_FLATTEN" @ %CHRLib.(StaticMapping, MappingEx),
			// This would make object file too large unnecessarily since \
				'YB_FLATTEN' has already been used for some other client \
				routines (i.e. 'Make*').
		/ %YCLib.FileSystem $=
		(
			/ "function %platform_ex::FS_IsRoot" -> "2 overloaded functions \
				for %(string_view, u16string_view)";
			+ "support for multiple character type" @ "YCL_FS_StringIsCurrent, \
				YCL_FS_StringIsParent, YCL_FS_CharIsDelimiter, \
				YCL_FS_CharIsDelimiter)"
		),
		/ %YSLib.Service.FileSystem $=
		(
			(
			/ "class %PathNorm" -> "struct %PathTraits" $dep_from
				%YCLib.FileSystem
				$= (/ "all 4 overriders" -> "static function templates");
			/ DLDI @ "callback" @ "function templates %(Traverse, \
				TraverseChildren), function %ListFiles" $=
			(
				- "norm parameter",
				/ "eliminated redundant cast"
			),
			/ DLDI "functions %(ListFiles, Path::Parse)" ^ "%PathTraits"
			),
			(
			/ $forced DLDI "%ClassifyNode" $dep_from ("ystdex::classify_path"
				@ %YBase.YStandardEx.Path);
			- $revert(b410) 'using ypath::get_norm;' @ "class %Path" $dep_from
				%Helper.Initialization
			)
		),
		/ DLDI "eliminated redundant cast" @ "function \
			%InitializeSystemFontCache" %Helper.Initialization ^ $dep_from
			("%PathTraits" @ %YSLib.Service.FileSystem),
		/ "ensured not returning string pointer to empty string" @ "member \
			function %DirectoryFindData::Read" @ %'YCLib_(Win32)'.MinGW32
	),
	/ %YBase.YStandardEx.Path $=
	(
		- "use of norm object" @ "function template %classify_path";
		/ "removed norm object" @ "class template %path" $=
		(
			/ "norm template parameter" -> "traits",
			/ "alias %norm" -> "%traits_type",
			- "norm function parameter" @ "function %merge_parents",
			- "function %get_norm",
			/ "user-defined constructors"
				-> "3 explicitly defaulted constructors",
			/ DLDI "function %(filter_self, swap)" ^ "traits" ~ "norm object",
			- DLDI "typeid-expression" @ "friend %operator(<, ==)",
			- $revert(b473) "alias %default_norm",
			- "data member %p_norm"
		);
		/ "class templates %(path_norm, file_path_norm)"
			-> "%path_norm with specialization";
		* $comp "wrong base" @ "%file_path_norm specialization for string \
			other than %std::string" $since b409
	)
),

b646
(
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			* $doc "Doxygen comment block for %YB_ATTR_gnu_printf wrongly \
				named as %YB_ATTR" $since b615,
			+ "macro %YB_FLATTEN"
		),
		/ %YStandardEx $=
		(
			/ %Cache $=
			(
				* "missing including %CAssert for %yassume" $since b521,
				* "missing including %TypeOperation for %and_" $since b611,
				+ "functions %(get, list)" @ "class template %used_list_cache",
				/ @ "trait %used_list_cache_traits" $=
				(
					* "wrong %used_cache_type" @ "primary template \
						%used_list_cache_traits" $mismatch $since b611 $=
						(/ 'unordered_multimap' -> 'unordered_map'),
					/ @ "specialization for %void hash type" $=
					(
						* "missing comparator template argument"
							@ "alias %map_type" $since b611;
						/ "%used_cache_type" ^ "%map_type"
					)
				)
			),
			/ "%range_size for %std::initializer_list instances passed \
				parameter by value" @ %Container ~ "by const reference",
			+ "function template %to_array for %std::initializer_list instances"
				@ %Array,
			/ %Path $=
			(
				- "function %is_delimiter" @ "class template \
					%file_path_norm<std::basic_string<_tChar, _tAlloc>>"
				- "pure virtual function %is_delimiter"
					@ "class template %path_norm" $dep_from
					("%PathNorm" @ %YFramework.YSLib.Service.FileSystem)
			)
		)
	),
	/ %YFramework $=
	(
		/ %CHRLib $=
		(
			+ DLDI ($dep_from ('YB_FLATTEN' @ %YBase.YDefinition))
				@ ("8 transcoding functions with default encoding"
				@ %CharacterProcessing,
				"all member function templates %(Encode, Decode)"
				@ "class template specializations %GUCSMapper"
				@ %(StaticMapping, MappingEx)),
				// This would effect performance a lot.
			/ "macro %CHRLIB_NODYNAMIC_MAPPING" -> "%CHRLib_NoDynamicMapping"
				@ %MappingEx
				$= (/ "defined only if not defined previously"),
		),
		/ %YSLib $=
		(
			/ %Core.YException $=
			(
				+ 'ynothrow' @ "function %ExtractAndTrace",
					// Constructing an object of 'std::function' instance from \
						a function pointer would not throw.
				/ @ "class %FatalError" $=
				(
					/ "1st parameter type" @ "constructor" -> 'const char*',
					/ ("2nd parameter type" @ "constructor", "return type"
						@ "GetContent") -> 'string_view' ~ 'const std::string&',
					* "implictly defined copy constructor might throw" $since b549
						$= (/ $impl ^ "%shared_ptr<string>" ~ "%std::string")
				)
			),
			+ 'using platform::u16string_view;' @ %Adaptor.YAdaptor,
			/ %Service.FileSystem $=
			(
				/ "overrider %is_delimiter" @ "class %PathNorm" -> "static \
					function %IsDelimiter" ^ $dep_from ("%u16string_view"
					@ %Adaptor.YAdaptor) ~ 'const value_type&',
				/ $forced DLDI "member function %Path::Parse" $dep_from
					"%PathNorm",
			)
		),
		/ %Helper.Initialization
		(
			/ $forced DLDI $dep_from %CHRLib.MappingEx,
			/ $forced DLDI "function %HandleFatalError" $dep_from
				("%FatalError::GetContent" @ %YSLib.Core.YException)
		)
	)
),

b645
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %String" @ %Core.YString $=
			(
				+ "constructor template with %basic_string_view instance \
					parameter",
				* "ill-formed initialization for call %MakeUCS2LE"
					@ "constructor template with character pointer length \
					parameters" $since b641
			)
		),
		/ @ "class %WConsole" @ %'YCLib(Win32)'.Consoles $=
		(
			+ "4 functions %WriteString",
			(
			+ "throwing %Win32Exception to report error" @ "member functions \
				%(Update, Fill, SetCursorPosition)" ^ "%YCL_CallWin32F";
			(
			- $forced 'ynothrow' @ "function %RestoreAttributes";
			+ $forced "catching error" @ "destructor"
			),
			* "error other than occuring during getting buffer information \
				ignored" @ "functions (Update, Fill, UpdateBackColor, \
				UpdateForeColor, Erase)" $since b520
			),
			+ 'ynothrow' @ "static functions %(ComposeAttributes, \
				DecomposeAttributes, FetchBackColor, FetchForeColor), \
				functions %(SetBackColor, SetForeColor)"
		),
		/ $comp "%Win32Exception would be thrown on several errors"
			@ "platform %Win32" @ "class %Terminal" @ %YCLib.Host $dep_from
			%'YCLib(Win32)'.Consoles,
		/ %CHRLib $=
		(
			/ %CharacterProcessing $=
			(
				(
				+ "2 function templates %TranscodeWith";
				/ "simplified all 2 %(DecodeWith, EncodeWith)"
					^ "%TranscodeWith";
				- "ADL for function object parameter" @ "tmeplates \
					%(DecodeWith, EncodeWith, MBCSToUCS2, MBCSToUCS4, \
					UCS2ToMBCS, UCS4ToMBCS)"
				),
				(
				- "state support other than 'ConversionState()'"
					@ "function templates %(MBCSToUCS2, MBCSToUCS4)";
				* $comp "wrong result" @ "%(MBCSToUCS2, MBCSToUCS4) calls"
					$since b644,
				),
				/ "split %(MBCSToUCS2, MBCSToUCS4, UCS2ToMBCS, UCS4ToMBCS)"
					!^ "default argument %CS_Default" $dep_to
					"split transcoding",
				(
				+ "class templates %(DispatchTranscoding; Transcoding)";
				/ "function temlpates %(MakeUCS2LE, MakeUCS4LE, MakeMBCS)" $=
				(
					/ DLDI "simplified" ^ "macro",
					/ $impl ^ "%Transcoding",
					/ "string view parameter types" ^ $dep_from
						("%basic_string_view" @ %CharacterDefinition)
						~ "%(string_view, u16string_view, u32string_view)"),
					/ "supported variadic parameters" ~ "encoding parameter"
						$dep_from "split transcoding"
						// This improve conversions without encoding \
							parameter, which previously requires querying \
							%CS_Default mapper pointer at rumtime. This is \
							especially effective for static linking where LTO \
							can take effect across the minimal procedure \
							boundary. This is also effective to shrink binary \
							size for statically linked image if only default \
							encoding is used.
				)
				)
			),
			+ 'using ystdex::basic_string_view;' @ %CharacterDefinition,
			* DLB "missing renaming 'chrdef.h'" @ "Microsoft VC++ project filter" $since
				b641,
			/ %MappingEx $=
			(
				+ DLD 'YB_STATELESS'
					@ "all 3 function templates %FetchMapperPtr_TryUCSMapper",
				+ DLD 'YB_ATTR(returns_nonnull)' @ "all 2 function templates \
					%FetchMapperPtr_TryUCSMapper not returning '{}'",
				+ "function template %FetchMapper_Default"
			),
			+ 'YB_STATELESS' @ "functions %(FetchFixedCharWidth, \
				FetchMaxCharWidth, FetchMaxVariantCharWidth)"
				@ %CharacterMapping
		)
	)
),

b644
(
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			/ $impl "functions %(MBCSToMBCS, MBCSToWCS, UTF8ToWCS, WCSToMBCS, \
				WCSToUTF8) with single pointer parameter"
				^ "directly NTCTS support of WinAPI",
			/ "merged all 2 functions %(MBCSToMBCS, MBCSToWCS, UTF8ToWCS) with \
				non single pointer parameter" -> "single function"
				^ "%string_view",
			/ "merged all 2 functions %(WCSToMBCS, WCSToUTF8) with non single \
				pointer parameter" -> "single function" ^ "%wstring_view";
			* $comp "missing check for length when source and destination code \
				pages are same" @ "function %MBCSToMBCS" $mismatch $since b476
			/ $comp "when intermediate conversion result length is zero" $=
			(
				* "throwing %LoggedEvent" @ "function %MBCSToMBCS" $since b586,
				* $comp "possible undefined behavior due to out-of-range \
					access of result string"
					@ "functions %(MBCSToWCS, WCSToMBCS)" $mismatch $since b431
			)
		),
		+ DLD 'YB_NONNULL(1, 2)' @ "function %LoadNPLA1File"
			@ %Helper.Initialization,
		/ %CHRLib $=
		(
			/ %MappingEx $=
			(
				+ DLD 'yconstfn'
					@ "function templates %FetchMapperPtr_TryUCSMapper",
				+ DLD 'yconstfn_relaxed' @ "function template %FetchMapperPtr"
			),
			+ "noexcept-specifications" @ "function templates (%CheckIterator, \
				all 4 %FillByte)" @ StaticMapping
				// Also to eliminate possible G++ warning: [-Wnoexcept] on \
					member function templates \
					%GUCSMapper<CharSet::UTF_8>::Decode.
		),
		/ %NPL.Lexical $=
		(
			/ DLDI 'using platform::byte;' -> 'using YSLib::byte;',
			* $re_add(b642) DD "missing '!'" @ "end of '/*'"
				@ "multiline Doxygen comments"
				@ "member functions %LexicalAnalyzer::'Parse*'" $orig
				(@ "member function %LexicalAnalyzer::ParseByte" $since b207)
		),
		/ %YCLib $=
		(
			/ %Platform $=
			(
				+ 'usint ystdex::nullptr_t'
					@ "inline namespace %platform::basic_types",
				* $re_add(b642) DD "missing '!'" @ "end of '/*'"
					@ "multiline Doxygen comments"
					@ "macro %YCL_Device_Cursor_FixedKey" $since b436
			),
			/ "parameter type 'std::nullptr_t'" -> 'nullptr_t'
				@ "constructor#3 %FileDescriptor" @ %FileIO
		),
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				/ "alias-declarations %(basic_string, string, wstring, sfmt, \
					vsfmt, to_string, to_wstring, basic_string_view, \
					string_view, wstring_view)" @ %YTextBase >> %YAdaptor,
				/ DLDI "alias-declarations %(platform::(byte, octet, \
					ptrdiff_t, size_t, wint_t), ystdex::nullptr_t)" @ %Adaptor
					-> 'using namespace platform::basic_types;' $dep_from
					%YCLib.Platform
			),
			- DLI "dependency on %YFM_YSLib_Adaptor_YTextBase"
				@ %Core.YCoreUtilities $dep_from %YTextBase
				// To improve build performance.
		)
	),
	/ $doc "moved some common contents about platform rules to wiki"
		@ %Documentation.(CommonRules, ProjectRules)
	- DLDI "unnecessary private base class %(noncopyable, nonmoveable)"
		$effective "%noncopyable" @ ("class %thread_pool" @ %Concurrency,
		"class %block_buffer" @ %CStandardIO, "class template %guard"
		@ %ScopeGuard) @ %YBase
		// Since the classes have already met the requirement. Also using \
			too many base classes is not friendly to EBO, if these types are \
			used for class members.
),

b643
(
	/ %YBase.YStandardEx.String $=
	(
		* "default argument instead of user-provided argument used for left \
			trimming" @ "function templates %trim" $since b304
	),
	/ %Test.YBase $=
	(
		+ "4 test cases" ^ ("%ystdex::(ltrim, rtrim, string_view)",
		+ "4 test cases" ^ ("%ystdex::(trim, string_view)" $dep_from
			%YBase.YStandardEx.String
	),
	/ %YFramework $=
	(
		/ %'YCLib_(DS)'.DSIO $=
		(
			/ DLDI "trimming" ^ "%string_view" @ "constructors %DEntry";
				// Despite https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67795, this \
					actually seems to work on platform %DS.
			/ "path parameter type" @ "member functions %Partition::(ChangeDir, \
				akeDir, Rename, Stat, Unlink), FileInfo::FileInfo"
				-> "%string_view" ~ 'const char*',
			/ DLD "function %Partition::Stat" -> "inline function"
			/ @ "function %Mount" $=
			(
				/ "1st parameter type" -> "%string_view" ~ 'const string&',
				/ DLDI "string copy" ^ "%ystdex::ntctscpy"
					~ "%ystdex::trivially_copy_n"
			)
		),
		/ %YCLib $=
		(
			/ %Host $=
			(
				/ "message parameter" @ "constructors %Exception"
					-> "%string_view without default argument"
					~ "'const string& with' default argument",
				+ "2 constructor with 'const char*' parameter and default \
					argument",
			),
			/ %FileIO $=
			(
				* "redundant direct assertion" @ "platform %Win32"
					@ "function %ufexists" $mismatch $orig
					(@ %FileSystem $since b553),
				- $revert(b305) "function template %ufexists" $dep_to
					"removal of function template"
			)
		),
		/ "message parameter type" @ "constructors %Win32Exception"
			@ %'YCLib_(Win32)'.MinGW32 -> 'string_view' ~ 'const string&'
			$dep_from %YCLib.Host,
		/ $forced DLDI %Helper.Initialization $dep_from
			"removal of function template",
		/ %YSLib $=
		(
			/ $forced DLDI @ "function %ClassifyNode" @ %Service.FileSystem
				$dep_from "removal of function template",
			/ @ "class %LoggedEvnet" @ %Core.YException $=
			(
				/ "message parameter" @ "constructors"
					-> "%string_view without default argument"
					~ "'const string& with' default argument",
				+ "2 constructor with parameter 'const char* = ""'
			)
		)
	),
	/ $forced DLDI @ %Tools.ProjectGenerator.Main $dep_from
		"removal of function template"
),

b642
(
	/ %YBase.YStandardEx $=
	(
		/ %CAssert $=
		(
			/ @ "function %yassert" $=
			(
				/ "unconditionally provided regardless of macro \
					%YB_Use_YAssert",
				/ "unconditionally failed for assertion" $=
				(
					- "1st parameter",
					+ 'YB_NORETURN'
				)
			);
			/ "macro %yconstraint" @ '!defined(NDEBUG)' ^ "%yassert"
				~ 'assert',
				// To enable ISO C++11 'constexpr' compatibility without \
					'__func__', etc. Note for MinGW-w64 it is OK, but not for \
					devkitARM or Android.
			/ $forced DLI "macro %yassume"
		),
		/ %Algorithm $=
		(
			+ $impl "assertion" @ "function template %clamp"
				^ $dep_from ('yconstraint' @ %CAssert),
				// Though LWG 2234 still counts for 'yassume', blocked by \
					%(__func__, __PRETTY_FUNCTION__): 'body of constexpr \
					function not a return-statement'.
			* $re_add(b641) DD "missing '!'" @ "end of '/*'" @ "multiline \
				Doxygen comments" @ "function templates %(for_each_equal, \
				for_each_if)" $since b532
		),
		* "missing functions (2 %operator==, %operator<) for %basic_string_view"
			@ %StringView $since b640,
		/ %TStringView $=
		(
			+ "functions %operator==(==, <) for %basic_tstring_view",
			+ "function %operator<< for %(basic_tstring_view, \
				std::basic_ostream)"
		),
		/ %String $=
		(
			+ $re_ex(b640) "support for %string_view like class types"
				@ "functions templates %(ltrim, rtrim)";
			+ $comp "support for %string_view like class types"
				@ "functions templates %trim"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Debug $=
			(
				/ "unconditionally provided regardless of macro %YB_Use_YAssert"
					@ 'YF_Multithread == 1',
				/ @ "function %LogAssert" $=
				(
					/ $forced DLDI "%ystdex::yassert calls" @ "platform %Win32"
						$dep_from %YBase.YStandardEx.CAssert,
					/ "unconditionally failed for assertion" $=
						(- "1st parameter")
						// Since the message box can be cancelled by user in \
							platform %Win32, it can return, no 'YB_NORETURN' \
							added as 'ystdex::yassert'.
				);
				/ $forced DLI "macro %YAssert"
			),
			+ 'ynothrow' @ "function %FAT::Clusters::IsFreeOrEOF" @ %FileSystem
		),
		/ %'YCLib_(DS)'.DSIO $=
		(
			/ @ "class %DEntry" $=
			(
				/ "merged 2 constructor %DEntry with character pointer" $=
				(
					/ "path parameter" ^ "%string_view" ~ 'const char*',
						// See $2015-10 @ %Documentation::Workflow::Annual2015.
					/ DLDI "reduced %std::strlen calls",
					/ "placed directory entry check before name and alias \
						checks",
						// This optimizes the disk reading. It also allow \
							adding one more 'ynothrow'.
					* "missing throwing %std::system_error of \
						%std::errc::not_a_directory when non-leaf \
						non-directory path component found" $since b611
						$dep_to "non-directory checking for entries"
						// Even if some other functions did not call it \
							directly, and the %Data were checked to be \
							specifying a directory, the prefix is not checked \
							and %ENOENT would be wrongly set instead of \
							%ENOTDIR.
				),
				/ DLDI "constructors#1",
				/ DLDI "constructors#2" ^ "%ystdex::retry_on_cond",
				/ "constructor %DEntry with 'int' parameter"
					-> "2 constructor templates" $=
				(
					* "missing initialization of name position for relative \
						path" $since b611,
						// This value would be used in %DEntry::AddTo which \
							might cause bad alias read. It also effects \
							%FileInfo initialization.
					/ "path parameter" ^ "%string_view" ~ 'const char*'
				),
				/ @ "function %GetLabalString" @ "class %Partition" $=
				(
					/ "return type" -> "%basic_string_view<byte>" ~ "%string";
					+ 'ynothrow'
				)
			),
			/ @ "class %FileInfo" $=
			(
				/ "function %GetNamePos" => "%GetNamePosition",
				* $comp "indeterminate name position value for newly created \
					nonexisted file when accessed using relative path" $since
					b611 $dep_from "constructor templates %DEntry"
					// %FileInfo::Stat uses this value. This would probably \
						cause %::fstat call failure or filling rubbish. \
						%Partition::Sync also use this value. This would \
						probably cause write dirty data to the disk.
			),
			/ @ "class %Partition" $=
			(
				/ DLDI "function %Sync",
				/ @ "function %EntryExists" $=
				(
					/ "type" @ "1st parameter" -> "%string_view"
						~ 'const string&',
					/ DLDI "simplified loop",
						// Also avoid unnecessary duplicate encoding \
							conversion calls.
					* "possible buffer overrun for finding alias when input \
						string is too short" $since b611
				),
				/ DLDI "simplified loop" @ "function %Unlink"
			),
			+ $re(600) DLDI 'ynothrow' @ "lambda-expressions" $effective
				@ "member functions %(SectorCache::SectorCache, \
				DEntry::DEntry#3, Partition::(Rename, RemoveEntry), \
				FileInfo::(FileInfo, TryRead))",
			+ $re_ex(600) DLDI 'ynothrowv' @ "lambda-expressions" $effective
				@ ("member functions %AllocationTable::(AllocationTable, \
				QueryLast)"),
			* $comp "missing throwing %std::system_error of \
				%std::errc::not_a_directory for paths where path prefix \
				component naming a valid file but not a directory"
				@ "member functions %(Partition::(Unlink, MakeDir, Rename), \
				DirState::DirState, FileInfo::FileInfo)" $since b611 $dep_from
				"non-directory check for entries" $dep_to
				"non-directory checking"
		),
	),
	/ %Test $=
	(
		/ $forced "updated %LIBS" @ "%test.sh" $dep_from
			%YBase.YStandardEx.CAssert,
		/ %YBase $=
		(
			+ "2 test cases" ^ ("%ystdex::string_view"
				@ %YBase.YStandardEx.StringView),
			+ "4 test cases" ^ $dep_from ("%ystdex::tstring_view"
				@ %YBase.YStandardEx.TStringView),
		)
	),
	* $re_ex(b626) $comp "strict POSIX.1-2013 compatibility" @ "platform %DS"
		$since $before b132 $=
	(
		* "wrongly setting %ENOENT instead of %ENOTDIR" @ "%::(unlink, mkdir, \
			rename, opendir, open) and variants for path parameters where path \
			prefix component naming a valid file but not a directory" $since
			$before b132 $dep_from "non-directory checking"
			// See https://github.com/devkitPro/libfat/issues/6.
	)
),

b641
(
	/ %YBase $=
	(
		* "missing parentheses protecting macro %YB_ASSUME" @ %CAssert
			@ %YDefinition $since b535,
		/ %YStandardEx $=
		(
			* $comp "unsafe when used out of expressions"
				@ "macros %(yconstraint, yassume)" @ %CAssert $since b535
				$dep_from %YDefinition,
			/ @ "class template specialization %basic_tstring_view"
				@ %TStringView $=
			(
				* "wrong ctor-initializer"
					@ "constructor template %basic_tstring_view" $since b640,
				+ "constructor with %base parameter",
				/ @ "static functions %(verify, verify_term)" $=
				(
					/ "exception specificaion" -> 'ynothrowv' ~ 'ynothrow',
					+ "assertion to ensure nonnull parameter"
				)
			),
			/ %CString $=
			(
				* "strict ISO C++ code compatibility" @ %LibDefect $since b640
					$= (* "missing including <algorithm> for %std::min"),
				+ "function template %ntctschr",
				/ @ "function template %ntctslen with size" $=
				(
					(
					/ $impl $dep_from ^ "%ntctschr";
					* $impl "wrong expression for return-statement" $since b640,
					),
					- "terminated character parameter"
						// If the terminated character is not null character, \
							the string is not NTCTS, thus the name is wrong. \
							And the similar interface would make problems for \
							other operations. Also now it does nothing better \
							than %ntctschr.
				),
				(
				/ "function template %ntctscpy for general string limited for \
					string of non aligned-replaceable character types";
				+ $re_ex(b610) "2 function templates %ntctscpy for \
					aligned-replaceable %(char, wchar_t) string"
					// As %ntctsncpy.
				),
				+ "function template %ntctsmove"
			)
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor.YTextBase $=
			(
				- "alias %ucs4string",
				+ 'using platform::u16string',
				+ 'using platform::u32string' $dep_from
					("%u32string" @ %YCLib.Container),
				- "alias %ucs2string" $dep_from "removal of %ucs2string",
				- 'using Text::ucs4_t;' $dep_from
					("removal of YSLib %ucs4_t", %YReader),
				- 'using Text::ucs2_t;' $dep_from "removal of YSLib %ucs2_t"
			),
			^ 'char32_t' ~ 'ucs4_t' $effective @ %(Service.(TextLayout,
				TextBase, TextRenderer, CharRenderer), UI.TextBox,
				Adaptor.Font) $dep_to "removal of YSLib %ucs4_t",
			^ 'char16_t' ~ 'ucs2_t' $effective @ %(Service.(TextManager,
				FileSystem, TextManager), UI.YGUI) $dep_to
				"removal of YSLib %ucs2_t",
			/ @ "class %String" @ %Core.YString $=
			(
				+ $lib 'YB_NONNULL(2)' @ "constructor template %String",
				+ "explicit constructor with %u16string_view parameter",
				+ "constructor supporting character pointer range with UCS-2 \
					conversion" $dep_from "null embedded string conversion"
			)
		),
		/ %YCLib $=
		(
			/ DLDI "all 'std::u16string'" -> 'u16string' @ %FileSystem
			^ 'char16_t' ~ 'ucs2_t' $effective %YCLib.HostedGUI,
			/ %Container $=
			(
				+ 'using u32string = basic_string<char32_t>;',
				+ 'using ystdex::basic_tstring_view;',
				+ 'using ystdex::tstring_view;',
				+ 'using ystdex::u16tstring_view;',
				+ 'using ystdex::wtstring_view;
			),
			/ @ "function %LFN::ConvertToMBCS" @ %FileSystem $=
			(
				/ $forced $impl $dep_from ("%CHRLib::MakeMBCS"
					@ %CHRLib.CharacterProcessing);
				/ $comp "length calculation to ensure no null embedded in the \
					string"
			)
		),
		/ %CHRLib $=
		(
			^ ('char32_t' ~ 'ucs4_t', 'char16_t' ~ 'ucs4_t') $effective
				@ %(CharacterProcessing, CharacterMapping, StaticMapping,
				Encoding) $dep_from %YSLib.Adaptor.YTextBase $dep_to
				"removal use of UCS character types",
			/ %CHRDefinition -> %CharacterDefinition $=
			(
				- "aliases %ucs2_t, ucs4_t" $dep_from "removal use of UCS \
					character types",
				+ 'using ystdex::string_view;',
				+ 'using ystdex::u16string_view;',
				+ 'using ystdex::u32string_view;',
				+ 'using ystdex::tstring_view;',
				+ 'using ystdex::u16tstring_view;',
				+ 'using ystdex::u32tstring_view;
			),
			/ %CharacterProcessing $=
			(
				+ "assertions to ensure nonnull pointers"
					@ "function %UCS4ToUCS2 for null-terminated string",
				(
				/ $dep_to "character range conversion" $=
				(
					+ "functions %(UCS4ToUCS2, UCS2ToUCS4, UCS2ToMBCS, \
						UCS4ToMBCS) for pointer range",
					* "wrongly written terminate character to destination"
						@ "functions %(MBCSToUCS2, MBCSToUCS4) for pointer \
						range" $since b614
				);
				/ "string conversion function templates %(MakeUCS2LE, \
					MakeUCS4LE, MakeMBCS)" @ %CharacterProcessing
					^ ("view classes" $dep_from %CharacterDefinition) $=
				(
					/ "function templates for string with size"
						^ "character range conversion" $dep_to
						"null embedded string conversion",
					/ "function template for byte string with size"
						^ "%string_view",
					/ "function template for UCS-2 string with size"
						^ "%u16string_view",
					/ "function template for UCS-4 string with size"
						^ "%u32string_view",
					- "function templates with size parameter without \
						conversion",
					- "all 2 template function templates for non-view string \
						class types"
				)
				),
				- "2 function templates %MakeMBCS without encoding conversion"
			),
		),
		^ 'char16_t' ~ 'ucs2_t' $effective
			%Helper.(Initialization, HostWindow, ShellHelper),
		/ $comp DLDI "string conversion with length checked"
			@ %'YCLib_(DS)'.DSIO $dep_from "%MakeUCS2LE"
			@ %CHRLib.CharacterProcessing
	),
	^ $lib $dep_from ('u16string' @ %Adaptor.YTextBase) ~ 'ucs2string'
		$effective %YFramework.YSLib.(Core.YString, Service.FileSystem) $dep_to
		"removal of %ucs2string",
	/ DLDI %YReader.(DSReader, ShlExplorer) ^ 'char32_t' ~ 'ucs4_t';
	* $re_add(b639) DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen \
		comments" @ ("enum %Encoding" @ %CHRLib.Encoding $since b249, (("class \
		%TextFileBuffer" $since b272, "%operator!= for \
		%TextFileBuffer::iterator" $since b460) @ %TextManager, ("function \
		%GetContext" @ "class template %GTextRendererBase" $since b566,
		"constructor %TextRenderer#2" $since b265) @ %TextRenderer)
		@ %YSLib.Service) @ %YFramework,
	/ $dev $repo $re_add(b640) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.CHRLib.("%chrdef.h" => "%CharacterDefinition.h")
),

b640
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %Operators $=
			(
				+ "wrapped parameter overloading for binary comparison \
					operators",
					// To make ADL work with just one argument. See WG21 N3766 \
						for the motivated example.
				* "wrong chained operator specializations for \
					%(derefereceable, indexable, input_iteratable, \
					forward_iteratable, bidirectional_iteratable, \
					random_access_iteratable)" $since b576
			),
			/ %CString $=
			(
				+ "2 function templates %(str_find, str_rfind, \
					str_find_first_not_of, str_find_last_not_of)",
				+ "function templates %(str_find_first_of, str_find_last_of)",
				/ "all 4 (functions, function templates) %ntctsnlen"
					-> "function template %ntctslen"
					^ "%std::char_traits::find",
				/ $re_ex(b544) DLDI "simplified %ntctslen without length \
					parameter"
				^ "%std::char_traits::length" ~ "specializations for types \
					meeting %is_char_specialized_in_std",
					// Since the primary template %std::char_traits has \
						already been specified to meet requirements in \
						[char.traits].
				/ "function template %ntctsnicmp" -> "%ntctsncmp",
				/ "return type" @ "function templates %(ntctscmp, ntctsicmp)"
					-> 'int',
				+ "function template %ntctscmp with length parameter"
			),
			/ %String $=
			(
				/ DLDI "simplified %is_string_class" ^ "%void_t",
				+ $lib 'YB_NONNULL(1)' @ "function templates %(vsfmt, sfmt)",
				+ "support for %string_view like class types"
					@ "functions templates %(erase_left, erase_right)",
				(
				/ "function template %sfmt" ^ "trailing-return-type";
				+ "2nd parameter to specify return type"
					@ "class template %vsfmt"
				)
			),
			+ %StringView $=
			(
				/ @ "namespace %ystdex" $=
				(
					+ "class template %basic_string_view" $dep_from
						("%(str_find, str_rfind, str_find_first_not_of, \
						str_find_last_not_of, str_find_first_of, \
						str_find_last_of)" @ %CString);
					+ 'using string_view = basic_string_view<char>;',
					+ 'using u16string_view = basic_string_view<char16_t>;',
					+ 'using u32string_view = basic_string_view<char32_t>;',
					+ 'using wstring_view = basic_string_view<wchar_t>;',
					+ "function templates %operator(==, <) for \
						%basic_string_view",
					+ "function template %operator<< for %(basic_string_view, \
						std::basic_ostream)"
				);
				+ "std::hash specialization for %ystdex::(string_view, \
					u16string_view, u32string_view, wstring_view)"
			),
			* "wrong qualified return type" @ "function template %operator()"
				@ "class template %expanded_caller" $since b595,
			* "missing 'const'" @ "return type" @ "member function templates \
				%operator(=, ())" @ "class %pseudo_output" @ %Ref $since b636,
			+ $lib 'YB_NONNULL(1)' @ "all 2 functions %vfmtlen" @ %CStandardIO,
			/ "transformation trait %tuple_element_t" @ %Tuple
				("%__cpp_lib_tuple_element_t" @ %YDefinition) $=
				// See $2015-10 @ %Documentation::Workflow::Annual2015.
			(
				>> "inline namespace %cpp2014" \
					@ '__cpp_lib_tuple_element_t >= 201402 \
					|| __cplusplus > 201103L || YB_IMPL_MSCPP >= 1800',
				-> 'using std::tuple_element_t;' @ "inline namespace %cpp2014"
					@ !'__cpp_lib_tuple_element_t >= 201402 \
					|| __cplusplus > 201103L'
			),
			+ %TStringView $dep_from
			(
				+ "class templelate %basic_tstring_view" $dep_from
					("%basic_string_view" @ %StringView);
				+ 'using tstring_view = basic_tstring_view<char>;',
				+ 'using u16tstring_view = basic_tstring_view<char16_t>;',
				+ 'using u32tstring_view = basic_tstring_view<char32_t>;',
				+ 'using twstring_view = basic_tstring_view<wchar_t>;'
			)
		),
		+ "feature-test macro %__cpp_lib_tuple_element_t recommended by \
			WG21 N4200 when \
			not defined" @ 'YB_IMPL_MSCPP >= 1900' @ YDefinition
			// See $2015-10 @ %Documentation::Workflow::Annual2015.
	),
	/ %Test $=
	(
		/ @ "%test.sh" $=
		(
			* "missing updating %INCLUDES" $since b633,
			+ "accecpted arguments forwarded to compiler command line"
		),
		/ %YBase $=
		(
			(
			* "invalid parameter types" @ "callables for %make_expanded"
				@ "case %ystdex::make_expanded" $since b547;
			* $comp "failed to build" $since b634
			),
			+ "2 test cases" ^ $dep_from
				("%ystdex::string_view" @ %YBase.YStandardEx.StringView)
			/ $dev $impl $re(b590) "expressions" ^ '()' ~ '::value',
			+ "printing tested case number",
			+ "4 test cases" ^ $dep_from ("%ystdex::(erase_left, erase_right)"
				@ %YBase.YStandardEx.String),
			+ "4 test cases" ^ $dep_from ((("%ystdex::(erase_left, erase_right)"
				@ %String), "%ystdex::string_view" @ %StringView)
				@ %YBase.YStandardEx)
				// Some cases are avoided intentionally. See \
					https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67795. \
					For %ystdex::tstring_view G++ 5.2.0 would crash: internal \
					compiler error: in unify, at cp/pt.c:18713.
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ "using-declarations %ystdex::(string_view, u16string_view, \
				wstring_view)" @ "inline namespace platform::containers"
				@ %Containers $dep_from %YBase.YStandardEx.StringView
			/ $forced DLDI @ %FileSystem $dep_from ("%ystdex::ntctsicmp"
				@ YBase.YStandardEx.CString)
		),
		+ "using-declarations %platform::(basic_string_view, string_view, \
			wstring_view)" @ %YSLib.Adaptor.YTextBase $dep_from
			%YCLib.Container,
		/ $forced DLDI @ %'YCLib_(DS)'.DSIO $dep_from
			("%ystdex::ntctsicmp" @ YBase.YStandardEx.CString),
		- "functions %ExecuteCommand" @ "class %ShlCLI"
			@ %'Helper_(DS)'.Shell_DS
	),
	/ $dev $repo $re_add(b633) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.'Helper_(DS)'.Shell_DS.("shlds.h" => "Shell_DS.h",
		"%shlds.cpp" => "%Shell_DS.cpp")
),

b639
(
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			/ "alias %ErrorCode" @ "class %Win32Exception"
				>> "inline namespace %Windows",
			/ "enum class %FileAttributesAndFlags, \
				'DefBitmaskEnum(FileAttributesAndFlags)'"
				-> "enums %(FileAttributes, FileFlags, SecurityQoS, \
				FileAttributesAndFlags)",
			/ "error handling" @ "constructor %DirectoryFindData" $=
			(
				/ DLDI ^ ($dep_from "%FileAttributes",
					"%ystdex::throw_error" ~ 'throw'),
				/ "distinguished error of getting attributes failure"
					^ "%GetErrnoFromWin32"
			)
		),
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				/ @ "class %FileDescriptor" $=
				(
					+ 'yconstfn YB_STATELESS', 'ynothrow' @ "friend %operator=="
					/ "friend function %operator!="
						-> ("friend function %operator<",
						"base class %ystdex::totally_ordered<FileDescriptor>"),
					+ "static function %Open"
				),
				+ "support deletion of read-only file" @ "platform %Win32"
					@ "function %(uunlink, uremove)",
				+ "support deletion of empty directory" @ "platform %Win32"
					@ "function %uremove",
				/ "function templates %(TryRemove, TryUnlink)"
					>> %YSLib.Service.FileSystem
					$= (/ DLDI "simplified" ^ "%ystdex::throw_error"),
				/ DLDI "simplified member function %FileDescriptor::GetSize"
					^ "%ystdex::throw_error"
				/ @ "function %EnsureUniqueFile" $=
				(
					+ "default argument ' = DefaultPMode()'"
						@ "%mode_t parameter",
					+ "parameters 'size_t = 1, bool = {}' to allow possible \
						overwriting and sharing between link instances",
					- "unlinking file before try opening" $dep_to
						"reserved file"
				),
				/ "all 4 functions %CopyFile" >> %YSLib.Service.FileSystem
					$dep_from ("%IO::(UniqueFile, FileDescriptor, mode_t)"
					@ %YSLib.Adaptor.YAdaptor) $=
				(
					/ @ "functions %CopyFile with destination path parameters"
						$=
					(
						* $comp "wrongly deleted source when source is the \
							same as destination" $since b637 $dep_from
							"reserved file",
						+ "parameters 'size_t = 1, bool = {}' to allow \
							possible overwriting and sharing between link \
							instances"
					),
					/ @ "functions %CopyFile with source path parameters" $=
					(
						* "destination file created when source file access \
							failed" $since b637,
						(
						+ "source mode parameter 'mode_t = DefaultPMode()'";
						* $comp "wrong mode '0'" $since b637
							// This would fail unless mode parameter is \
							qignored, e.g. on Win32, but still essentially \
							wrong.
						)
					)
				),
				+ "2 functions %FetchNumberOfLinks"
			),
			+ 'using WindowStyle = unsigned long;' @ "platform %Win32"
				@ %HostedGUI,
			/ "all 2 function %IsDirectory" @ "platform %Win32" @ %NativeAPI
				-> ("functions" ^ $dep_from "%FileAttributes"
				@ %'YCLib_(Win32)'.MinGW32),
			/ DLDI %FileSystem $=
			(
				/ "member function %HDirectory::GetNodeCategory" ^ $dep_from
					("%FileAttributes" @ %'YCLib_(Win32)'.MinGW32)
				/ "constructor %DirectorySession" @ %FileSystem
					^ "%ystdex::throw_error"
			),
			/ DLDI ("constructor %MappedFile" @ %MemoryMapping,
				"function %MakePipe" @ %Host, "constructor %DirectorySession"
				@ %FileSystem) ^ "%ystdex::throw_error",
			- $revert(b475) $orig (@ %FileSystem) "function %GetFileSizeOf"
				$dep_from 'using platform::FileDescriptor;'
				@ YSLib.Adaptor.YAdaptor
				// Use %FileDescriptor::GetSize instead.
		),
		/ "'unsigned long' Win32 error code" @ "inline namespace %Windows"
			-> ('ErrorCode' $dep_from %'YCLib_(Win32)'.MinGW32) $effective
			@ "function %ConvertToErrno" @ %'YCLib_(Win32)'.MinGW32
			@ "platform %Win32"
		/ "'unsigned long' Win32 window style" -> ('WindowStyle' $dep_from
			%'YCLib_(Win32)'.MinGW32) $effective
			@ %(YCLib.HostedGUI, Helper.HostedUI) @ "platform %Win32"
		/ %YSLib $=
		(
			/ @ %Adaptor.YAdaptor $=
			(
				- 'using platform::GetFileSizeOf;',
				/ @ "namespace %YSLib.IO" $=
				(
					+ 'using platform::FetchNumberOfLinks;' $dep_from
						("%platform::FetchNumberOfLinks" @ %YCLib.FileSystem),
					+ "alias-declarations %(mode_t, FileDescriptor, \
						UniqueFile, DefaultPMode, omode_conv, omode_convb, \
						EnsureUniqueFile) from namespace %platform",
					/ "aliases %(GetFileAccessTimeOf, \
						GetFileModificationTimeOf, \
						GetFileModificationAndAccessTimeOf)"
						@ "namespace %YSLib" >> "namespace %YSLib::IO"
				),
				* $re_add(b638) DD "missing '!'" @ "end of '/*'"
					@ "multiline Doxygen comments" @ "namespace %YSLib" $since
					b265
			),
			/ %Service $=
			(
				/ %FileSystem $=
				(
					+ "functions %ClearTree" ^ $dep_from "%TryRemove",
					/ @ "functions %DeleteTree" $=
					(
						/ $impl $dep_from ^ "%ClearTree";
						* $comp "deletion failure ignored silently" $since b538
						* $comp "failure if any read-only files are in the \
							subdirectories" $since ? $dep_from
							("%uremove" @ %YCLib.FileIO)
					),
					/ DLDI "simplified %EnsureDirectory"
						^ "%ystdex::throw_error",
					+ "member function %GetLeafString" @ "class %Path"
				),
				+ "function %OpenFile" @ "namespace %IO" @ %File $dep_from
					("%IO::(UniqueFile, mode_t)" @ %Adaptor.YAdaptor)
			),
			/ %UI $=
			(
				+ 'ynothrow' @ "function %Contains"
					@ ("class %SequenceViewer" @ %Viewer; "class %TextList" \
					@ %ListControl; "class %ListBox" @ %ComboList),
				+ 'const' @ "function %Contains" @ ("class %TextList" \
					@ %KistControl; "class %ListBox" @ %ComboList),
				/ %ComboList $=
				(
					/ @ "class %FileBox" $=
					(
						+ "function %GetPath with index parameter";
						/ DLDI "simplified path opertions" @ "constructo, \
							function %GetPath without parameters" ^ "%GetPath"
					),
					* $re_add(b638) DD "missing '!'" @ "end of '/*'"
						@ "multiline Doxygen comments" @ "protected data member \
						%pTetList" $since b534 $orig (@ "%lstText" $since b282)
						@ "class %ListBox"
				)
			)
		)
	),
	/ $forced DLDI "constructor %ShlHexBrowser" @ %YReader.ShlReader $dep_from
		("%IO::GetFileModificationAndAccessTimeOf"
		@ %YFramework.YSLib.Adaptor.YAdaptor)
),

b638
(
	/ %YFramework $=
	(
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ 'using FileID = std::uint64_t;',
			+ 'using VolumeID = std::uint32_t;';
			+ "2 functions %QueryFileNodeID",
			(
			+ "constructor %Win32Exception with 'const char*' parameter as \
				enclosing function name";
			/ $impl "simplified macro %YCL_WrapCallWin32";
			+ "macro %YCL_WrapCallWin32F" ^ $dep_from
				("%yfsig" @ %YBase.YDefinition);
			+ "macro %YCL_CallWin32F"
			),
			(
			+ "support for non string literal parameter '_msg'"
				@ "macro %YCL_WrapCallWin32_Trace";
			+ "macro %YCL_WrapCallWin32F_Trace"
				^ $dep_from ("%yfsig" @ %YBase.YDefinition);
			+ "macro %YCL_CallWin32F_Trace"
			),
			+ '&' @ "parameter" @ "all 2 constructors %DirectoryFindData"
		),
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				/ DLDI ^ '_O*' @ "platform %Win32" ~ 'O_*',
				(
				+ "alias %FileNodeID";
				+ "inline functions %operator(=; !=) for %FileNodeID",
				+ "function %IsNodeShare for %FileNodeID"
				),
				/ @ "class %FileDescriptor" $=
				(
					+ "function %GetNumberOfLinks",
					+ "function %GetNodeID" $dep_from ("%FileNodeID",
						"%QueryFileNodeID" @ %'YCLib_(Win32)'.MinGW32),
					+ "static function %NodeCompare"
				),
				+ "function %IsNodeShared for %FileDescriptor parameters"
					^ $dep_from "%FileDescriptor::NodeCompare",
				+ "2 function %IsNodeShared for path parameters",
				/ @ "functions %HaveSameContents" $=
				(
					+ "overloading for 'const string&' parameters",
					* "missing check file node identity" $since 636
						// It is not guaranteed the same file can be opened \
							more than once.
				),
				* "wrong error condition detection"
					@ ("function templates %(TryRemove, TryUnlink)" $since b634;
					$comp "function %EnsureUniqueFile" $since b637),
				/ "function %GetDefaultPermissionMode" => "%DefaultPMode",
				/ @ "all 2 functions %CopyFile with path string as 1st \
					parameter" $=
				(
					* "unlink failure" @ $since b637 $dep_from
						"%EnsureUniqueFile",
					+ "default argument '= DefaultPMode()'" $dep_from
						"%DefaultPMode"
				),
				* "exception thrown even if source opened successfully"
					@ "all 2 functions %CopyFile with path string as 2st \
					parameter" $since b637,
				+ $dev 'YB_STATELESS' @ "functions %(omode_conv, omode_convb)"
			),
			/ %FileSystem $=
			(
				/ @ "%function %platform::FAT::CheckColon" @  $=
				(
					* $re(b637) "wrong exception-specification" $since b610
						$= (- 'ythrow(std::system_error)'),
					+ $dev 'YB_PURE'
				),
				- DLDI "redundant null pointer check"
					@ "constuctor %DirectorySession" @ "platform %Win32"
			)
		),
		/ DLDI "simplified Win32 calls" ^ ("%YCL_WrapCallWin32F"
			~ "%YCL_WrapCallWin32" $effective @ %YCLib_'(Win32)'.MinGW32,
			"%YCL_CallWin32F" ~ "%YCL_CallWin32" $effective @ %(YCLib.(
			FileSystem, Host, HostedGUI), YCLib_'(Win32)'.(Consoles, MinGW32),
			Helper.Environment), "%YCL_CallWin32F_Trace"
			~ "%YCL_CallWin32_Trace" $effective
			@ %(YCLib.(Host, HostedGUI), YCLib_'(Win32)'.MinGW32)),
		+ 'YB_ATTR(returns_nonnull)' @ ("functions %(InitScrUp, InitScrDown)"
			@ %'YCLib_(DS)'.DSVideo, "all 2 functions %TranslateTime"
			@ %Helper.ShellHelper),
		/ $revert(b459) $dev $build "disabled warning C4520" @ "Microsoft VC++ project",
			// It seems that the bug is no longer in Microsoft VC++ 2015.
	),
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			+ "macros %(yfname, yfsig)";
			* $re_add(b637) DD "missing '!'" @ "end of '/*'" @ "multiline \
				Doxygen comments" @ "macros %(YPP_Concat, YPP_Join)" $orig
				(@ "macros %(yjoin, yJOIN)" $since b409)
		),
		/ %YStandardEx $=
		(
			/ %CStandardIO $=
			(
				+ $dev 'YB_PURE' @ "all 2 functions %openmode_conv",
				* $re_add(b637) DD "missing '!'" @ "end of '/*'"
					@ "multiline Doxygen comments"
					@ ("all 2 functions %openmode_conv" $since b326,
					"member function %ifile_iterator::operator++" $since b301)
			)
			/ DLDI @ %CString $=
			(
				/ "%strcpycat" !^ 'YB_UNLIKELY',
				/ "simplified %strcatdup"
			)
		)
	),
	/ DLDI "simplified %FilterExceptions calls" ^ 'yfsig' $effective
		@ %(YFramework.(YCLib_'(Win32)'.MinGW32, 'YCLib_(DS)'.DSIO,
		Helper.HostRenderer, YCLib.HostedGUI), YReader.ShlReader,
		(YDE.ImageBrowser,
		Tools.(SXML2XML, RevisionPatcher, ProjectGenerator)).Main)
),

b637
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				- $dev "%CHRLib header dependency" $=
				(
					/ "inline function %ConvertToMBCS" -> "non-inline function",
					- $revert(b538) "static assertions for %CHRLib types"
				),
				* $re_add(b633) DD "missing '!'" @ "end of '/*'" @ "multiline \
					Doxygen comments" @ ("macros %(YCL_FS_StringIsCurrent, \
					YCL_FS_StringIsParent, YCL_FS_CharIsDelimiter, \
					YCL_FS_StringIsRoot)" $since b409, ("enum \
					%EntryData::Offsets" $since b609, "alias %VolumeLabel"
					$since b610) @ "namespace %platform_ex"),
				/ $forced DLDI $dep_from %YBase.YStandardEx.Exception
			),
			+ '#	undef CopyFile' @ "platform %Win32" @ %NativeAPI,
			/ %FileIO $=
			(
				+ "function %EnsureUniqueFile",
				+ "4 functions %CopyFile",
				/ DLDI "simplified throwing",
				/ @ "class %FileDescriptor" $=
				(
					(
					/ "function %SetMode" => "%SetTranslationMode";
					+ "function %SetMode"
					),
					+ "functions %(GetFlags, SetFlags, GetMode)",
					/ @ "functions %(SetBlocking, SetNonblocking)" $=
					(
						(
						/ "enabled" @ 'YCL_API_POSIXFileSystem'
							~ !"platform %Win32";
						* $dev $doc "wrong platform description"
							@ "function %SetNonblocking" $since b496
						),
						* "wrong return value" @ "%::fcntl call failed"
							@ !"platform %Win32" $since b496,
						/ DLDI "simplified" ^ $dep_from
							"%(SetBlocking, SetNonblocking)",
						/ "set %errno to %ENOSYS and return '-1'" ~ 'return 0;'
							@ !'YCL_API_POSIXFileSystem'
					)
				),
				/ DLDI @ "platform %Win32" @ "function %SetBinaryIO",
				+ "function %HaveSameContents for 'const char*' path"
			)
		),
		/ DLDI %'YCLib_(DS)'.DSIO $=
		(
			/ "simplified member function %SectorCache::Flush"
				@  ^ "%std::(all_of, bind)",
			/ $forced $dep_from %YBase.YStandardEx.Exception
		),
		/ %'YCLib_(Win32)'.MinGW32 $=
		(
			+ "2 functions %QueryFileLinks",
			/ "missing 'ynothorwv'" @ "function %MakeFile#4" $since b632
		)
	),
	- ($re_ex(b583) @ %YSTest) "unnecessary curly braces around variables"
		@ "build-all.sh" @ %YDE,
	/ %YBase.YStandardEx $=
	(
		/ @ %Exception $=
		(
			/ "all 2 inline function %throw_system_error"
				-> "3 function templates %throw_error";
			* "wrong exception-specification" $since b610
				// Since there is no guarantee for construction of \
					%std::system_error, excplicit dynamic exception \
					specification should be avoided.
		),
		/ $forced DLDI @ %PseudoMutex ^ $dep_from ("%throw_error" @ %Exception)
	)
),

b636
(
	/ %YBase.YStandardEx $=
	(
		/ "struct %pseudo_output" @ %Any >> %Ref $=
		(
			/ "function %operator=" $=
			(
				+ ('const'; 'yconstfn'),
				- "unnecessary packed template parameter",
				/ "avoided self constructor to initialize the parameter"
			),
			+ "constructor template",
			+ "operator %()"
		),
		+ "metafunctions %(nonvoid_result_t, object_result_t)" @ %Ref,
		/ %Functional $=
		(
			+ "function template %invoke_nonvoid" $dep_from
				("%nonvoid_result_t" @ %Ref),
			+ "support for non-object result type"
				@ "function template %retry_on_cond",
		),
		+ %InputStream
			$= (+ "function template %stream_equal"),
		+ %StreamBuffer
			$= (+ "function template %streambuf_equal")
	),
	/ %YFramework $=
	(
		/ $re_ex(b634) DLDI %'YCLib_(DS)'.DSIO $=
		(
			/ "member function %(Partition::RemoveEntry, DEntry::AddTo), \
				constructor %DEntry#5" ^ $dep_from
				("%ystdex::retry_on_cond" @ %YBase.YStandardEx.Functional),
			/ "simplified member function %FileInfo::TryRead"
				^ "%ystdex::(retry_on_cond, exchange)"
		),
		/ %YCLib.FileIO $=
		(
			+ "assertion to ensure nonnull parameter" @ "function %RetryClose"
				^ "%Nonnull",
			* $impl "workaround not covered debug configuartions"
				@ "platform %DS"
				@ "member function %FileDescriptor::WriteContent" $since b635
				// It is unknown why only debug configurations are effected.
				$= (/ '#if YCL_Android'
					-> '#if YB_IMPL_GNUCPP < 50000 && !defined(NDEBUG)')
		)
	),
	/ %Tools $=
	(
		/ "concurrency tasks run" $=
		(
			+ "printed information when enqueueing the task",
			* "printed too more tasks cmd line than actually executed"
				@ %SHBuild.Main $since b539
				// The command should be printed just before being called \
					rather than enqueued.
		),
		* "missing update of installing 'include' directory for platform %Win32"
			$since b633
			// 'MinGW32/include' now has no files, so the path is wrong. 'Win32' \
				is missed to deploy.
	)
),

b635
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(

			/ %Service.FileSystem $=
			(
				* "missing length check" @ "function %is_delimiter"
					@ "class %YSLib::IO::PathNorm" $since b473 ($orig @ "class \
					%ystdex::file_path_norm<YSLib::String>" $since b409),
				/ @ "class %Path" $=
				(
					- "constructor for parameter 'const ucs2_t*'",
					/ "default argument" @ "constructor template with 2 \
						parameters" -> 'Text::CS_Default' ~ 'CS_Path',
					- "constructor for 'ucs2string&&' parameter",
					+ "constructor for %ypath parameter",
					/ @ "function %GetMBCS" $=
					(
						/ "default argument 'CS_Path'" -> 'Text::CS_Default';
						/ "swapped 2nd and 3rd parameters"
					)
				),
				/ "removed use of %CS_Path" @ $effective
					@ "functions %(ListFiles, EnsureDirectory, \
					VerifyDirectory, IsAbsolute)"
			),
			* $re_ex(b634) $comp "parameter as unparsed path component caused \
				wrong result" @ "handler" @ "event %Confirmed"
				@ "constructor %FileBox" @ %YSLib.UI.ComboList $since b600,
			- $revert(b402) 'using platform::CS_Path;' @ "namespace %YSLib::IO"
				@ %Adaptor.YAdaptor $dep_from "removal of path encoding"
		),
		/ %YCLib.FileSystem $=
		(
			/ $impl "function %LFN::ConvertToMBCS" !^ "%CS_Path";
			- $revert(b402) "%CS_Path" $dep_from %YSLib.Adaptor.Adaptor
		)
	),
	/ %YReader.ShlExplorer $=
	(
		* $comp "double delimiter" @ "paths component shown entered by list GUI"
			@ ("platform %Win32" $since b600, !"platform %Win32" $since b633)
			$dep_from ("%FileBox::GetPath" @ %YFramework.YSLib.UI.ComboList),
			// The wrong result is caused by %FileBox::GetPath since b600, \
				however for platform without the file system base path ended \
				with a delimiter (e.g. on Win32 it should ended with a \
				backslash), only when the path component was correct since \
				b633, it was shown.
		/ DLDI "path classifying" $dep_from "removed use of %CS_Path" $dep_to
			"removal of path encoding"
	),
	/ %Tools $=
	(
		/ DLDI %ProjectGenerator.Main $dep_from ("%Path::GetMBCS"
			@ %YFramework.YSLib.Service.FileSystem),
		/ DLDI %SHBuild.Main $dep_from %YFramework.YSLib.Service.FileSystem
	)
),

b634
(
	/ %YBase.YStandardEx $=
	(
		/ %Memory $=
		(
			+ "definition for class template specialization \
				%free_delete<_type[]> with static assertion \
				'is_trivially_destructible<_type>()'",
			/ @ "class template %temporary_buffer" $=
			(
				* "%pointer" $since b627,
				* "wrong return type" @ "function %get" $since b627,
				* "ill-formed constructor" $since b627
			)
		),
		+ "callable type support" @ ("function template %call_for_value"
			@ %Functional, "class %thunk" @ %Thunk),
		/ %Functional $=
		(
			+ "function template %retry_on_cond",
			/ @ "class template specializations %call_projection" $=
			(
				+ "member function template %invoke" ^ "%ystdex::invoke",
				+ "variadic template overloadings",
				/ DLDI "simplified trailing-return-type for tuple reference \
					parameter" ^ 'std::move' ~ 'yforward'
			),
			+ "class template %expand_proxy";
			/ "%operator()" @ "class template %expanded_caller" $=
			(
				- "overloading without 'const'",
				/ DLDI "simplified trailing-return-type" $dep_from
					("%expand_proxy", "variadic template overloadings"
					@ "%call_projection");
				* $comp "accepted invalid forwarding" $since b447
					// For example, prvalue arguments for lvalue reference \
						parameter were accepted.
			)
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				/ "function %TryClose" => "%RetryClose",
				(
				+ "(3 inline functions, function template) %MakePathString";
				+ "function templates %(TryRemove, TryUnlink)"
				),
				+ "2 static functions %WriteContent" @ "class %FileDescriptor"
			),
			/ "function template %RetryOnError" @ %YCLib $=
			(
				/ $impl ^ $dep_from ("%ystdex::retry_on_cond" @ %Functional);
				+ $comp "callable type support"
			)
		),
		/ DLDI "member functions" @ %'YCLib_(DS)'.DSIO $=
		(
			/ "simplified %AllocationTable::QueryLast" ^ ($dep_from
				("%ystdex::retry_on_cond" @ %YBase.YStandardEx.Functional),
				"%ystdex::exchange"),
			/ "simplified %Partition::RemoveEntry"
		),
		* $comp "parameter as unparsed path component caused wrong result"
			@ "member function %FileBox::GetPath" @ %YSLib.UI.ComboList $since
			b600
			// Since b600, the constructor of %Path is 'explicit', so it \
				should be cast to be parsed.
	),
	* "parent directory shown" ~ "file entries" @ %YReader.ShlExplorer $since
		b531
		// Since b531, call of %UpdateView in %ListBox on %TouchDown was \
			removed and %ViewChanged of %FileBox would not be called. So \
			user code should be changed.
),

b633
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				* "member function %HDirectory::GetNodeCategory"
					@ "platform %DS" $since b560,
				+ "2 functions %CreateHardLink" $dep_from %NativeAPI
			),
			/ %FileIO $=
			(
				* "missing 'YF_API'" @ "function %TryClose" $since b616,
				+ $lib 'YB_NONNULL(1)' @ "2 functions %(uaccess, uopen, \
					ufopen) with pointer parameters",
				+ $lib 'YB_NONNULL(1, 2)' @ "2 functions %ufopen without \
					pointer mode parameter"
			),
			+ '#undef CreateHardLink' @ "platform %Win32" @ %NativeAPI
		),
		/ %YSLib $=
		(
			/ "treated entries with directory and other attributes as \
				directories" @ "function %ListFiles" @ %Service.FileSystem,
			/ %Core.YCoreUtilities $=
			(
				+ 'YB_STATELESS' @ "function templates %(HalfDifference, 2 \
					IsInInterval, 2 IsInClosedInterval, 2 IsInOpenInterval)",
				+ $lib 'YB_PURE YB_NONNULL(2)' @ "function templates \
					%(SwitchInterval, SwitchAddedInterval)",
				/ "(function, function templates) %(FetchSign, \
					FetchSignFromInterval)" $=
				(
					- "function",
					/ @ "function template" $=
					(
						- 'const&' @ "argument types",
						/ "return type" -> 'std::int_fast8_t',
						+ 'YB_STATELESS'
					)
				)
			)
		),
		/ %'YCLib_(MinGW32)' -> %'YCLib_(Win32)' $=
		(
			/ %MinGW32 $=
			(
				/ '#if !YCL_Win32' -> '#if !YCL_MinGW32',
				- $revert(b412) '#undef GetObject'
					// It is redundant since b427 because this is already done \
						in %YCLib.NativeAPI.
				/ "class %RegistryKey, all 2 functions %FetchRegistryString"
					>> $dep_from %Registry,
				+ 'ynothrow' @ "functions %(ConvertToErrno, GetErrnoFromWin32)",
				+ 'YB_STATELESS' @ "function %ConvertToErrno"
			),
			* $re_add(b632) DD "missing '!'" @ "end of '/*'"
				@ "multiline Doxygen comments" @ ("class %WConsole" $since b304,
				"enum %WConsole::Style" $since b519) @ %Consoles
			+ %Registry
		),
		/ %'Helper_(MinGW32)' => %'Helper_(Win32)',
		+ "macro %YFM_Win32_YCLib_Registry" @ %YModules $dep_from
			%'YCLib_(Win32)'.Registry
	),
	/ @ "file explorer" @ %YReader $=
	(
		* $comp "missing '/' at end of directories" @ "platform %DS" $since b560
			$dep_from
			("%HDirectory::GetNodeCategory" @ %YFramework.YCLib.FileSystem),
		/ $comp "shown '\' at end of directory links" @ "platform %Win32"
			$dep_from @ "function %ListFiles"
			@ %YFramework.YSLib.Service.FileSystem
	),
	/ $forced "including paths"
		@ "%(SHBuild-bootstrap.sh, SHBuild-YSLib-common.sh)"
		@ %Tools.Scripts $dep_from %YFramework.'YCLib_(Win32)',
	/ @ "Microsoft VC++ project" @ %YBase $=
	(
		/ $revert(b457) "warning level" -> '/W3',
			// To eliminate Microsoft VC++ 2015 warning: C4514.
		/ $dev $build "disabled warning LNK4006"
	),
	/ %Tools.ProjectGenerator $=
	(
		/ $design "exception decription" -> '::main' ~ 'main'
			@ "function %::main",
		+ $forced "searching 'Win32' directory for platform %MinGW32" $dep_from
			%YFramework.('YCLib_(Win32)', 'Helper_(Win32)')
	),
	/ $re(b386) $dev $doc $term "all" ('标量' -> '纯量') $effective
		@ %(YFramework.YSLib.Core.YCoreUtilities, Documentation.Designation);
	/ $dev $repo $re_add(b611) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.YCommon.("%ycommon.cpp" => "%YCommon.cpp")
),

b632
(
	/ %YCLib $=
	(
		/ "fetching time" @ %FileIO $=
		(
			/ DLDI "merged fetching by file descriptor and paths",
			- "file name" @ "exception message" @ "platform %Win32",
			/ DLDI "simplified standard library implementation \
				feature-dependent declarations" $=
			(
				+ "'#undef __STRICT_ANSI__' before including headers"
				- "declarations %(fileno, pclose, popen)" @ "platform %DS",
				/ @ "platform %Win32 using MinGW.org headers" $=
				(
					- $revert(b464) "declarations %(_fileno _wfopen)",
					+ '#undef _fileno'
				)
			),
			/ @ "routines 'GetFile*TimeOf' of parameter with path" $=
			(
				/ $comp "reading file by default" ^ ("link" ~ "target")
					@ "platform %Win32" $dep_from ("%QueryFileTime"
					@ 'YCLib_(MinGW32)'.MinGW32),
				+ "last parameter 'bool = {}' to allow following the link"
					// The behavior is not specified before b621. It seems \
						that Win32 implementation did not following the link.
			)
		),
		/ %FileSystem $=
		(
			/ $forced DLDI @ "%function HDirectory::GetNodeCategory" $dep_from
				("%MakeFile" @ 'YCLib_(MinGW32)'.MinGW32),
			- $revert(b628) "%Device support" @ "platform %Win32"
				@ "member function %HDirectory::GetNodeCategory"
				// %FILE_ATTRIBUTE_DEVICE is reserved, thus should not be \
					used. See https://msdn.microsoft.com/zh-cn/library/windows/desktop/gg258117(v=vs.85).aspx.
		),
		* $re_add(b630) DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen \
			comments" @ ("functions 'u*'" $orig (@ %FileSystem $since b476),
			"functions 'omode_conv*'" $since b617, ("%(FullWrite, GetSize)"
			$since b624, "'Get*Time'" $since b628) @ "member functions"
			@ "class %FileDescriptor")
	),
	/ %MinGW32 $=
	(
		* "missing 'const'" @ "parameter" @ "function %ConvertTime" $since b544,
		* $re_add(b630) DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen \
			comments" @ "class %DirectoryFindData" $since b549,
		(
		+ "enum %FileAttributesAndFlags";
		+ 'DefBitmaskEnum(FileAttributesAndFlags)';
		/ @ "function %MakeFile" $=
		(
			/ "last parameter 'unsigned long = FILE_ATTRIBUTE_NORMAL \
				| FILE_FLAG_BACKUP_SEMANTICS'" -> 'FileAttributesAndFlags \
				= FileAttributesAndFlags::NormalAll',
				// Not tracing reparse point by default.
			+ "3 inline overloadings"
		)
		),
		/ @ "functions %QueryFileTime with path parameter" $=
		(
			+ "parameter 'bool = {}' at last",
			/ "forbade tracing reparse point by default"
		)
	),
	/ %YReader $=
	(
		/ DLDI "file time querying" @ "constructor %ShlHexBrowser"
			^ "%GetModificationAndAccessTimeOf" ~ "::stat" @ %ShlReader,
		/ "class %HexModel" @ %HexBrowser $=
		(
			/ "function %Seek" ^ "%seekoff" ~ "%seekpos";
			* $forced DLDI "strict ISO C++ conforming for calling %seekpos \
				without valid result from allowed calls"
				@ "function %UpdateData" $since b597
				// This might cause undefined behavior, see ISO C++11 \
					[filebuf.virtuals]/17.
		)
	),
	* $comp "missing '\' at end of directories" @ "file explorer"
		@ "platform %Win32" @ %YReader $since b628 $dep_from
		("%HDirectory::GetNodeCategory" @ %YFramework.YCLib.FileSystem)
),

b631
(
	/ %YFramework $=
	(
		/ %'YCLib_(DS)' $=
		(
			/ %DSIO $=
			(
				/ DLDI "member function %Partition::GetLabelString"
					^ "%ystdex::replace_cast" ~ 'reinterpret_cast',
				* $doc "missing '!'" @ "end of '/*'"
					@ "multiline Doxygen comments" @ "class %Disc" $since b604,
				/ DLDI "function %Mount" ^ "%ystdex::aligned_store_cast"
					~ 'reinterpret_cast'
			),
			/ DLDI "all 2 'reinterpret_cast<platform::PixelType*>'" @ %DSVideo
				-> 'ystdex::replace_cast<platform::PixelType*>'
		),
		/ @ "class template %COMPtr" @ %'YCLib_(MinGW32)'.COM $=
		(
			* $doc "missing '!'" @ "end of '/*'" @ "multiline Doxygen comments"
				$since b412,
			/ DLDI "all 4 'REFIID'" -> 'const ::IID&',
			/ DLDI "all 5 'reinterpret_cast'" -> 'ystdex::replace_cast'
			 // This should work for casting to 'void**'.
		),
		/ DLDI "constructor %Window" @ "platform %Win32" @ %Helper.HostWindow
			^ ("%ystdex::pun_storage_t" ~ "byte[]";
			"%ystdex::replace_cast" ~ 'reinterpret_cast'),
		/ %YSLib.Adaptor $=
		(
			/ DLDI "constructor %HBitmap#2" @ %Image
				^ "%ystdex::aligned_store_cast" ~ 'reinterpret_cast',
			+ 'using platform::GetFileAccessTimeOf;',
				'using platform::GetFileModificationAndAccessTimeOf'
				@ "namespace %YSLib" @ %YAdaptor
		),
		/ DLDI @ "class %NativeHost" @ %'Helper_(Android)'.AndroidHost $=
		(
			/ "function template %Restore" ^ "%ystdex::aligned_store_cast"
				~ 'reinterpret_cast',
			* $doc "missing '!'" @ "end of '/*'"
				@ "protected data member %thrdMain" $since b502
		),
		/ %YCLib $=
		(
			/ $dev $impl "non reserved macro %MAP_FAILED pollution"
				@ %MemoryMapping $since b324,
			/ DLDI %JNI ^ "%ystdex::replace_cast" ~ 'reinterpret_cast',
			/ @ "platform %Win32" @ %HostedGUI $=
			(
				/ DLDI "member functions %(Clipboard::Send, \
					WindowMemorySurface::UpdatePremultiplied)"
					^ "%ystdex::aligned_store_cast" ~ 'reinterpret_cast',
				/ DLD @ "class %WindowRegionDeviceContext" $=
				(
					/ "type" @ "paint structure buffer data member"
						-> ('ystdex::aligned_storage_t<72, 8>' @ 'YCL_Win64',
						'ystdex::aligned_storage_t<64, 4>'
						@ "platform %Win32 otherwise") ~ 'byte[64]';
					(
					+ $comp "platform %Win64 support",
					(
					/ $impl ^ "%ystdex::aligned_store_cast"
						~ 'reinterpret_cast';
					- $revert(b592) $impl "static assertion" @ "destructor"
					)
					)
				)
			),
			(
			+ "(functions, function template) %(ucast, wcast)" @ %YCommon
				^ "%ystdex::(uchar_t, replace_cast)";
			/ DLDI "simplified" %FileIO
				^ ("%aligned_store_cast", "%(ucast, wcast)" @ %YCommon);
			),
			- $revert(b544) "function template %GetFileModificationTimeOf"
				$dep_to "removal of getting modification time template",
			/ $dev @ "all 3 functions %GetFileModificationTimeOf, member \
				functions %FileDescriptor::(GetAccessTime, \
				GetModificationTime, GetModificationAndAccessTime)" @ %FileIO $=
			(
				/ $lib $impl "simplified",
				/ @ !"platform %Win32" $=
				(
					/ "function with path parameters" ^ '::(stat, lstat)'
						~ "%FileDescriptor"
						// This allows file to be not opened. '::lstat' is \
							used if available. For platform %DS, '::stat' is \
							used as a fallback. This also alter the behavior \
							for links.
					/ re(b629) "allowed querying shared file owned by unique \
						process"
				)
			),
			/ DLD "function %GetFileModificationTimeOf"
				-> "non-inline function",
			+ "3 functions %(GetFileAccessTimeOf, \
				GetFileModificationAndAccessTimeOf)"
		),
		* "strict ISO C++11 code conforming about wrong use of \
			braced-init-list to be deduced from %MakeFile call"
			@ '!YB_IMPL_GNUCPP' $effective @ %(YCLib.FileSystem, \
			'YCLib_(MinGW32)'.MinGW32) $since b453,
			// Also to avoid Clang++ warning: [-Wfuture-compat]. See $2015-09 \
				@ %Documentation::Workflow::Annual2015.
		* "wrong month value (always 1 smaller than real value)"
			@ "function %TranslateTime" @ %Helper.ShellHelper $since b307 $orig
			(@ %YReader.ShlReader $since b264)
	),
	/ %YBase.YStandardEx $=
	(
		/ %TypePun $=
		(
			* DD "comments" @ "function templates %aligned_cast" $since b630,
			/ $re_ex(b630) DLDI "%is_aligned_compatible" ^ ('!', '<') ~ '<='
				// To be consistent with %is_aligned_storable.
		),
		* "strict ISO C++11 code conforming about wrong workaround for invalid \
			code about default argument for template non-type parameters"
			$effective @ %(Rational $since b561 $orig, BitSegment $since b507
			$orig @ (%Iterator $since b458))
			// See $2015-09 @ %Documentation::Workflow::Annual2015.
	),
	/ $forced DLDI @ %Tools.SHBuild.Main $dep_from
		"removal of getting modification time template",
	* $comp "wrong month value of date shown"
		@ "hexadecimal browser file information on UI" @ %YReader.ShlReader
		$since b264 $dep_from %Helper.ShellHelper
),

b630
(
	/ %YBase.YStandardEx $=
	(
		/ DLDI %Cast $=
		(
			/ "parameter to be cast" -> 'v' ~ 'x',
				// To be consistent to normative text of ISO C++ cast notation.
			/ "simplified %enable_if_t argument" @ "function template %pvoid"
				^ "%or_",
			/ "%general_cast" ^ "%and_"
		),
		/ %Rational $=
		(
			/ DLDI "simplified %enable_if_t argument" @ "2 constructor template"
				@ "class template %fixed_point",
			* $doc "missing '!'" @ "end of '/*'" @ "multiline Doxygen comments"
				@ "function templates %(round_in_nocheck, round_in)" @ %Rational
				$since b588
		),
		/ %TypeOperation $=
		(
			+ "unary type traits %(is_copyable, is_moveable, \
				is_nothrow_copyable, is_nothrow_moveable)",
			+ "unary type traits %(is_trivially_copyable, \
				is_trivially_moveable)"
				@ '!YB_IMPL_GNUC || YB_IMPL_GNUCPP >= 50000',
			/ DD "description" @ "Doxygen groups %*_traits" $=
			(
				^ "plural",
				* DD "wrong description" @ "group %transformation_traits"
					$since b590
			),
			+ "unary type traits %((is_object_or_void; is_object_pointer), \
				is_pointer_to_object, is_function_pointer)"
		),
		/ @ "class %optional" @ %Optional $=
		(
			/ DLDI "simplified static assertions"
				@ "all 2 member function templates %value_or"
				^ $dep_from ("%is_copyable" @ %TypeOperation),
			/ DLD "simplified noexcept-specification" @ "2 %operator=, %assign"
				^ $dep_from ("%is_nothrow_moveable" @ %TypeOperation)
		),
		/ DLD "simplified member function %dismiss" @ "noexcept-specification"
			@ "class template %state_guard" @ %ScopeGuard
			^ $dep_from ("%is_nothrow_copyable" @ %TypeOperation),
		+ DLD "simplified static assertions" @ "class template %nptr" @ %Point
			^ ($dep_from "%ystdex::is_nothrow_copyable"
			@ %YBase.YStandardEx.TypeOperation),
		/ %TypePun $=
		(
			* $doc "missing '!'" @ "end of '/*'" @ "multiline Doxygen comments"
				@ "class template %pod_storage" $since b629
				$orig (@ "union %any_pod_t" @ %Utilities $since b247)
			+ "transformation trait %pun_storage_t",
			* "missing constraining destination type"
				@ "binary type trait %is_trivially_replaceable" $since b629,
			/ "%is_trivally_replaceable" -> "%is_trivially_replaceable" $=
			(
				* "spelling error" $since b629,
				/ "restricted pointer version type to object pointer"
					^ $dep_from ("%is_object_pointer" @ %TypeOperation)
					~ "%is_pointer"
			),
			+ "2 function templates %(aligned_cast, aligned_store_cast, \
				aligned_replace_cast)",
			+ "metafunction %enable_if_replaceable_t",
			(
			+ DD "Doxygen group aligned_type_traits"
				@ "group %binary_type_traits",
			/ "swapped type parameters",
				@ "%(is_aligned_placeable, is_aligned_storable)";
				// To be consistent with other traits here.
			/ DD "moved all traits" @ "group %binary_type_traits"
				>> "group %aligned_type_traits"
			),
			* $forced DLDI "member function template %pod_storage::access"
				$dep_from "%is_aligned_storable"
		),
		/ %Utilities $=
		(
			* $doc "missing '!'" @ "end of '/*'" @ "multiline Doxygen comments"
				@ "function template %exchange" $since b517,
			/ "%function template %swap_underlying"
				^ "aligned underlying storage" ~ "byte array type"
				$= (/ $impl ^ $dep_from
					("%(pun_storage_t, aligned_replace_cast)" @ %TypePun))
		),
		/ %CString $=
		(
			(
			+ "alias %uchar_t";
			+ "overloadings with pointer types of %uchar_t"
				@ "%(ntctsnlen, ntctscpy, ntctsncpy)" ^ "%replace_cast"
			),
			+ $lib "%YB_NONNULL attributes for pointer arguments"
				@ "(functions, function templates) with nonnull string",
			(
			+ "metafunction %enable_if_irreplaceable_char_t";
			/ DLDI "simplified %enable_if_t arguemnt for irreplaceable \
				character types" @ "function template %ntctsncpy"
				^ "%enable_if_irreplaceable_char_t"
			),
			/ DLDI "simplified %enable_if_t arguemnt for trivially replaceable \
				character types" @ "2 function templates %ntctsncpy"
				^ $dep_from ("%enable_if_replaceable_t" @ %TypePun)
		),
		* $forced DLDI "default argument" @ "class tempalte %value_handler"
			$dep_from ("%is_aligned_storable" @ %TypePun)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ DLD "post condition for type"
				@ "classes %(CompactPixmap, CompactPixmapEx)" @ %Service.YGDI
				^ ($dep_from "%ystdex::is_nothrow_moveable"
					@ %YBase.YStandardEx.TypeOperation),
			+ DLD "simplified static assertions"
				@ "class template %GBinaryGroup" @ %Core.YGDIBase
				^ ($dep_from "%ystdex::is_nothrow_copyable"
				@ %YBase.YStandardEx.TypeOperation),
			/ %Service.YGDI $=
			(
				* DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen \
					comments" @ "multiple declarations" $since b296,
				+ $dev "static assertions to ensure %(CompactPixmap, \
					CompactPixmapEx) meeting to %ystdex::is_nothrow_moveable"
					// Because the type trait requires complete types, they \
						are put in namespace scope.
			)
		),
		/ %CHRLib.CharacterProcessing $=
		(
			+ 'using ystdex::uchar_t;'
				$dep_from ("%uchar_t" @ %YBase.YStandardEx.CString),
			* DD "missing '!'" @ "end of '/*'" @ "multiline Doxygen comments"
				@ "MBCS conversion functions" $since b544
		),
		/ $forced DLDI "desturctor %WindowRegionDeviceContext"
			@ "platform %Win32" @ %HostedGUI $dep_from
			("%ystdex::is_aligned_storable" @ %YBase.YStandardEx.TypePun)
	)
),

b629
(
	/ %YBase.YStandardEx $=
	(
		+ "metafunction %common_underlying_t" @ %TypeOperation,
		+ %Enum
			$= (+ "unary type trait %is_enum_union, trasformation traits \
				%(wrapped_enum_traits, wrapped_enum_traits_t), class template \
				%enum_union"; "function templates %underlying"),
		* "missing returning type" @ "lambda-expression" @ "constructor"
			@ "class template %temporary_buffer" @ %Memory $since b627,
			// G++ 5.2 accepts but error occurred on Clang++ 3.6.
		/ "restricted function template %underlying only when type meets \
			%is_enum" @ %Utilities,
		+ %TypePun $=
		(
			+ "binary type trait %is_trivally_replaceable" $dep_from
				"moving aligned traits";
			+ "2 function templates %replace_cast"
		),
		/ "binary type traits %(is_aligned_compatible, is_aligned_placeable, \
			is_aligned_storable, is_aligned_replaceable)" @ %TypeOperation
			>> %TypePun $dep_to "moving aligned traits",
		/ "class template %pod_storage" @ %Any >> %TypePun,
		/ %CString $=
		(
			/ "simplified %enable_if_t argument" @ "3 function templates \
				%ntctsncpy" ^ $dep_from ("%is_trivally_replaceable" @ %TypePun),
			/ DLDI ^ $dep_from ("%ystdex::replace_cast" @ %TypePun)
				~ "all 'reinterpret_cast'" @ "2 function templates %ntctsncpy"
		)
	),
	/ %YFramework $=
	(
		/ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			(
			(
			+ "enum class %AccessRights, FileSpecificAccessRights";
			+ 'DefBitmaskEnum(AccessRights)',
			+ 'DefBitmaskEnum(FileSpecificAccessRights)',
			(
			+ "alias %FileAccessRights" ^ $dep_from ("%ystdex::enum_union"
				@ %YBase.YStandardEx.Enum);
			+ 'DefBitmaskOperations(FileAccessRights, \
				ystdex::wrapped_enum_traits_t<FileAccessRights>)'
			)
			),
			+ "enum class %CreationDisposition";
			+ "function %MakeFile",
			),
			+ "3 functions %QueryFileTime"
		),
		/ @ "member function %HDirectory::GetNodeCategory" @ "platform %Win32"
			@ %YCLib.FileSystem $=
		(
			/ DLDI "simplified" ^ $dep_from ("%platform_ex::MakeFile"
				@ 'YCLib_(MinGW32)'.MinGW32) ~ "%::CreateFileW";
			* "missing check of %INVALID_HANDLE_VALUE for %CreateFileW call"
				$since b628
		),
		/ @ "class %FileDescriptor" @ %FileIO $=
		(
			(
			+ DLD "brace-or-equal-initializer '= -1'" @ "data member";
			/ DLDI "simplified default constructor" ^ "%DefDeCtor"
			),
			+ 'yconstfn' @ "all 3 inline constructors",
			/ @ "platform %Win32" @ "member functions \
				%FileDescriptor::(GetAccessTime, GetModificationTime, \
				GetModificationAndAccessTime), (functions, function template) \
				%GetFileModificationTimeOf" $=
			(
				+ $lib $design "initializer '{}' for %::FILETIME",
					// See $2015-09 @ %Documentation::Workflow::Annual2015.
				/ DLDI "simplified" ^ $dep_from ("%platform_ex::QueryFileTime"
					@ %'YCLib_(MinGW32)'.MinGW32);
				/ $comp "exception message"
					@ "%FileDescriptor::(GetAccessTime, GetModificationTime, \
					GetModificationAndAccessTime)"
			)
		)
	)
),

b628
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			- DLDI "including '<sys/stat.h>'" @ %(FileIO, FileSystem),
				// %YFM_YCLib_NativeAPI is sufficient.
			/ %FileIO $=
			(
				* $impl "out of synchronized exception message"
					@ "Win32 call" @ "platform %Win32" @ "member function \
					%FileDescriptor::GetModificationTime" $since b624,
				+ 'using FileTime = std::chrono::nanoseconds;',
				/ @ "class %FileDescriptor" $=
				(
					+ 'const' @ "functions %(operator*, GetModificationTime, \
						GetSize)",
					/ "return type" -> ($dep_from "%FileTime")
						~ "%std::chrono::nanoseconds",
					+ "functions %(GetModificationTime, \
						GetModificationAndAccessTimes)"
				),
				/ "return type" @ "all 3 %GetFileModificationTimeOf"
					-> ($dep_from "%FileTime") ~ "%std::chrono::nanoseconds",
				* "wrong exception string" @ ("member function \
					%FileDescriptor::GetModificationTime; function \
					%GetFileModificationTimeOf)" $orig (@ "function \
					%GetFileModificationTimeOf" @ %FileSystem) $since b544,
				/ DLDI "simplified %GetFileModificationTimeOf" ^ "%UniqueFile"
			),
			- $revert(b458) "workaround for Microsoft VC++ 2013"
				@ %(Video, FileSystem),
			/ @ "platform %Win32" @ "member function \
				%HDirectory::GetNodeCategory" @ %FileSystem $=
			(
				/ $re_ex(b416) "supported %Device";
				/ $impl ^ "%::(CreateFileW, GetFileType, GetFullPathNameW)"
					~ "%::_wstat"
					// Though %st_nlink from call of %::_wstat may be wrong, \
						the file type should be OK. However, it is not \
						effecicent for the use here.
			)
		),
		/ DLDI "simplified callback" @ "constructor %NativeHost"
			@ %'Helper_(Android)'.AndroidHost ^ "%std::bind",
		/ %'YCLib.(MinGW)'.MinGW32 $=
		(
			(
			+ "macro %YCL_WrapCallWin32";
			/ DLDI "simplified macro definition %YCL_CallWin32"
				^ "%YCL_WrapCallWin32",
			),
			(
			+ "macro %YCL_WrapCallWin32_Trace";
			/ DLDI "simplified macro definition %YCL_CallWin32_Trace"
				^ "%YCL_WrapCallWin32_Trace",
			),
			/ @ "private member function" @ "%DirectoryFindData" $=
			(
				/ "assertion" -> "exception handling" ^ ("%FilterExceptions",
					$dep_from "%YCL_WrapCallWin32");
				* $comp "wrong exception-specification" $since b421
			)
		),
		+ $dev "static assertions to ensure no throw copying of component type"
			@ "%GBinaryGroup" @ %YSLib.Core.YGDIBase
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			+ '&&' @ "1st function parameter" @ "%ystdex::bind1" @ %Functional,
				// To be consistent with %std::bind. See also \
					http://wg21.cmeerw.net/lwg/issue817.
			/ @ "class template %nptr" @ %Pointer $=
			(
				* "missing forcing no throw exception guarantee for \
					%NullablePointer requirements" @ "member functions \
					%(operator bool, swap)" $since (@ %Utilities $since b586),
					// ISO C++ [nullablepointer.requirements]/4 explicitly \
						specifies it.
				/ $re_ex(b598) "enhanced stricter static assertions to ensure \
					noexcept requirements",
				+ 'ynothrow' @ "all constructors"
			),
			/ "function template %exchange" @ %Utilities $dep_from
				("%__cpp_lib_integer_sequence" @ %YDefinition) $=
			(
				>> "inline namespace %cpp2014" \
					@ '__cpp_lib_exchange_function >= 201304 \
					|| __cplusplus > 201103L || YB_IMPL_MSCPP >= 1800',
				-> 'using std::exchange;' @ "inline namespace %cpp2014"
					@ !'__cpp_lib_exchange_function >= 201304 \
					|| __cplusplus > 201103L'
			),
			/ "inclusion condition" @ "inline namespace %cpp2014"
				@ %IntegerSequence $dep_from ("%__cpp_lib_exchange_function"
				@ %YDefinition) -> '__cpp_lib_integer_sequence >= 201304 \
				|| __cplusplus > 201103L' ~ '__cplusplus > 201103L',
			/ $dev %Memory $=
			(
				+ "all 1 feature-test macro %__cpp_lib_make_unique recommended \
					by WG21 N4200 when not defined" @ 'YB_IMPL_MSCPP >= 1800';
				/ $lib "simplified inclusion condition for %make_unique"
					@ "inline namespace %ystdex::cpp2014" !^ 'YB_IMPL_MSCPP'
			),
			(
			+ "all 1 feature-test macro %__cpp_lib_make_unique recommended by \
				WG21 N4200 when not defined" @ 'YB_IMPL_MSCPP >= 1900'
				@ %Functor;
			* $comp "template %equal conflicted with %std::equal"
				@ "inline namespace %ystdex::cpp2014" @ 'YB_MSCPP >= 1900'
				@ %Algorithm $since b627
				// See https://msdn.microsoft.com/en-us/library/Hh409293.aspx.
			),
			- "redundant 'using ystdex::nullptr;'" @ '!YB_HAS_BUILTIN_NULLPTR'
				@ %ScopeGuard
		),
		/ %YDefinition $=
		(
			+ "2 feature-test macros %(__cpp_lib_integer_sequence, \
				__cpp_lib_exchange_function) recommended by WG21 N4200 when \
				not defined" @ 'YB_IMPL_MSCPP >= 1900',
				// See https://msdn.microsoft.com/en-us/library/Hh409293.aspx.
			(
			+ "predefined feature-test macro %__cpp_constexpr recommended by \
				WG21 N4200 when not defined";
			/ "conditional macro definition %yconstexpr"
				@ ^ '__cpp_constexpr >= 201304' ~ 'YB_HAS_CONSTEXPR_CPP14',
			/ "conditional macro definition %yconstexpr_relaxed"
				^ '__cpp_constexpr >= 200704' ~ 'YB_HAS_CONSTEXPR'
			),
			- $revert(b313) "macro %YB_HAS_CONSTEXPR" $dep_from
				("%__cpp_constexpr", %YFramework.YCLib.(Video, FileSystem)),
			- $revert(b591) "macro %YB_HAS_CONSTEXPR_CPP14" $dep_from
				"%__cpp_constexpr",
			(
			+ "macro %__has_attribute";
			/ "allowed conditions" @ "macros %(YB_ALLOCATOR, YB_NORETURN, \
				YB_PURE, YB_STATELESS, YB_API)" ^ "%__has_attribute"
			)
		)
	),
	* "invalid 'ynothrow'" @ "getters with return type not guarantees non \
		throwing on copy/move" $effective @ %YFramework.('YCLib_(DS)'.DSIO
		$since b611, YCLib.Debug $since b498, YSLib.Adaptor.Font $since b277)
),

b627
(
	/ %YBase $=
	(
		/ %Memory $=
		(
			+ "function template and specialization %temporary_buffer_delete";
			+ "function template %temporary_buffer",
			/ @ "function templates %share_raw" $=
			(
				(
				/ "merged 3 function templates";
				+ $comp "support for more than one parameters after raw \
					pointers" $dep_to "multiple parameter share_raw"
				),
				+ "function template for %nullptr_t and other parameters",
			),
			- $revert(b589) "function templates %make_shared_guard" $dep_from
				"removal of make_shared_guard"
		),
		/ "inline namespace %cpp2014" @ %Algorithm $=
		(
			+ 'using std::equal',
			+ "2 function templates %equal"
				@ '!(__cpp_lib_robust_nonmodifying_seq_ops >= 201304 \
				|| __cplusplus > 201103L)'
				^ $dep_from ("%have_same_iterator_category" @ %IteratorTraits)
		),
		+ %IteratorTraits
			$= (+ "traits %have_same_iterator_category"),
		/ "metafunction %enable_for_iterator_t" @ %IteratorOperation
			>> %IteratorTraits,
		* "missing including <ystdex/type_op.hpp>" @ %Operators $since b278
	),
	/ @ "class %ImagePanel" @ %YDE.ImageBrowser.ImageControl $=
	(
		+ "function %ResetSize";
		/ DLDI "simplified menu item for resizing size" ^ "%ResetSize",
		* $resolve(#26) "%Tertiary key (middle mouse button) wrongly caused \
			very large scale of image being updated" $since b580
			// See issue #27.
	),
	/ %YFramework $=
	(
		/ @ "static member function %WindowThread::DefaultGenerateGuard"
			@ %Helper.HostRenderer $=
		(
			* "double guard destruction" @ 'YF_Multithread' $since b590
				$= (/ $impl ^ ("%share_raw" @ %YBase.YStandardEx.Memory)
					$dep_from "multiple parameter share_raw"
					~ "%ystdex::make_shared_guard" $dep_to
					"removal of make_shared_guard"),
			* $re(b626) DLDI "%YF_Multithread check" $since b589
		),
		/ %YCLib $=
		(
			/ %NativeAPI $=
			(
				+ "enumerators SetUserID, SetGroupID, VTX; PMode; All"
					@ "enum class %Mode",
				+ "function %HasExtraMode"
			),
			/ %FileIO $=
			(
				+ DLDI "static assertion to ensure underlying type of %Mode \
					same to %mode_t",
				/ @ '__GLIBCXX__' $=
				(
					* "wrong default mode" @ "constructor, function template \
						%open" @ "class templates %(ifstream, ofstream)"
						@ $since b619,
					+ "function %open with %UniqueFile and \
						%std::ios_base::mode parameters"
						@ "class template %basic_filebuf" @ %FileIO
						// This can at least be implemented also for Microsoft VC++, see http://stackoverflow.com/questions/2746168/how-to-construct-a-c-fstream-from-a-posix-file-descriptor.
				)
			)
		),
		* "wrong assertion" @ "member function %Partition::(WriteFSInfo, \
			CreateFSInfo)" @ %'YCLib_(DS)'.DSIO $since b611
	),
	/$doc "updated Doxygen file" $=
	(
		^  $re(b500) "Doxygen 1.8.10" ~ "Doxygen 1.8.7",
		/ "set %DOT_FONTNAME" -> 'Helvetica' ~ 'FreeSans.ttf',
			// Now this is the default value.
		/ "set %(DOT_MULTI_TARGETS, TEMPLATE_RELATIONS, HTML_DYNAMIC_SECTIONS)"
			-> 'YES' ~ 'NO',
		/ "%DOT_PATH" $=
		(
			/ "cleared value";
			* $comp "wrong path" $since b365,
				// Actually path in environment variable %PATH was depended.
			* $comp "hard-coded path" $since 170
		),
		/ "set %SKIP_FUNCTION_MACROS" -> 'NO' ~ 'YES'
	)
),

b626
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				(
				+ "alias %mode_t";
					// This is 'unsigned short' for %st_mode member of \
						'_stat', etc. Note for '_wopen' the type of %pmode is \
						'int'.
				(
				/ "merged all 4 functions %uopen to 2 functions" ^ "%mode_t";
				* $comp "int as permission mode for %uopen" @ !"platform %Win32"
					$orig (@ %FileSystem $since b324)
				),
				/ "return type" @ "function %GetDefaultPermissionMode"
					-> "%mode_t" ~ 'int'
				)
				+ "alias %UniqueFile"
			),
			/ %Native $=
			(
				/ @ "platform %Win32" $=
				(
					- "macro %mkdir",
					- '#undef mkdir';
					* "wrong %mkdir call" $since b521
					- "namespace %platform_replace"
				),
				/ @ "namespace %platform"
					@ 'YCL_Win32 || YCL_API_POSIXFileSystem' $=
				(
					+ "enum class %Mode";
					+ 'DefBitmaskEnum(Mode)'
				),
				- "all 16 'S_*' macros" @ "platform %YCL_Win32" $dep_from
					"removal use of Win32 mode macro"
			),
			* @ "member function %HDirectory::GetNodeCategory" @ %FileSystem
				$since b560 $=
			(
				// See http://sourceforge.net/p/mingw/bugs/1146/6.
				* "%NodeCategory::Block check for block file" $=
				(
					* "wrongly missing check" @ !"platform %Win32",
					* "wrong check" @ "platform %Win32"
						// It is not used in MSVCRT, even MinGW has 'S_ISBLK'.
				),
				* $re_ex(b625)
					"strict POSIX.1-2013 compatibility for comparing file type"
			),
			/ %Debug $=
			(
				/ @ "class %Logger" $=
				(
					(
					+ "static function %SendLog with %std::ostream parameter";
					/ @ "static function %DefaultSendLog" $=
					(
						/ $impl "logging to %std::cerr" ~ "%stderr"
							^ ("%SendLog", "%get_this_thread_id"
							@ %YBase.YStandardEx.Concurrency),
							// To be friend to %std::ios_base::sync_with_stdio.
						* $re_ex(b591) $comp "exception not protected in try \
							cluase when getting thread ID string" $since b579
					)
					),
					+ "static functions %(SendLogToFile; DefaultSendLogToFile)"
						// The old %stderr based stream output is now optional.
				),
				* DLDI "%YF_Multithread check" $since b579
					// There are currently only two option value supported, \
						so directly cast to integer is a only bug of \
						consistency of implementation.
			)
		),
		+ 'ynothrow' @ "platform %DS" @ %'YCLib_(DS)'.DSVideo
	),
	/ "mode" ^ $dep_from ("%Mode" @ %Native) ~ "'S_I*' macros"
		@ "platform %Win32" $effective @ %YCLib.(FileIO, FileSystem) $dep_to
		"removal use of Win32 mode macro",
	/ "mode" ^ $dep_from ("%Mode" @ %Native) ~ "'S_I*' macros"
		@ !"platform %Win32" $effective @ %(YCLib.(FileIO, FileSystem,
		MemoryMapping), 'YCLib_(DS)'.DSIO),
	+ "inline function %get_this_thread_id" @ %YBase.YStandardEx.Concurrency,
	* $comp "output on %stderr not synchronized after call of \
		%platform::SetupBinaryStdIO" @ "function %::main"
		@ %Tools.ProjectGenerator.Main $since b599 $dep_from
		("%Logger::DefaultSendLog" @ %YFramework.YCLib.Debug),
	/ %DereferenceOperation $=
	(
		- $revert(b589) "defaulted as deleted function template \
			%is_undereferenceable for ('const std::atomic<_type>', \
			'const volatile std::atomic<_type>')"
		* "string ISO C++ code conformance" @ $since b589 $=
			// According to ISO C++ [namespace.std], this leads to undefined \
				behavior.
			(- "declaration %std::atomic" @ "namespace %std")
	)
),

b625
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ "function templates %(CloneNonpolymorphic, ClonePolymorphic)"
				@ %Core.YCoreUtilities -> "%(clone_monomorphic, \
				clone_polymorphic)" @ %YBase.YStandardEx.Memory,
			- 'using platform::truncate;' @ %Adaptor.YAdaptor
		),
		/ %YCLib $=
		(
			/ %FileIO $=
			(
				+ "function %SetBlocking" @ "class %FileDescription",
				/ "function %truncate"
					-> "member function %FileDescriptor::SetSize" $dep_From
					%YSLib.Adaptor.YAdaptor,
				/ @ "class %FileDescriptor" $=
				(
					+ 'ynothrow' @ "function %operator*",
					+ "2 functions %operator-> returning 'this'",
						// To make %operator-> work when %FileDescriptor is \
							used as %pointer as %unique_ptr, etc.
					+ "functions %((Read; FullRead), (Write; FullWrite))"
				),
				/ DLDI "simplified function %TryClose",
				/ $impl @ "functions %(GetFileSizeOf, \
					GetFileModificationTimeOf) with %std::FILE* parameter" $=
				(
					/ "simplified wihtout conditional inclusion",
					- "assertion for non null parameter"
						// Error would be handled by underlying \
							%FileDescriptor.
				)
			),
			/ DLDI ^ '< 0' ~ '== -1' @ "%uopen failure check"
				@ "constructor %MappedFile" @ %MemoryMapping,
			/ @ "function %MakePipe" @ 'YCL_API_Has_unistd_h' @ %Host $=
			(
				^ $dev $impl "%FileDescriptor::SetNonblocking";
				* $re_ex(b623) DLDI "strict POSIX.1-2013 compatibility for \
					future flags values" $since b553,
				* "broken basic exception guarantee" $since b553
					// Handle might leak when throwing.
			),
			+ "alias %platform::ssize_t" @ %NativeAPI,
			/ DLDI "all including <fcntl.h>" ^ %NativeAPI,
			* "missing error handling for %::read" @ "platform %DS"
				@ "constructor %MappedFile" @ %MemoryMapping $since b324
				$= (+ "throwing %std::runtime_error on reading error"),
			+ "function template %RetryOnError" @ %YCommon,
		),
		/ $impl %'YCLib_(DS)'.DSIO $=
		(
			/ "simplified" ("destructor %FAT::Partition"
				^ "%YSLib::FilterExceptions", "(member function \
				%SectorCache::GetPage" ^ "%YSLib::TryInvoke")
				~ "handling with custom exception message",
			/ DLD @ "device table operation" ^ "%errc::bad_file_descriptor"
				~ "%EBADF"
		),
		/ @ "member function %NativeHost::RunOnUIThread"
			@ %'Helper_(Android)'.AndroidHost $=
		(
			(
			/ $impl ^ ("%RetryOnError" @ %YCLib.YCommon);
			* $comp "overread when old value of %errno is %EINTR" $since b553
			),
			+ "traced %errno",
			/ DLDI ^ "explicitly cast for integer types"
		)
	),
	/ DLDI "simplified %allocator_delete::operator()"
		@ %YBase.YStandardEx.Memory ^ 'traits'
),

b624
(
	/ %YBase.YStandardEx $=
	(
		/ $imp @ "class %thread_pool" @ %Concurrency $=
		(
			/ DLD "simplified task queue" ^ "%std::packaged_task"
				~ "%std::function";
			/ $impl "simplified function template %wait_to_enqueue",
				// This saves a copy and indirection of bound task object.
			/ "alias templates %(future_result_t, packed_task_t), function \
				templates %(pack_task, pack_shared_task)"
				>> %Future $dep_from "added future header"
		),
		+ %Future $=
		(
			$dep_to "added future header";
			+ "metafunction %is_future",
			+ "(2 function templates, inline function) %make_ready_future"
		),
		(
		+ %Range $=
		(
			+ ('using std::begin;', 'using std::end;')
				@ "inline namespace cpp2011",
			+ "%(cbegin, cend, rbegin, rend, crbegin, crend")
				@ "inline namespace cpp2011" $=
			(
				+ $impl ^ "aliases from %std" @ '#if __cplusplus >= 201402L \
					&& (!defined(__GLIBCXX__) || __GLIBCXX__ >= 20150119) \
					|| (_LIBCXX_VERSION >= 1101 && _LIBCPP_STD_VER > 11) \
					|| YB_IMPL_MSCPP >= 1800',
				+ "templates" @ "%std names unavailable"
			)
		);
		- DLDI "redundant 'using std::begin;', 'using std::end;'"
			@ %(IteratorOperation, String, Container)
		)
	),
	/ %Tools.SHBuild.Main $=
	(
		(
		/ $impl "collected wating results" ^ "%std::future vector";
		+ "wating for unfinished tasks and tasks statistics when build failed",
		* DLD "missing capturing wating results" $since b520
		),
		/ DLDI "simplified" ^ $dep_from %YFramework.NPL.Dependency,
		/ DLDI "simplified %::main logging" @ %Tool.SHBuild.Main
			^ $dep_from ("%(Terminal::Guard, UpdateForeColorByLevel)"
			@ %YFramework.YCLib.Host),
		/ "omitted timestamp check for empth dependent list"
	),
	/ %YFramework $=
	(
		+ "enum class %DepsEventType" @ %NPL.Dependency,
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ DLDI "static function %Release" @ "class templates \
					%(GStaticCache, GLocalStaticCache)" @ %YStorage
					!^ "%safe_delete_obj";
				/ %YCoreUtilities $=
				(
					- $revert(b154) "struct %safe_delete_obj" $dep_from
						%YStorage,
					(
					- "macro %delete_second_mem";
					- $revert(b281) "structs %(delete_second_mem_ndebug, \
						delete_second_mem_debug)"
					),
					- DLDI "redundant 'typename'"
						@ "function template %CloneNonpolymorphic",
					(
					- "macro %delete_obj" $dep_from %Adaptor.Font;
					- $revert(b174)
						"structs %(delete_obj_debug, delete_obj_ndebug)"
					),
					/ @ "function template %ClearSequence" $=
					(
						(
						- "check of parameters";
						/ $forced 'ynothrow' -> 'ynothrowv';
						$dep_to "throwing sequence check"
						),
						/ "test type for value" ^ "%ystdex::decay_t"
							~ "%ystdex::remove_reference_t"
						/ $re(b590) $dev $impl "static assertion" ^ '()'
							~ '::value'
					)
				),
				- "%LevelType" @ "class %LoggedEvent" @ %YException $dep_from
					("removal use of LoggedEvent::LevelType",
					"%Exception" @ %YCLib.Host)
			),
			/ %Service.YBlit $=
			(
				/ "function template %ClearPixel" -> "%ClearPixels"
					$= (/ $forced 'ynothrow' -> 'ynothrowv' $dep_from
						"throwing sequence check"),
				/ "function %FillPixel" => "%FillPixels"
			),
			- "debug memory trace" @ "class %FontCache" @ %Adaptor.Font $=
			(
				/ $impl "%ClearContainers" ^ "%std::default_delete<Typeface>"
					~ "%delete_obj";
				/ $forced "%LoadTypefaces" ^ 'new' ~ 'ynew'
			)
		),
		/ %YCLib.Host $=
		(
			/ %Host $=
			(
			+ "class %Guard" @ "%Terminal",
			+ "function %UpdateForeColorByLevel",
			- "%LevelType" @ "class %Exception" $dep_from
				"removal use of Exception::LevelType"
			),
			/ %FileIO $=
			(
				/ "class %FileDescriptorDeleter"
					-> "class %FileDescriptor::Deleter",
				+ "function %SetNonblocking" @ "class %FileDescriptor",
				/ "function %GetFileSizeOf for %int"
					-> "member function %FileDescriptor::GetSize",
				/ "function %GetFileModificationTimeOf for %int"
					-> "member function %FileDescriptor::GetModificationTime"
			)
		)
	),
	/ "all 'Exception::LevelType'" -> "%YSLib::RecordLevel" $effective
		@ %(YFramework.(YCLib.(Host, XCB)), 'YCLib.(MinGW32)'.MinGW32) $dep_to
		"removal use of Exception::LevelType",
	/ "all 'LoggedEvent::LevelType'" -> "%YSLib::RecordLevel" $effective
		@ %((YFramework.(YCLib.Host, Helper.Initialization,
		YSLib.(Core.(YException, YCoreUtilities), UI.Loader))),
		Tools.SHBuild.Main) $dep_to "removal use of LoggedEvent::LevelType"
),

b623
(
	/ %YFramework $=
	(
		* DD "wrong precondition" @ "wrong '\pre' Doxygen command"
			@ "comments" @ "constructor %TextFileBuffer"
			@ %YSLib.Service.TextManager $since b622,
		+ %Dependency @ %NPL
			$= (+ "functions %(DecomposeMakefileDepList, \
				FilterMakefileDependencies)"),
		/ %'YCLib_(DS)'.DSIO $=
		(
			/ @ "constructor %FileInfo" @ %DSIO $=
			(
				/ DLDI ^ 'O_ACCMODE' ~ "hard-coded '0x03'",
				/ "throw %std::system_error with value \
					%std::errc::read_only_file_system when %O_TRUNC specified \
					for flags on read-only file system" $dep_to
					"truncation on read-only file system"
				/ "throw %std::system_error with value \
					%std::errc::is_a_directory only when write access \
					requested" $dep_to "check for directory"
			),
			/ DLDI @ "class %AllocationTable" $=
			(
				/ "simplified function %QueryNext",
				/ "simplified function %TrimChain" ^ "%Clusters::IsFreeOrEOF"
			)
		),
		/ %Helper $=
		(
			/ "constructor" @ "%WindowThread" @ %HostRenderer $=
			(
				/ "passing parameters" ^ "%yforward" ~ "%ystdex::decay_copy",
					// Copying here is unnecessary.
				/ "constructing window handle supporting INVOKE callable \
					object" ^ "%ystdex::invoke",
					// The 1st parameter now can be pointer to member value.
				/ "caught exceptions thrown by callable object"
					^ "%FilterException"
			),
			/ "showing message box" @ "platform %Win32"
				@ "function %HandleFatalError" @ %Initialization $=
			(
				/ DLDI ^ "%FilterException";
				+ "log with level 'Emergent' on failure"
			)
		),
		/ @ "function %LogAssert" @ %YCLib.Debug $=
		(
			* "catch-clause" @ "platform %Win32" $since b558
				$= (+ "log and calling %ystdex::assert"),
			/ DLDI "simplified platform !%(Win32, Android)" ^ "%TryExpr"
		)
	),
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			/ DLDI ^ $dep_from ("%(DecomposeMakefileDepList, \
				FilterMakefileDependencies)" @ %YFramework.NPL.Dependency)
				$dep_to "library dependency",
			* "building skipped when .d file corrupted or opening failed" $since
				b557,
			/ $impl $revert_ex(b520) "clean waiting" !^ "duration" $dep_from
				("%task_pool" @ %YBase.YStandardEx.Concurrency)
		),
		/ $forced "updated %LIBS" @ "%SHBuild-bootstrap.sh" $dep_from
			"library dependency"
	),
	/ DLDI "argument type" @ "%seekg with 1 parameter"
		-> "explicitly cast stream %off_type" ~ "stream %pos_type" $effective
		@ %YFrameowrk.YSLib.Service.(TextFile, TextManager);
		// To eliminate Clang++ warning: [-Wsign-conversion].
	/ DLDI "explicitly cast to 'size_t' for %tellg return value"
		@ "constructor %TextFileBuffer" @ %YSLib.Service.TextManager,
		// To eliminate Clang++ warning: [-Wsign-conversion].
	* $re_ex(b611) "strict POSIX.1-2013 compatibility" @ "platform %DS" $since
		$before b132 $=
	(
		* "missing set %EROFS to %errno for %::open and variants on read-only \
			file system when %O_TRUNC specified"
			$= (/ $comp "setting %errno properly on opening" $dep_from
				"truncation on read-only file system"
		* "wrongly set %errno to %EISDIR and failed for %::open and variants when \
			flags contains no %O_WRONLY or %O_RDWR"
			$= (/ $comp "checked for write access on opening" $dep_from
				"check for directory"
	),
	/ %YBase.YStandardEx $=
	(
		+ "function templates %(read_uint_be, write_uint_be)" @ %CStandardInteger,
		+ 'yconstfn' @ "function %operator()"@ "class template %composed"
			@ %Functional,
		+ %CSignal $=
		(
			+ "inline function %restore_signal";
			+ "function %reraise"
		),
		/ %Concurrency $=
		(
			/ @ "class %task_pool" $=
			(
				* "missing passing waiting call result" @ ("function \
					templates %(poll, poll_until, pool_for)" $since b543,
					"function templates %(wait, wait_for, wait_until)" $since
						b539,
						"function template %wait_to_enqueue" $since b538),
				(
				/ @ "function template %wait_to_enqueue" $=
				* "missing notifying for enqueueing when task queue is \
					available" @ "function template %wait_to_enqueue" $since
					b538;
				/ $comp "copied callable argument"
					@ "call of %(wait_to_enqueue; poll, poll_for, poll_until; \
					wait, wait_for, wait_until)",
					// Since ISO C++ requires invoking a copy of the callable \
						object shall behave the same as invoking the copyied \
						one for constructor of instances of %packaged_task, \
						the copy here is acceptable.
				* $comp "infinite wating after all tasks consumed"
					@ "function templates" ("%wait" $since b539,
					"%poll" $since b543)
				)
			)
			/ @ "function template %wait_to_enqueue" @ "class %thread_pool" $=
			(
				/ $re_ex(b545) "reduced redundant 'return std::move'"
					@ "return-statement",
				* "wrongly ignored waiting call result" @ "function \
					%wait_to_enqueue" $since b538 $dep_from "%task_pool"
			),
			* "missing including %CAssertion for %yassume" @ "header"
				@ %Concurrency $since b588
			(
				+ "alias template %future_result_t";
				/ "simplified return types" @ "function templates"
					("%(enqueue, wait_to_enqueue)" @ "class %thread_pool",
					"%poll, poll_for, poll_until, wait, wait_for, \
					wait_to_enqueue, wait_until") ^ "%future_result_t"
					// Also to avoid GCC bug. See $2015-08 \
						@ %Documentation::Workflow::Annual2015.
			)
		)
	)
),

b622
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ %TextManager $=
				(
					/ @ "class %TextFileBuffer" $=
					(
						+ DLDI "private data members holding encoding and \
							length";
						/ "type of (protected data member %File, file \
							parameter constructor)" -> "%std::istream"
							~ "%TextFile";
						- $comp "stream open state check" @ "constructor"
							// No %is_open can be called for %std::istream.
					),
					/ DLDI "simplified stream iteration"
				),
				(
				- $revert($before b132) "classes %TextFile" @ %TextFile,
				- $revert($before b132) "classes %File" @ %File
				) $dep_from ("class %TextFileBuffer" @ %TextManager)
			),
			/ %Core.Exception $=
			(
				/ "alias %ExtractedExceptionPrinter"
					=> "ExtractedLevelPrinter",
				/ "2nd default argument" @ "function %TraceExceptionType"
					-> 'Err' ~ 'Critical',
				(
				+ "alias template %GLevelTracer; alias ExceptionTracer; \
					function %ExtractAndTrace";
				+ "last parameter 'ExceptionTracer = ExtractAndTrace'"
					@ "function %TryExecute; function template \
					%FilterException"
				)
			)
		),
		* $design "missing trailing '.' of assertion string for device \
			operations exception handling" @ %'YCLib_(DS)'.DSIO $since b611,
		(
		+ "functions %(ConvertToErrno; GetErrnoFromWin32)"
			@ %'YCLib_(MinGW32)'.MinGW32;
		* "error not captured" @ "platform %Win32" @ "function %GetFileSizeOf"
			@ %YCLib.FileIO ^ ("%platform_ex::GetErrnoFromWin32"
			@ %'YCLib_(MinGW32)'.MinGW32) $orig
			(@ %YCLib.FileSystem $since b538)
		)
	),
	/ $forced $impl "text reader" @ %YReader ^ "%ifstream" ~ "%TextFile"
		$dep_from %YFramework.YSLib.Service.TextManager $effective
		@ %(DSReader, ShlReader),
	* $doc "path example" @ "environment variable %DEVKITARM"
		@ "%Readme.en-US.txt" @ "directories %(freetype, FreeImage)"
		@ "directory %3rdparty" $since b417,
	/ $doc "reduced duplicate (with wiki) and outdated content"
		@ %Readme.zh-CN.txt",
	/ "enabled %YB_ATTR_gnu_printf only when 'YB_IMPL_GNUC >= 20604 && \
		!YB_IMPL_CLANGPP'" @ !'YB_IMPL_GNUC >= 40400 && !YB_IMPL_CLANGPP'
		@ %YBase.YDefinition,
	/ "function %::main" %Tools.SHBuild.Main $=
	(
		/ DLDI ^ $dep_from ("%(FilterExceptions, ExtractException)"
			@ %YFramework.YSLib.Core.YException);
		/ $comp "caught exceptions error messages would print exception type \
			at first and indented as following message"
	),
	/ DLP "platform %MinGW32" $=
	(
		^ $re_ex(b520) "MinGW[gcc version 5.2.0 (Rev3, Built by MSYS2 \
			project)] mingw32/mingw-w64-i686-gcc-5.2.0-3" ~ "MinGW[gcc \
			version 4.9.2 (Rev5, Built by MSYS2 project)] \
			mingw32/mingw-w64-i686-gcc-4.9.2-5" @ "platform %MinGW32",
			// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
				Exceptions implementation: Dwarf2.
		^ "mingw-w64-i686-binutils 2.25.1-1 from MSYS2"
			~ "mingw-w64-i686-binutils 2.25-4"
		// Old ABI is still compatible. Libraries are not recompiled currently.
	)
),

b621
(
	/ %YFramework.YSLib.Service $=
	(
		(
		/ ("class %File" @ %File; $forced $impl "class %TextFile"
			@ %TextFile) ^ "%(fstream, std::istream_iterator<char>)"
			~ "%(std::FILE, ystdex::ifile_iterator)" $dep_from
			"removal of public sentry" $dep_to "stream I/O";
		* $comp "strict ISO C/C++ code conformance for %std::fseek call on binary \
			stream" $since $before b132
			// See $2015-08 @ %Documentation::Workflow::Annual2015.
		),
		/ %TextFile $=
		(
			/ @ "class %TextFile" $=
			(
				- "functions %Rewind",
				- $revert(b341) "functions %GetBOM",
				- $revert(b273) "functions %CheckBOM",
				(
				- "writing BOM when output to empty file" @ "constructor#1",
				* $comp "BOM truncated at null character for UTF32-LE"
					$since b341
				),
				- "constructor#2",
				/ DLDI "simplified BOM and encoding detection" $dep_from
					("stream I/O", ^ "%DetectBOM for %std::istream")
			),
			/ DLDI "simplified %WriteBOM" ^ "%ystdex::write_literal",
			(
			+ "5th parameter 'Encoding = CS_Default'"
				@ "all 2 functions %VerifyEncoding";
			+ "function %DetectBOM for %std::istream"
			)
		),
		/ %File $=
		(
			/ @ "class %File" $=
			(
				- "function %Rewind",
				(
				- $revert(b326) "all 2 constructors with %String filename \
					parameter";
				- $revert(b326) "all 2 functions %Open for %String paramenter"
				),
				(
				- $revert(b412) "constructor with 'const char*' parameters";
				- $revert(b412) "function %Open with 'const char*' parameters"
				),
				(
				+ DLD "brace-or-equal-initializer '{}'" @ "data members";
				/ "default constructor"
					-> "explicitly defaulted default constructor"
				),
				(
				- "close before opening stream" @ "function %Open";
				- "function %Close"
				),
				(
				- $revert(b613) "function %GetSentry" $dep_from
					"class %TextFileBuffer";
				- $revert(b613) "class %Sentry";
				$dep_to "removal of public sentry"
				)
			),
			- $revert(b326) "all overloaded %operator(>>, <<) for %File"
		),
		/ @ %TextManager $=
		(
			/ DLDI "%operator!= for %TextFileBuffer::iterator"
				^ "macros %(PDefHOp, ImplRet)",
			/ DLDI "class %TextFileBuffer" !^ "%File::GetSentry"
		)
	),
	+ "function %GetBufferRef" @ "class %DualScreenReader" @ %YReader.DSReader
),

b620
(
	/ %YBase.YStandardEx $=
	(
		+ "2nd parameter '_type = void'" @ "template parameter list"
			@ "metafunction %enable_for_string_class_t" @ %String,
		/ @ "metafunction %enable_for_iterator_t" @ %IteratorOperation $=
		(
			+ "2nd parameter '_type = void'" @ "template parameter list";
			/ $comp "aliased type for single type argument" -> "%void" ~ "%int"
		),
		+ "function template %swap_underlying" @ %Utilities
	),
	/ %YReader $=
	(
		/ %ShlReader $=
		(
			/ @ "class %ShlTextReader" $=
			(
				/ "access setting node" @ "function %SaveBookmarks"
					^ "%operator[]" ~ "%at" $dep_to
					"first place bookmarks saving",
				/ @ "destructor" $=
				(
					* "missing nothrow guarantee" $since b296 $orig
						(@ "class %TextReaderSession" $since b286) $=
						(/ DLDI "wrapped" ^ "%FilterExceptions"),
					* "order of saving bookmark" $since b411 $dep_to
						"first place bookmarks saving"
				)
			),
			* $comp "missing insertion bookmarks immediately after insertion \
				of new reader configuration node" $since b411 $dep_from
				"first place bookmarks saving"
		),
		/ %HexBrowser $=
		(
			(
			/ DLDI "member function %HexViewArea::Load"
				^ "%HexModel move %operator=" ~ "%HexModel::Load" $dep_from
				("class template %basic_filebuf" @ %YFramework.YCLib.FileIO);
			- "member function %HexViewArea::Load"
			),
			+ "functions %operator(!, bool)"
				@ "classes %(HexViewModel; %HexViewArea)";
			/ "hiding vertical scroll bar if model loading failed"
		),
		/ "indicated failure if loading unsuccessful"
			@ "constructor %ShlHexBrowser" @ %ShlReader ^ $dep_from
			("%HexViewArea::operator bool" @ %HexBrowser)
			// Instead of showing %size_t(-1) as loaded size.
	),
	/ @ %YFramework.YCLib.FileIO $=
	(
		/ @ "class template %basic_filebuf" @ '__GLIBCXX__' $=
		(
			+ "defaulted default constructor",
			+ "deleted copy (constructor, %operator=)" ^ $dep_from
				("%ystdex::swap_underlying" @ %YBase.YStandardEx.Utilities)
			+ "move (constructor, %operator=)" @ 'YB_IMPL_GNUCPP && \
				!(YB_IMPL_GNUCPP >= 50000 && __GLIBCXX__ > 20140922)'
				// Only libstdc++ >= 5 is conforming to C++11 here.
		);
		/ "enabled move (constructor, %operator=)"
			@ "class templates %(basic_ifstream, basic_ofstream, basic_stream)"
	)
),

b619
(
	/ %YFramework $=
	(
		/ "removed class %TextFile dependencies" @ %Helper.Initialization $=
		(
			/ "LoadNPLA1File" $=
			(
				/ "message for found path printed before accessing text file",
				/ DLDI !^ "%ReadConfiguration"
			),
			/ DLDI "function %SaveConfiguration" !^ "%WriteConfiguration",
			/ DLDI @ "functions %(SaveConfiguration, CreateDefaultNPLA1File)"
				$=
			(
				^ $dep_from ("%ofstream" @ %YSLib.Adaptor.YAdaptor)
					~ "%TextFile";
				^ $dep_from
					("%ystdex::write_literal" @ %YBase.YStandardEx.String)
			),
			/ DLDI @ "function %LoadNPLA1File" $=
			(
				^ $dep_from ("%ifstream" @ %YSLib.Adaptor.YAdaptor)
					~ "%TextFile",
				^ $dep_from
					("function template %CheckBOM" @ %YSLib.Service.TextFile)
			)
		),
		/ %NPL.Configuration $=
		(
			- "functions %(ReadConfiguration, WriteConfiguration)" $dep_from
				%Helper.Initialization;
			/ "friend function %operator>> with %Textfile parameter"
				-> "%operator>> with %std::istream parameter";
			- $revert(b335) $re_ex(b618)
				('using YSLib::File;', 'using YSLib::TextFile;')
		),
		/ @ "namespace %platform" @ %YCLib.FileIO $=
		(
			+ $re_ex(b616) "alternative %(ifstream, ofstream) interface" $=
			(
				/ @ '__GLIBCXX__' $=
				(
					+ "class templates %(basic_ifstream, basic_ofstream)",
					+ "aliases %(ifstream, ofstream, wifstream, wofstream)"
				),
				+ "alias-declarations for %(basic_ifstream, basic_ofstream, \
					ifstream, ofstream, wifstream, wofstream) redirected to \
					namespace %std" @ '!__GLIBCXX__'
			),
			* $re_ex(b618) "missing adding 'O_TRUNC' for input parameter \
				value 'ios_base::out | ios_base::trunc'"
				@ "function %omode_conv" $since b617,
			(
			+ "function %GetDefaultPermissionMode";
			* "missing permission mode" @ "member function template %open"
				@ "class template %basic_filebuf" @ '__GLIBCXX__' $since b618
			)
		),
		/ %YSLib $=
		(
			+ "aliases %platform::(basic_ifstream, basic_ofstream, ifstream, \
					ofstream, wifstream, wofstream)" @ "namespace %YSLib"
				@ %Adaptor.YAdaptor $dep_from %YCLib.FileIO,
			/ %Service.TextFile $=
			(
				+ "(function; function template) %CheckBOM";
				+ "function %DetectBOM";
				/ DLDI "simplified member function %TextFile::CheckBOM"
					^ "%DetectBOM"
			)
		)
	),
	/ DLDI "dependencencies reading" @ %Tools.SHBuild.Main ^ $dep_from
		("%ifstream" @ %YFramework.YSLib.Adaptor.YAdaptor) ~ "%fstream",
	+ "function templates %(write, write_literal) for array reference"
		@ %YBase.YStandardEx.String
	* "open failure for files with non ANSI filename" @ "platform %Win32"
		@ "class %HexModel" %YReader.HexBrowser $since b597
		$= (/ DLDI ^ "%filebuf" ~ "%std::filebuf")
),

b618
(
	/ %YFramework $=
	(
		/ %YCLib.FileIO $=
		(
			/ @ "class template %basic_filebuf" @ '__GLIBCXX__' $=
			(
				/ $impl "%open" ^ ($dep_from "%omode_convb");
					// This made unnecessary buffering away.
				- "functions %close";
				- DLDI "unnecessary additional file pointer member";
				* $comp "invalid state" @ "class template %basic_filebuf"
					$since b616,
					// This would cause file content not flushed on \
						destruction, and invalid argument would be \
						passed to underlying implementation in basic \
						class destructor.
				+ "function template %open for string classes"
			),
			* "missing %O_CREAT" @ "result of functions %(omode_conv, \
				omode_convb)" @ $since b617,
			* "missing translation of binary bit for underlying POSIX result 0"
				@ "platform %Win32" @ "function %omode_conv" $since b617
		),
		/ %NPL $=
		(
			/ %Session $=
			(
			/ "constructor for %TextFile" -> "explicitly defaulted default \
				constructor" @ "class %Session";
			- 'using YSLib::TextFile'
			),
			/ $forced DLDI "friend function %operator>> for %Configuration"
				@ %Configuration $dep_from ("class %Session" @ %Session)
		)
	),
	/ $forced DLD "dependency checking" @ %Tools.SHBuild.Main $dep_from
		%NPL.Session
		$= (/ $impl ^ ("%fstream" $dep_from "%platform::fstream"
			@ "'__GLIBCXX__' @ %YCLib.FileIO, "%std::istream_iterator"
			~ "%TextFile");
),

b617
(
	* $forced $build "missing updating %LIBS" @ "%SHBuild-bootstrap.sh"
		@ %Tools.Scripts $since b615,
	/ %YFramework $=
	(
		/ %YSLib.Service $=
		(
			/ @ "class %File" @ %File $=
			(
				- $revert(b329) "functions %(Flush, Write)",
				- $revert(b290) "function %Read"
			),
			/ %TextFile $=
			(
				/ "yconstexpr objects %'BOM_*'" >> "namespace %Text",
				+ "function %WriteBOM, 2 functions %VerifyEncoding"
					@ "namespace %Text",
				/ @ "class %TextFile" $=
				(
					- $revert(b273) "function templates %(ReadChar, SkipChar)",
						// No sense to read for %std::fstream.
					/ DLDI "simplified BOM length initialization"
				)
			)
		),
		/ @ "class template %fstream" @ '__GLIBCXX__' @ %YCLib.FileIO $=
		(
			* "invalid initialization of buffer" @ "constructor template"
				$since b616,
			/ "all 2 functions %open" -> "function template",
			(
			/ DLDI ^ "mutable buffer member"
				~ ('const_cast' @ "function %rdbuf");
			* "undefined behavior" @ "function %rdbuf" @ $since b616
				// It seems that all libstdc++, libc++ and implementation of \
					Microsoft VC++ use cast. However this is not portable for client \
					code.
			)
		)
	),
	+ $build "Microsoft VC++ 2015 support" @ "Microsoft VC++ projects",
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			/ "enabled %(YB_HAS_CONSTEXPR, YB_HAS_NOEXCEPT)"
				@ 'YB_IMPL_MSCPP >= 1900',
				// For Microsoft VC++ 2015.
			* "wrongly defined %YB_ATTR as empty sequence for non GNU \
				compatible implementations" ~ "%YB_ATTR_gnu_printf" $since b615
		),
		/ $dev "shrank '#pragma GCC' into conditional guard"
			@ %LibDefect.Exception,
			// To avoid unknown pragmas being used for non GNU compatible \
				implementations.
		/ %YStandardEx $=
		(
			/ DLDI @ "function %operator/=" @ "class template %path" @ %Path
				^ "%unsigned literal" ~ "%int literal";
				// To eliminate Microsoft VC++ 2015 warning: C4018.
			/ %Memory $=
			(
				* "invalid overloaded signatures" @ "template %pack_object"
					$since b588,
				/ "function template %make_unique" $=
				(
					>> "inline namespace %cpp2014" \
						@ '__cpp_lib_make_unique >= 201304 \
						|| __cplusplus > 201103L || YB_IMPL_MSCPP >= 1800',
					-> 'using std::make_unique;' @ "inline namespace %cpp2014"
						@ !'__cpp_lib_make_unique >= 201304 \
							|| __cplusplus > 201103L || YB_IMPL_MSCPP >= 1800';
					* $comp "ambiguity when ADL %std::make_unique provided \
						besides %ystdex::make_unique""
				)
			),
			/ "function template %invoke" %Functional @ 'YB_IMPL_MSCPP >= 1900'
				-> 'using std::invoke;',
			+ "meta type %bool_constant" @ %TypeOperation $=
			(
				+ 'using std::bool_constant' @ 'YB_IMPL_MSCPP >=1900',
				+ "alias template %bool_constant" @ !'YB_IMPL_MSCPP >=1900'
			)
		),
	),
	/ DLDI "simplified %integral_constant with %bool argument" ^ $dep_from
		"%ystdex::bool_constant" @ %TypeOperation $effective
		@ %(YBase.YStandardEx.(TypeOperation, Any, Cast, Functional,
		CStandardInteger, Rational, String, Tuple, Utilities),
		YFramework.YSLib.(Service.YBrush, Core.YObject))
),

b616
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ "assertion for valid file before loading text block"
				@ "%TextFileBuffer::operator[]" @ %Service.TextManager,
			+ "aliases %platform::(basic_filebuf, filebuf, wfilebuf, \
				basic_fstream, fstream, wfstream)" @ "namespace %YSLib"
				@ %Adaptor.YAdaptor $dep_from %YCLib.FileIO
		),
		/ DLDI "simplified 2 function templates %ConvertCharacter for \
			%GuardPair" @ %CHRLib.Convert,
			// Since the first component is reference wrapper, no need to \
				assign again.
		/ @ "namespace %platform" @ %YCLib.FileIO $=
		(
			+ "2 functions %ufopen for %std::ios_base::openmode mode \
				parameter",
			+ "function %TryClose",
			+ "alternative %fstream interface" $=
			(
				/ @ '__GLIBCXX__' $=
				(
					+ "class template %basic_filebuf" $dep_from
						%YBase.YStandardEx.CStandardIO;
					+ "alias-declarations %(filebuf, wfilebuf)",
					+ "class template %basic_fstream",
					+ "aliases %(fstream, wfstream)"
				),
				+ "alias-declarations for %(basic_filebuf, filebuf, wfilebuf, \
					basic_fstream, fstream, wfstream) redirected to namespace \
					%std" @ '!__GLIBCXX__'
			)
		)
	),
	* "wrong pointer type deduced" @ "%unique_file_ptr"
		@ %YBase.YStandardEx.CStandardIO $since b566
),

b615
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ %FileIO;
			/ "classes %(FileDescriptor, FileDescriptorDeleter, \
				FileOperationFailure), functions %(SetBinaryIO, 2 \
				SetupBinaryStdIO, 2 uaccess, 4 uopen, 2 ufopen, 2 ufexists, \
				upclose, 2 upopen, u16getcwd_n, uchdir, umkdir, urmdir, \
				uunlink, uremove, truncate, 4 GetFileModificationTimeOf, 2 \
				GetFileSizeOf), function templates %(ufexists, \
				GetFileModificationTimeOf)" @ %FileSystem >> %FileIO
		),
		/ %YSLib.Service $=
		(
			/ @ "class %TextFileBuffer" @ %TextManager $=
			(
				/ @ "constructor" $=
				(
					* DD "wrong precondition" $since b613,
					/ "threw %LoggedEvent when file is not opened"
				),
				/ DLDI ^ $dep_from ("%ConvertCharacter" @ %CHRLib.Convert)
			),
			+ "defined out-of-line virtual destructor" @ "class %TextFile"
				@ %TextFile
				// To eliminate Clang++ warning: [-Wweak-vtable].
		),
		/ %CHRLib $=
		(
			/ %StaticMapping $=
			(
				/ "alias template %GuardPair" >> %CharacterMapping,
				"missing 'get()' call for first component"
					@ "function templates %FillByte for %GuardPair" $since b614
			);
			+ "2 function template %ConvertCharacter for GuardPair" @ %Convert
		)
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			* "invalid access for null parameter and wrong result for nonnull \
				parameter" @ "function %openmode_conv with 'const char*' \
				parameter" @ %CStandardIO $since b326,
			/ @ "class template %any_input_iterator" @ %AnyIterator $=
			(
				/ "function %get with return type %any" -> "2 functions with \
					return types (('any&', 'const any&'), 'ynothrow')",
				+ 'using any::target'
			),
		),
		+ "macro %YB_ATTR_gnu_printf" @ %YDefinition;
	),
	/ $dev DLDI "'YB_ATTR(format (gnu_printf, ...))'" -> $dep_from
		("%YB_ATTR_gnu_printf" @ %YBase.YDefinition)
		// Also to eliminate Clang++ warning: [-Wignored-attributes].
),

b614
(
	+ "type traits operation %enable_if_same_t"
		@ %YBase.YStandardEx.TypeOperation,
	/ %YFramework $=
	(
		/ %CHRLib $=
		(
			(
			/ %StaticMapping $=
			(
				+ "alias template %GuardPair";
				+ "2 function templates %FillByte for iterator pair with guard"
			);
			+ "functions %(3 MBCToUC, MBCSToUCS2, MBCSToUCS4) with iterator \
				guard" @ %CharacterProcessing,
			)
			/ %Convert $=
			(
				* DLDI "function %VerifyUC" $since b613,
				+ "function %VerifyUC with difference" $dep_from ("%MBCToUC"
					@ %CharacterProcessing)
			)
		),
		/ %YSLib.Service $=
		(
			/ @ "class %TextFile" @ %TextFile $=
			(
				/ "encoding detection" $=
				(
					/ DLDI !^ "redundant buffer" $dep_from %CHRLib.MappingEx;
					* $comp "missing handling invalid state and other \
						conversion error" $since b290
				),
				- $revert(b341) "function %Truncate" $dep_to
					"removal of text file truncation",
				/ DLDI "functions %(Locate, Rewind)" @ "class %TextFile"
					!^ "%Seek"
			),
			/ @ "class %TextManager::iterator" @ %TextManager $=
			(
				* $revert(b613) "wrong iterator positioning" $since b613;
				* "missing loading buffer" @ "assertion not used"
					@ "function %operator++" $since b613
			),
			/ @ "class %File" @ %File $=
			(
				/ "function %GetPtr" => "%GetStream" $dep_from %NPL.SContext;
				/ $forced DLDI "reading",
				- $revert(b341) "function %Truncate" $dep_from
					"removal of text file truncation",
				- $revert(b505) "trace"
					@ "functions %(Open, Close), destructor",
				(
				/ DLDI "functions %CheckSize" !^ "%Seek";
				- $revert_ex(b273) "function %Seek" $dep_from
					"%TextFile::(Locate, Rewind)"
				)
			)
		),
		/ "character mapping loading" @ %Helper.Initialization $=
		(
			/ "continued on failure" @ "all platforms",
				// Rather than only Win32.
			+ "trace with level 'Warning' on failure",
				// On Win32, only after fallback failed.
			+ "fallback handler which would throw after failure"
		),
		/ %'YCLib_(MinGW32)'.NLS $=
		(
			/ DLDI "initialization" @ ^ 'new' ~ "%make_unique",
			/ @ "function %FetchDBCSOffset" $=
			(
				/ $impl ^ "%TryInvoke" ~ "%FilterExceptions";
				/ $comp "simplified printed exception message",
				* $comp "null pointer always returned" $since b593
			)
		),
		/ $impl "put back last character after reading" @ "constructor %Session"
			@ %NPL.SContext ^ "%File::GetSentry" ~ "%File::GetPtr"
	)
),

b613
(
	/ %YFramework $=
	(
		+ "2 member functions %Send for %CF_DIBV5 data" @ "class %Clipboard"
			@ "platform %Win32" @ %YCLib.HostedGUI,
		/ %YSLib $=
		(
			/ %Core.YException $=
			(
				+ "function template %TryInvoke";
				/ DLDI "simplified %FilterExceptions" ^ "%TryInvoke"
			),
			- $re_ex(b570) '&&' @ ("parameter constructor %AMUnitControlList"
				@ %ListControl, "2nd parameter"
				@ "protected constructor %ListBox" @ %ComboList) @ %UI,
			/ %Service $=
			(
				/ %TextFile $=
				(
					/ DLDI "simplified encoding detection" $=
					(
						^ $dep_from ("%CHRLib::VerifyUC" @ %CHRLib.Convert),
						- "redundant seeking before checking BOM"
					)
				),
				/ @ "class TextFileBuffer" @ %TextManager $=
				(
					(
					/ "static yconstfn object %BlockSize" -> "%BlockShift";
					/ $forced DLDI "position calculation",
					),
					/ @ "class iterator" $=
					(
						(
						/ DLDI "block, index members" -> "position";
						/ $forced DLDI "assertions"
						),
						- $dev 'friend class TextFileBuffer;'
					),
					/ DLDI "simplified file iteration" ^ $dep_from
						("%File::GetSentry" @ %File)
				),
				+ "class %Sentry; function %GetSentry" @ "class %File" @ %File
			)
		),
		* "assertion string" @ "macro %YCL_CallWin32_Trace"
			@ %'YCLib_(MinGW32)'.MinGW32 $since b592,
		+ "function template %VerifyUC" @ %CHRLib.Convert
	),
	/ @ "class %ImagePanel" @ %YDE.ImageBrowser.ImageControl $=
	(
		+ "function %CopyToClipboard to copy whole image" ^ $dep_from
			("%TryInvoke" @ %YFramework.YSLib.Core.YException);
		+ "copying to clipboard when Ctrl+C is pressed",
		+ "copying to clipboard menu item"
	),
	/ %Tools $=
	(
		+ $dev "2 cases concerned with %std::string allocation and deallocation"
			@ "%DrMemory-YSLib-suppress.txt",
		/ @ "member function %BuildContext::Build" @ %SHBuild.Main $=
		(
			+ "check for nonnull target name component",
			* "invalid target name formed for root volume path" $since b546
				// Output component would be ended with ':' and cause output \
					directory creation failure.
		)
	),
	/ @ "class template %nptr" @ %YBase.YStandardEx.Pointer $=
	(
		+ "2 functions %operator(*, ->)",
		+ $lib 'yconstfn_releaxed' @ "function %get_ref"
	)
),

b612
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor.Font $=
			(
				(
				/ @ "class %Typeface" $=
				(
					+ $dev 'friend class CharBitmap;',
					/ DLDI "simplified private data" !^ "::FTC_SBit"
				);
				/ @ "class %CharBitmap" $=
				(
					/ $dev "alias %NativeType" @ "class %SmallBitmapData"
						-> 'Typeface::SmallBitmapData*' ~ '::FTC_SBit' $dep_from
						"%Typeface",
					/ "parameter" @ "constructor %CharBitmap" -> 'NativeType'
						~ 'const NativeType&',
					/ @ "all 10 data access member functions" $=
					(
						+ "indirect assertions" ^ "%Deref",
						/ "exception-specification" -> 'ynothrowv' ~ 'ynothrow'
					),
					+ "empty braced-init-list" @ "native handle data member",
					+ "defaulted default constructor"
				),
				/ $forced "2nd parameter type" @ "member function \
					%Font::GetAdvance" -> 'CharBitmap' ~ 'FTC_SBit';
				$dep_to "removal of FreeType cache types"
				);
				- $dev '#include FT_CACHE_H' @ "header",
				(
				/ $dev "all '::FT_UInt'" -> 'unsigned',
				- $dev "explicit freetype2 constants" @ "default argument"
					@ "member function %Font::GetGlyph",
				+ $dev "class name declarations and aliases declarations
					%((FT_SizeRec_; FT_Size, FT_SizeRec), (FT_FaceRec_;
					FT_FaceRec), (FT_GlyphSlotRec_; FT_GlyphSlot), FT_FaceRec_,
					(FT_LibraryRec_; FT_LibraryRec_),
					(FT_Size_Metrics_; FT_Size_Metrics))" @ "global namespace";
				- $dev ('#include FT_FREETYPE_H'; '#include <ft2build.h>')
					$dep_from "removal of FreeType cache types"
				)
			),
			/ DLDI "simplified function %RestrictInClosedInterval"
				@ %Core.YCoreUtilities ^ $dep_from
				("%ystdex::clamp" @ %YBase.YStandardEx.Algorithm)
				$dep_from "%ystdex::less" @ %YBase.YStandardEx.Functor
		),
		+ "additional sanity check throwing %std::runtime_error for pointer \
			result" @ "platform %Win32" @ %YCLib.HostedGUI,
			// This should not occur unless there are bugs in implementation \
				of %::CreateCompatibleDIBSection.
		/ @ "class %WConsole" @ %'YCLib.(MinGW32)'.Consoles $=
		(
			/ "static functions %(FetchBackColor, FetchForeColor)";
			/ "static function %DecomposeAttributes" -> "inline function"
				^ "%(FetchBackColor, FetchForeColor)",
			/ DLDI "simplified function %SetBackColor" ^ "%FetchForeColor"
				~ "%DecomposeAttributes",
			/ DLDI "simplified function %SetForeColor" ^ "%FetchBackColor"
				~ "%DecomposeAttributes"
		)
	),
	(
	* $dev "wrong warning for ISO C99 compatible format"
		$= ("format attribute %printf" -> "%gnu_printf" $effective
			@ %(YBase.YStandardEx.(CAssert $since b432, String $since b322),
			YFramework.YCLib.Debug $since b299));
		// On Windows 'printf' defaulted to 'ms_printf', this is not intended \
			since %__USE_MINGW_ANSI_STDIO has been enabled by libstdc++, thus \
			it would wrongly warn about "%zu", etc.
	/ $dev "simplified format" ^ "%zu" ~ "%u" $effective
		@ %(YFramework.(Helper.(Environment, Initialization),
		YSLib.Service(Image, ImageProcessing)), YReader.Main)
	),
	/ %YBase.YStandardEx $=
	(
		* "wrong parameter types for '<void>' specializations"
			@ "functors %(plus, minus, multiplies, divides, modulus, \
			equal_to, not_equal_to, greater, less, greater_equal, less_equal)"
			$since b578
			$= (/ DLDI ^ "forwarding reference" ~ "const qualified reference"),
		+ "function templates %(clamp, clamp_range)" @ %Algorithm,
		+ "metafunction %member_target_type_t" @ %TypeOperation,
		+ "function template %invoke" @ %Functional
	),
	/ %YSLib $=
	(
		/ "constructor with single pointer parameter" @ "class %String"
			@ %Core.YString -> 'using ucs2string::ucs2string;',
		/ DLDI "simplified member function %TextBox::Refresh" @ %UI.TextBox
			^ $dep_from ("inherited constructor" @ "class %String"
			@ %Core.YString) ~ "%operator* for %String"
	)
),

b611
(
	/ %YFramework $=
	(
		+ "function %CheckColons" @ "namespace %platform::FAT"
			@ %YCLib.FileSystem,
		/ @ "namespace %platform_ex::FAT" @ "platform %DS" @ %'YCLib_(DS)'.DSIO
			$=
		(
			+ $dev "static assertion 'LFN::MaxMBCSLength <= NAME_MAX'",
			+ 'using namespace platform::Threading;',
			+ "classes %(FilePosition, DEntryPosition, DEntry, Partition,
				DirState, FileInfo)",
			+ "functions %(CheckColons, FetchPartitionFromPath)";
			+ "functions %(Mount, Unmount)"
		),
		/ @ "platform %DS" %YCLib.NativeAPI $=
		(
			/ $impl "function %InitializeFileSystem" $=
			(
				/ $lib ^ $dep_from ("function %Mount" @ %'YCLib_(DS)'.DSIO)
					~ "libfat" $=
				(
					/ "cache" ^ "%SectorCache",
						// Efficient lookup but larger binary size. However \
							overall size is still smaller than linking an \
							external library in release configuration.
					/ "filename" @ "entries"
						^ "%string without length limitation"
						// Limitation of 255 UCS-2 character of LFN is not \
							checked. The memory usage is more efficient.
					/ "deferred checking LFN length" @ "adding entry",
						// Only for filename which is not "." or "..".
					^ "%CHRLib for encoding conversion" ~ "ISO C routines",
						// These routines are locale-dependent, although for \
							DS the patched newlib always use UTF-8 as \
							multibyte encoding.
					/ "transparent propogated %ENOSPC as %std::system_error",
					/ "open file list" ^ "%list" ~ "intrusive linked list",
					- $design "unnecessary minor redundant integer range check",
						// See https://github.com/devkitPro/libfat/pull/1.
					/ "merged getting date and time calls",
					/ "reduced unnecessary calls for looking up last cluster",
						// See https://github.com/devkitPro/libfat/issues/3. \
							Even if there is the cache, it is still slower.
					- "redundant function call for directory entry opening by \
						path '/'",
						// See https://github.com/devkitPro/libfat/issues/5.
					/ $comp $dev "device operation table allocation and \
						deallocation" ^ "::operator %(new, delete)"
						~ "%std::(malloc, free)"
				),
				/ DLD "reduced one redundant %REG_EXMEMCNT access",
				* "missing check to prevent repeated initialization" $since b601
			),
			+ "function %UninitializeFileSystem"
		),
		+ $design "call of %platform_ex::UninitializeFileSystem"
			@ "platform %DS" @ "function %Uninitialize"
			@ %Helper.Initialization $dep_from ("%UninitializeFileSystem"
			@ %YCLib.NativeAPI)
	),
	- $dev "-lfat" @ "%LIBS" @ "ARM9 makefile" $dep_from ("platform %DS"
		@ %YFramework.YCLib.NativeAPI) $dep_to "replaced libfat",
	/ $comp @ "platform %DS" $dep_from "replaced libfat" $=
	(
		/ "gave up order for flushing files on destruction of partition",
		/ "skipped redundant alias matching when a filename has been found"
			@ "opening entry from path",
		/ "partition object allocation and deallocation"
			^ "%(make_unique, ::delete)" ~ "%(unique_raw, std::(malloc, free))"
		/ "creation file system information" @ "constructing partition object"
			$=
		(
			/ "allocation failure would throw rather be suppressed and quietly \
				abort",
			+ "trace section writing error with level 'Err'"
		),
		+ "trace file synchronization failure on destructing partition object \
			with level 'Err'",
		/ "adding entry" $=
		(
			/ "threw %EINVAL as %std::system_error when adding entry failed"
				$dep_to "validating adding entry",
			/ "threw %ENAMETOOLONG as %std::system_error for too long required \
				name" $dep_to "path too long"
				// Actually hard-coded FAT long file name length limit \
					constant is used instead of %NAME_MAX. For DS, %NAME_MAX \
					is 768, as same as the UTF-8 sequence length limit of the \
					FAT long file name. This error would not occur before \
					because libfat uses fixed-length entries and the bad paths \
					would be truncated silently.
		),
		/ "checking reading or writing file setting %EBADF uniformly on failure"
			$dep_to "reused file check",
		- "checking and setting %errno to %EBADF for invalid %fd except for \
			null value",
			// This is OK because it is not real file descriptor. Checking \
				shall be done at caller site.
		/ "%devoptab_t routines" $=
		(
			- "set %errno to %EBADF for zero file descriptor"
				@ "%(write_r, read_r, seek_r)",
				// To be same as %close_r. Note it should be safe for external
					interface.
			/ "set %errno to %ENOENT for empty path parameter before checking \
				device" ~ "%ENODEV" @ "%(open_r, stat_r, unlink_r, chdir_r, \
				rename_r, mkdir_r, statvfs_r)" $dep_to "empty path errno",
			/ @ "routine %devoptab_t::read_r" $dep_to "read error handling" $=
			(
				/ "checked zero bytes to read after other file errors",
				/ "left %errno untouched rather than setting to %EOVERFLOW on \
					bytes reaching beyond end-of-file",
				/ "return '-1' after %EIO set",
				/ "left file offset untouched after error occurred" @ "%read_r"
					// POSIX.1-2013 explicitly states it is not specified in \
						RATIONALE. Since newlib would clear %__SOFF state in \
						higher-level stdio interface to require fresh seeking \
						after reading failure, so the modification after \
						failure is redundant.
			),
			/ "lift path colon check before read-only file system check"
				@ "%(unlink_r, rename_r)",
				// Also to simplify the implementation. Note the POSIX error \
					for %::unlink only valid for flags.
			+ "colon check" @ "%statvfs_r",
				// To unify and simplify the implementation. Note it is not a \
					POSIX error.
			- "sanity check and setting %EBADF"
				@ "%dirreset_r, dirnext_r, dirclose_r" $dep_to
				"removal sanity check for directory operations"
			/ @ "%(fstat_r, stat_r)" $=
			(
				// See https://github.com/devkitPro/libfat/issues/4.
				// In function %_FAT_directory_entryFromPosition of "fatfile.c".
				- "redundant name entry traverse" $dep_to
					"removal of stat name entry traverse",
				* "missing check error %EIO" $since $before b132 $dep_to
					"missing stat I/O error"
					// On calling %_FAT_cache_readPartialSector.
			),
			/ "checking %ENOENT before %ENOTDIR" @ "%(chdir_r, open_r, \
				rename_r)" $dep_to "checking changing directory",
			+ "set %ENOSPC on I/O error" @ "%mkdir_r" $dep_to "mkdir_r ENOSPC"
		),
		* "wrong root data sectors number calculated" @ "!FAT32" $since $before
			b132,
			// See https://github.com/devkitPro/libfat/issues/2. Valid value \
				of %BPB_BytsPerSec is always greater than 1. By specification, \
				the result for FAT32 is always 0, otherwise this could be less \
				1 than expected.
		- "redundantly writing of blank sectors after end of directory mark \
			reached when finding gap",
		* "missing some %EIO error checking on cache I/O operations for \
			(linking cleared cluster, disc synchronization, extending file \
			blocks, reading file, entry removing, writing file)" $since $before
			b132,
		* "strict POSIX.1-2013 compatibility" $since $before b132 $=
		(
			// %EINVAL non-POSIX extension for invalid paths are kept, since \
				POSIX paths do not care about colons.
			* "%::(open, stat, unlink, chdir, rename, mkdir, statvfs) and \
				variants for empty string path parameter"
				$= (/ $comp "set %errno to %ENOENT" ~ "%ENODEV" $dep_from
					"empty path errno"),
			* "wrong result and wrong check for zero byte to read"
				@ "function ::read"
				$= (/ $comp "setting %errno and returning value properly"
					$dep_from "read error handling"),
			* "%ENOSPC wrongly set for invalid path" ~ "%EINVAL"
				@ "%::rename and variants" $dep_from "validating adding entry",
			* "missing set %ENAMETOOLONG" @ "%::(open, mkdir, chdir, rename, \
				opendir) and variants" $dep_from "path too long",
				// Note that POSIX requires %ENAMETOOLONG when the path \
					component is longer than %NAME_MAX, and this is optional \
					for whole path limit, which is stricter.
			* "redundant %EBADF set"
				@ "%::(rewinddir, seekdir) and related functions in <dirent.h>"
				$dep_to "removal sanity check for directory operations",
			* "missing setting %EIO for %::(stat, fstat)" $dep_from
				"missing stat I/O error",
			* "missing checking %ENOENT before %ENOTDIR" @ "%(chdir, open, \
				rename) and variants" $dep_from "checking changing directory",
			* "missing setting %ENOSPC on I/O error" @ "%mkdir and variants"
				$dep_from "mkdir_r ENOSPC"
				// POSIX requires no %EIO here.
		),
		/ $comp "setting %EBADF for files cannot be written" ~ "%EINVAL"
			@ "function %::ftruncate" $dep_from "reused file check",
		/ $comp "%EIO would not be set if name entries are corrupted on \
			calling %::(stat, fstat)" $dep_to
			"removal of stat name entry traverse"
	),
	+ $dev $repo "tag 'V0.6' to revision 472",
	// See $2015-06 @ %Documentation::Workflow::Annual2015.
	/ %YBase.YStandardEx $=
	(
		/ %Cache $=
		(
			(
			+ "function template %recent_used_list";
			+ "traits template %used_list_cache_traits";
			),
			/ @ "class template %used_list_cache" $=
			(
				/ "simplified template parameters and member types" ^ $dep_from
					"%used_list_cache_traits";
				/ $forced $impl "simplified member" ^ $dep_from
					"%recent_used_list",
				/ $comp $forced "element of %used_list_type" ^ "%value_type"
					~ "%_tKey",
				(
				/ $comp "allowed specified %void hash-function for traits";
				/ $comp ^ "%std::map as default underlying map container \
					unless explicitly specified non-void hash function"
					~ "%std::unordered_map",
					// Multiple choices are necessary. See \
						http://blog.dubbelboer.com/2012/12/04/lru-cache.html.
				),
				(
				/ 'using typename map_type::const_iterator;' -> 'using \
					const_iterator = typename used_list_type::const_iterator;',
				/ 'using typename map_type::iterator;' -> 'using iterator \
					= typename used_list_type::iterator;',
				/ $forced "using-declarations %(key_type, value_type, \
					size_type)" -> "alias-declarations",
				/ $forced "using-declarations %(begin, end, size)"
					-> "functions",
				/ $forced "function template %emplace"
					-> "2 function templates";
				- $design "private base map",
				* $comp "strong exception guarantee when used list insertion \
					failed" @ "function template %emplace" $orig
					(@ "class template %GMRUCache"
					@ %YFramework.YSLib.Core.Cache $since b461)
					// Missing rollback for list on insertion failure, so the \
						base map is inconsistent.
				),
				+ $dev "static assertion for same %size_type of underlying \
					containers"
			)
		)
		+ "function template %bind1" @ %Functional
	),
	/ DLDI "simplified bound call" ^ $dep_from ("%bind1"
		@ %YBase.YStandardEx.Functional) ~ "%std::bind" $effective
		@ %(YFramework.(NPL.NPLA1, YSLib.(Adaptor.YNew, UI.(Scroll,
		YUIContainer))), YReader.(ShlReader, ShlExplorer)),
	/ $dev $repo $re_add(b595) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.YSLib.Adaptor.("%ynew.cpp" => "%YNew.cpp")
),

b610
(
	/ %YBase.YStandardEx $=
	(
		/ DLDI "alias-declaration" @ "function template %pack_uint"
			@ CStandardInteger,
			// To eliminate warning: [-Wshadow] to 'uint_t' on platform
				%Android. Note the global '::*_t' is reserved by POSIX.
		* "missing excluding non class string type for function template \
			%ntctsncpy" @ %String,
			// These function templates would be used instead of %ntctsncpy in
				%CString for non class type, which cause ill-formed programs.
		/ @ "%ntctsncpy" @ %CString $=
		(
			/ @ "function template for unbound character types" $=
			(
				* "wrong assignment of terminate null character",
					// It is ill-formed to modify element pointed by 'const'
						pointer.
				+ "overloading condition"
			)
			+ "function templates for character types compatible to %(char, \
				wchar_t)"
		),
		/ %TypeOperation $=
		(
			+ "binary type trait %is_aligned_compatible";
			(
			+ "binary type trait %is_aligned_placeable",
			/ DLDI "simplified %is_aligned_storable" ^ "%is_aligned_compatible"
			),
			+ "binary type trait %is_aligned_replaceable"
		),
		(
		+ "2 inline functions %throw_system_error" @ %Exception;
		/ DLDI "simplified" @ %PseudoMutex ^ "%throw_system_error"
			~ "throw-expression"
		)
	),
	/ %YFramework $=
	(
		/ @ "namespace %platform::FAT::Clusters" @ %YCLib.FileSystem $=
		(
			+ "function %IsFreeOrEOF" @ "namespace %Clusters",
			+ "function %ConvertToMBCS" @ "namespace %LFN",
			+ 'using VolumeLabel = array<byte, 11>;',
		),
		+ "namespace %platform::FAT" @ "platform %DS" @ %'YCLib_(DS)'.DSIO$=
		(
			+ $dev "static assertions for %(byte, size_t)",
				// Specific properties are required to support FAT
					implementation.
			+ 'using namespace platform::FAT',
			+ "class %AllocationTable"
		)
	)
),

b609
(
	/ %YFramework $=
	(
		/ @ "namespace %platform::FAT" @ %YCLib.FileSystem $=
		(
			+ "enumerators %(MaxValid12, MaxValid16, MaxValid32, Bad12, Bad16,
				Bad32, EndOfFile12, EndOfFile16, EndOfFile32)"
				@ "namespace %Clusters",
			+ "yconstexpr objects %(MinSectorSize, MaxSectorSize)",
			(
			+ "yconstexpr object %EntryDataSize";
			+ "class %EntryData"
			)
		),
		+ "member function %SectorCache::GetDisc" @ %'YCLib_(DS)'.DSIO
	),
	* "defaulted as deleted function called for non trivially destructible \
		types" @ "class template %optional" @ %YBase.YStandardEx.Optional $since
		b591
),

b608
(
	/ %YFramework $=
	(
		/ "ignored message with lower level than 'Alert'" @ "platform %DS"
			@ "member function Logger::DefaultSendLog" @ %YCLib.Debug,
		* "printed pixel noise due to 'std::printf' call" @ "platform %DS"
			@ %Helper.Initialization $since b450,
			// This occurred when %FetchMIMEBiMapping called.
		/ %YCLib $=
		(
			+ 'using u16string = basic_string<char16_t>;' @ %Container,
			/ @ "namespace %platform::FAT" @ %FileSystem $=
			(
				/ @ "namespace %LFN" $=
				(
					+ "function %ConvertToAlias" $dep_from %Container,
					+ "functions %(FetchLongNameOffset, WriteNumericTail)"
				),
				+ "enums %(BPB, FSI)",
				+ "inline namespace %FAT16"
					$= (+ "enum %BPB"),
				+ "inline namespace %FAT32"
					$= (+ "enum %BPB"),
				+ "yconstexpr objects %(FSI_LeadSig_Value, FSI_StrucSig_Value,
					FSI_TrailSig_Value)"
			)
		),
		/ @ "class %SectorCache" @ %'YCLib_(DS)'.DSIO $=
		(
			+ "function %FillPartialSector",
			(
			/ "reordered parameters" @ "functions %(EraseWritePartialSector,
				ReadSectors, WritePartialSector, WriteSectors)";
			+ "default argument '1'" @ "last size parameter" @ "functions \
				%(EraseWritePartialSector, ReadPartialSector, ReadSectors, \
				WritePartialSector, WriteSectors)"
			),
			/ DLDI "simplified I/O routines" ^ "private member templates"
		)
	),
	* $comp "printed pixel noise due to tracing" $since b434
		$dep_from %YFramework.YCLib.Debug;
		// For %debug configuration, this was changed since b432, but only \
			occurred by %YTraceDe calls in %YLoader since b434. For %release \
			configuration, this occurred from b498.
	/ %YBase.YStandardEx $=
	(
		+ "function templates %(read_uint_le, write_uint_le)"
			@ %CStandardInteger,
		+ "function template %restrict_length" @ %String
	)
),

b607
(
	/ $re_ex(b604) DLDI @ "main function" @ "platform %Android" @ %Main
		^ 'yunused',
		// To eliminated warning: [-Wunused-variable].
	/ %YBase.YStandardEx $=
	(
		+ "functor %lref_less" @ %Functional,
		/ "inline namespaces %(cpp2011_traits, cpp2014_traits)"
			=> "%(cpp2011, cpp2014)" @ %TypeTraits,
		/ "enclosed ISO C++ 14 interface" @ "inline namespace %cpp2014"
			@ %IntegerSequence,
		/ @ "class %ifile_iterator" @ %CStandardIO $=
		(
			/ DLDI "simplified data member initialization"
				^ "braced-init-list '{}'",
			(
			+ "alias %int_type";
			+ "functions 2 %(sputbackc; sungetc)"
			)
		)
	),
	/ DLDI "simplified container type" ^ $dep_rom
		("%lref_less" @ %YBase.YStandardEx.Functional),
	/ %YFramework $=
	(
		/ @ "namespace %platform" @ %YCLib.FileSystem $=
		(
			+ "enum class %FileSystemType"
			+ "namespace %FAT" $=
			(
				(
				+ "alias %ClusterIndex";
				+ "enum class %Attribute with bitmask operations"
				),
				+ "yconstexpr object %IllegalAliasCharacters",
				(
				+ "alias %FileSize";
				+ $resolve(#18) "yconstexpr object %MaxFileSize"
				),
				(
				+ "alias %EntryDataUnit";
				+ "namespace %Clusters" $=
				(
					+ "objects %(PerFAT12, PerFAT16)",
					+ "enum for %ClusterIndex constants"
				),
				+ "namespace %LFN" $=
				(
					+ "enum %Offsets",
					+ "yconstexpr object %OffsetTable",
					+ "enum for %size_t constants",
					+ "enum for %EntryDataUnit values",
					+ "yconstexpr objects %IllegalCharacters",
					+ "function %GenerateAliasChecksum"
				),
				)
				(
				+ "alias %Timestamp";
				+ "functions %(ConvertFileTime, FetchDateTime)"
				)
			)
		),
		/ %YSLib.Service $=
		(
			* "wrong %operator>> for %File and non-string argument deduced"
				@ %File $since b326 $=
			(
				// Only explicit call of 'operator>><char>' worked.
				/ "restricted overloading for non-string class type"
					^ "%ystdex::enable_if_t"
				/ "restricted overloading for string class type"
					^ "%ystdex::enable_for_string_class_t"
			),
			/ @ "class %TextFileBuffer" @ %TextManager $=
			(
				* $comp "possible dropped first byte for reading block"
					$since b495 $dep_from %CHRLib.StaticMapping,
				/ DLDI "simplified put back" @ %CharacterProcessing ^ $dep_from
					("%ifile_iterator::sungetc" @ %CStandardIO) "%std::ungetc",
				* "missing putting back character after searching by iterator"
					@ "function %GetPosition" $since b400
			)
		),
		/ %CHRLib $=
		(
			* "undefined behavior for referential proxy of iterator \
				indirection result" @ "all 2 function templates %FillByte"
				@ %StaticMapping $since b495,
				// Deferred cast to 'byte' is indeterminately sequenced with \
					iterator incrementing.
			/ DLDI "simplified put back" @ %CharacterProcessing ^ $dep_from
				("%ifile_iterator::sungetc" @ %CStandardIO) "%std::ungetc"
		)
	)
	* "missing creation directories for build and release" @ "%YSTest makefile"
		@ "platform %DS" $since b603,
		// To prevent making failed caused by nonexistence of parent directory \
			in '.arm7' and '.arm9' file paths.
	* $comp "dropped first byte for buffered block text" @ %YReader.DSReader
		$since b495 $dep_from %YFramework.Service.TextManager
		// For test build, only %MinGW32 seemed to be normal.
),

b606
(
	/ %YBase.YStandardEx $=
	(
		+ "member function %block_buffer::fill" @ %CStandardIO,
		/ %ScopeGuard $=
		(
			/ @ "class template %guard" $=
			(
				* "missing explicitly defaulted move %operator=" $since b605,
				* "wrong exception specifiction" @ "constructor template"
					$since b605
			),
			/ @ "all 2 function templates %make_guard" $=
			(
				(
				+ "1st templatee parameter 'bool _bNoThrow' with default \
					argument 'true'";
				/ "'noexcept' expression for function object"
					-> "template parameter _bNoThrow"
				),
				* "wrong template argument" @ "trailing-return-type" $since b605
			)
		),
		+ "function template %call_for_value" @ %Functional,
		+ "function template %normalize" @ %String
	),
	+ "member function %SectorCache::FillSectors"
		@ %YFramework.'YCLib_(DS)'.DSIO,
	/ $impl "simplified %locked_ptr construction" $effective
		@ %(Helper.GUIApplication, YCLib.(Host, HostedGUI, XCB))
),

b605
(
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %CCharacterType $=
			(
				+ "function templates %(tolower, toupper)"
					^ "%std::(towlower, towupper)",
				+ "inline function overloadings %(tolower, toupper) for %char"
					^ "%std::(tolower, toupper)"
			),
			* "wrong standard library routines called for !%char type"
				@ "function templates" ("%ntctsicmp" $since b329 $orig
				(@ "%sntctsicmp" $since b329), "%ntctsnicmp" $since b604)
				@ %CString
				$= (/ $impl ^ $dep_from ("%ystdex::tolower" @ %CCharacterType)
					~ "%std::tolower"),
			/ @ "namespace %single_thread" @ %PseudoMutex $=
			(
				* "missing nothrow exception-specification" @ "debug interface"
					@ "constructor with %defer_lock_t parameter"
					@ "class template %unique_lock" $since b551,
					// ISO C++11 requires 'noexcept' on this constructor.
				+ $impl 'yimpl(ynothrow)' @ "stubs without exception \
					specifications" $effective @ "classes %(mutex, \
					recursive_mutex, timed_mutex, recursived_timed_mutex),
					class templates %(lock_guard, unique_lock), function \
					templates %(lock, try_lock)"
			),
			+ "class template %guard; 2 function templates %make_guard"
				@ %ScopeGuard
		),
		/ "split macro %YB_ATTR" -> "%(YB_ATTR, YB_ATTR_STD)" @ %YDefinition
			// http://stackoverflow.com/questions/26888805/how-to-declare-a-lambdas-operator-as-noreturn.
			// http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140310/101215.html.
	),
	/ %YFramework $=
	(
		+ $lib "'YB_NONNULL' for nonnull function parameters"
			@ %'YCLib_(DS)'.DSIO $effective @ "class %SectorCache",
		+ $revert_ex(b600) $re_ex(b594) "'YB_ATTR(noreturn)' for lambda \
			expressions always not return" @ %YCLib.HostedGUI $dep_from
			%YBase.YDefinition,
		/ %YSLib.Core.CoreUtilities $=
		(
			/ "function templates %(FetchSign, IsInInterval, \
				IsInClosedInterval, IsInOpenInterval, RestrictUnsigned)"
				^ "_type(0)" ~ 'FetchZero<_type>()';
				// ADL is complicated and considered unnecessary here.
			- $revert(b201) "function template %FetchZero"
				// It is verbose and there exist some problems (e.g. exception \
					specification) underspecified. Exception specification \
					checks should be resolved for other functions in future.
		)
	)
),

b604
(
	/ %YBase.YStandardEx $=
	(
		/ %CStandardInteger $=
		(
			+ "function template %unpack_uint",
			+ $dev "static assertion for integer width"
				@ "function template %pack_uint"
		),
		/ @ "class template %used_list_cache" @ %Cache $=
		(
			+ 'using typename map_type::value_type;';
			+ "data member 'std::function<void(value_type&)> flush{};'";
			/ "supported call %flush when entry is replaced"
		),
		+ "class %block_buffer" @ %CStandardIO,
		/ %CString $=
		(
			/ "functions %(strlen_n, strcpy_n)" -> "inline functions",
			+ "function template %ntctscpy without length parameter",
			+ "2 inline functions %ntctscpy without length parameters for \
				%(char, wchar_t) pointers" ^ "%std::(strcpy, wcscpy)",
			+ "function template %ntctsncpy",
			+ "2 inline functions %ntctsncpy for %(char, wchar_t) pointers"
				^ "%std::(strncpy, wcsncpy)",
			* "missing including %CAssert" $since b432,
				// The program may be ill-formed due to undefined %yconstraint.
			/ @ "function template %ntctsicmp" $=
			(
				* "wrong comparison for difference" $since b329,
				* "missing check termination of string" $orig
					(@ "function template %sntctsicmp" $since b245)
			),
			+ "function templates %(ntctsnicmp, ntctsnlen)",
			+ "2 inline functions %ntctsnlen for %(char, wchar_t)"
				^ "%std::(memchr, wmemchr)"
		),
		/ %String $=
		(
			+ "2 function templates %ntctsncpy for string classes",
			+ "assertion for non null pointer parameter" ^ "%yconstraint"
				$effective @ "function templates %(erase_left, erase_right, \
				ltrim, rtrim, trim)"
		)
	),
	+ %DSIO @ %YFramework.'YCLib_(DS)' $=
	(
		+ "class %Disc",
		+ "class %SectionCache" ^ $dep_from
			("%block_buffer" @ %YBase.StandardEx.CStandardIO)
	),
	* $dev "wrongly placed %test.cpp in filter %ystdex" @ "Microsoft VC++ project %YBase"
		$since b519,
	/ @ "main function" @ %Main $=
	(
		(
		/ "simplified exception handling" ^ "%FilterException" ~ "%HandleFatalError";
		/ $comp "reserved original error level in %LoggedEvent objects instead \
			OF 0"
		),
		/ "return %(EXIT_FAILURE, EXIT_SUCCESS) for failure and success \
			execution",
		/ "call %terminate for failure execution" @ "platform %DS"
			// To avoid error message disappeared on power off.
	)
),

b603
(
	/ $build @ "makefiles" @ "platform %DS" $=
	(
		/ @ "%YSTest makefile" $=
		(
			- "all optional EFS support by %USE_EFS",
			- "variables %(PROGNAME, OFILES, ADD_LIBS)"
			/ @ "target '$(CONF)'" $=
			(
				* "missing dependency '$(OUTPUT).nds'" $since b478 $orig
					(@ "target '$(BUILD)'" $since $before b132),
				- "detection for variables %(TEXT_TO_SAY_1, TEXT_TO_SAY_2, \
					TEXT_TO_SAY_3, TEXT_TO_SAY_4, NL_AND_PAUSE, MSG_IS_ERROR)"
					@ "recipe"
			),
			/ "%(ARM7OBJ, ARM9OBJ)" => "%(ARM7BIN, ARM9BIN)",
				// To be consistent with children makefiles.
			+ "build message of configuration at beginning"
				@ "target '$(OUTPUT).nds'",
				// Also to behave similar as children makefiles.
		),
		* "redundant '/'" @ "inclusion path for %Toolchain.options.mk"
			@ "%Tools/Scripts/Toolchain.DS.mk" $since b558
			// It seemed to be OK, but is not intended.
	),
	/ $build @ "Microsoft VC++ projects" $=
	(
		(
		* "missing wrapping output for Visual Studio"
			@ "project %YSTest_Android" $since b497;
			// Clicking on error output would not go to source lines as other \
				projects.
		/ "wrapped build and rebuild commands with pipes by 'bash -o pipefail'"
			@ "command calls" $effective @ "platforms %(DS, Android)",
			// To prompt error when fail to compile or link. Note 'bash' has \
				already been a necessary dependency for those targets.
		),
		- "all unused WinGDB user properties" $effective
			@ "projects %(YSTest_Android, YSTest_DS)"
	),
	/ %YBase.YStandardEx $=
	(
		/ %Algorithm $=
		(
			- $revert(b304) "function template %pod_fill",
				// The explicit loop unrolling would not be useful for mordern \
					implementations of C++. Use %std::fill with static \
					assertion instead. Actually this does not need POD.
			/ "POD operations" -> "trivially type operations" $=
			(
				/ DD "Doxygen group %pod_operations"
					-> "%trivial_type_operations",
				+ "function templates %(trivailly_fill_n, trivailly_fill)",
				+ 'ynothrowv',
				(
				/ "function templates %(pod_copy, pod_copy_n, pod_move, \
					pod_move_n)" -> "%(trivailly_copy, trivially_copy_n, \
					trivially_move, trivially_move_n)";
				/ $comp DLD "type-parameter-key" -> 'typename' ~ 'class',
				/ $comp DLDI ^ 'sizeof(_type)' ~ 'sizeof(*first)',
				+ $comp "assertions for validation of input pointers"
					^ "%is_undereferenceable",
				/ $comp $dev "static assertion for types" ^ "%is_trivial"
					~ "%is_pod",
					// Note that %is_trivially_copyable is not supported by \
						libstdc++ 4.9 yet.
				+ $comp $dev "static assertion" ^ "%is_copy_assignable"
					// To be similar to %std::copy.
				)
			)
		),
		+ "function template %pack_uint" @ %CStandardInteger
	),
	/ DLDI ^ $dep_from ("%ystdex::trivially_copy_n"
		@ %YBase.YStandardEx.Algorithm) ~ "%std::memcpy" $effective
		@ %'YCLib_(MinGW32)'.NLS,
	/ %YFramework $=
	(
		/ $forced DLDI %YSLib.Service.TextRenderer $dep_from
			"ystdex::trivially_move_n" @ %YBase.YStandardEx.Algorithm,
		/ DLDI %YCLib.Native ^ ($dep_from "ystdex::trivially_copy_n"
			@ %YBase.YStandardEx.Algorithm) ~ "%std(uninitialized_copy, copy_n)"
	)
),

b602
(
	/ "makefiles" @ "platform %DS" $=
	(
		* $build "missing dependency of libraries" @ ".arm9.elf file"
			@ "ARM9 makefile" $since $before b132,
			// The project should be rebuilt after .a files rebuilt.
		* $build "missing dependency of ARM7 ojbect" @ "%YSTest_DS makefile"
			$since $before b132
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ @ "function %InitializeFileSystem" @ "platform %DS" @ %NativeAPI
				$=
			(
				// Slightly made the .nds file smaller.
				/ DLDI ^ "custom device operation tables and libfat internal \
					routines",
				+ "exception message tracing on failure"
			),
			+ 'using yimpl(ystdex)::make_unique_default_init;' @ %Reference
		),
		+ 'using platform::make_unique_default_init;' @ %YSLib.Adaptor.YAdaptor
			$dep_from %YCLib.Reference
	),
	/ DLDI "simplified array allocation" ^ "%make_unique_default_init"
		~ "%make_unique" $effective %('YCLib_(MinGW32)'.MinGW32, YCLib.Host,
		YSLib.Adaptor.Image),
	+ "function templates %(construct, construct_range, destroy, destroy_range,
		uninitialized_construct, uninitialized_construct_n)"
		@ %YBase.YStandardEx.Memory
),

b601
(
	+ $repo "glob pattern 'YFramework/*/lib*/lib*.a'" @ "%.hgignore",
	(
	/ "ignored errors" @ "target %clean" @ "library makefiles"
		@ "platforms %(DS, Android)";
	* $comp "failure on %clean executed in Visual Studio" $since b473
		// The *.log file in the build directory cannot be removed, since it \
			is opened by Visual Studio and 'rm' would complain: \
			"Device or resource busy"
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			- $revert(b286) 'using platform::NativePathCharType;'
				@ %Adaptor.YAdaptor,
			* "missing updating macro %YFM_YSLib_UI_YDesktop"
				@ %UI.YModules $since b586,
			/ %Service $=
			(
				/ %FileSystem $=
				(
					/ @ "function %MakeNormalizedAbsolute" $=
					(
						+ "tracing converted path with level 'Debug'",
						* "assertion failed" @ !"platform %Win32" $since b599
							$dep_from "%Path::Parse" $dep_to
							"absolute path checking failure"
					),
					/ @ "class %Path" $=
					(
						/ DLDI "simplified friend function %swap"
							^ "%GetBaseRef" ~ 'static_cast'
						/ DLDI "simplified function %GetString, friend \
							function %to_string" ^ "%GetBase" ~ 'static_cast',
						* "inserted nothing as prefix"
							@ "static function %Parse" $since b499 $=
							// Initializer '{}' would be treated as an empty \
								sequence of strings rather than an empty string.
							(/ $re_ex(b499) '{}' -> '{{}}')
					)
				),
				/ $revert_ex(b301) "return type" @ "function %GetAreaOf"
					-> 'size_t' ~ "deduced type",
					// To eliminate warning: [-Wsign-conversion].
				/ DLDI "cast to 'wchar_t'" @ %TextRenderer
					// To eliminate warning: [-Wsign-conversion] where \
						'wchar_t' is not the same sign as 'ucs4_t'.
			)
		),
		/ %YCLib $=
		(
			- $revert(b286) "alias %NativePathCharType" @ "namespace %platform"
				@ %FileSystem $dep_from %YSLib.Adaptor.YAdaptor
			* "missing updating header for %YGraphics caused ill-formed use of \
				undeclared %YSLib::Drawing::ConstGraphics" @ %XCB
				$= (/ '#include YFM_YSLib_Core_YGDIBase'
					-> '#include YFM_YSLib_Core_YGraphics'),
			* $re_ex(b458) "wrong use of %yconstexpr for functions %MapKeyChar"
				@ %YCLib.Keys
				$since b487 $= (^ "%yconstfn" ~ "%yconstexpr"),
			/ "platform %DS" @ %NativeAPI $=
			(
				/ "cleanup unused %USE_EFS conditional inclusion",
				/ $dev "platform_ex::DMAFillWordsAsync" $=
				(
					^ "types from <cstdint>" ~ "types from libnds",
					/ $impl !^ "unneeded volatile type cast"
				),
				+ "function %InitializeFileSystem",
				- "inclusion of <nds.h>" @ "header" $dep_from
					"hiding libfat interface"
			)
		),
		* $comp $build "ill-formed use of %nptr since static assertion of \
			%nptr always triggered it" @ %YCLib.XCB $dep_from
			%YBase.YStandardEx.Pointer $orig $since b595 $dep_from
			%YBase.YStandardEx.Utilities,
		/ %Helper $=
		(
			/ DLDI ^ 'yunused' @ "function body for 3rd parameter"
				@ "function %AttachToHost" @ !"platform %Win32" @ %HostedUI,
				// To eliminate warning: [-Wunused-parameter] hosted platforms \
					other than %Win32.
			* "ill-formed buffer access" @ 'YCL_HostedUI_XCB' $since b589
				$= (/ $forced ^ "%ScreenRegionBuffer::Lock"),
			/ DLDI ^ 'yunused' @ "member %HostRenderer::RefreshForWidget"
				@ !"platform %Win32" @ %HostedUI,
				// To eliminate warning: [-Wunused-variable] hosted platforms \
					other than %Win32.
			/ %ShellHelper $=
			(
				(
				- $revert(b195) "function template %SetShellToStored";
				- $revert($before b132) "function template %FetchStored"
				),
				- $revert(b195) "function template %ReleaseStored" $dep_from
					"%Cleanup" @ %YReader.Shells,
				- $revert($before b132) "function template %SetShellToNew"
			),
			/ @ "platform %DS" @ %Initialization $=
			(
				/ $impl "InitializeEnvironment"
					^ "%InitializeFileSystem" $dep_to "hiding libfat interface",
				* "redundant '\n' printed at last after horizontal line"
					@ "function %HandleFatalError" $since b508
					// This cause LibFAT error title disappeared.
			)
		),
		* $dev "missing macro guard" @ !"platform %Win32"
			@ %'Helper_(MinGW32)'.Win32Control $since b578,
		/ %'Helper_(DS)'.DSMain $=
		(
			- "function templates %(ScrDraw, CreateSharedScreenImage)",
			/ @ "variables %(MainScreenWidth, MainScreenHeight)" $=
			(
				/ $dev "hard-coded screen width and height" $dep_to
					"hard coded screen measurement",
				+ 'yconstexpr'
			),
			- $revert(b297) "macros %(SCREEN_WIDTH, SCREEN_HEIGHT)" $dep_from
				"hard coded screen measurement"
		)
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			* "ill-formed %nptr constructor for %nullptr_t" @ %Pointer $orig
				(@ %Utilities) $since b560,
			/ DLDI "cast to 'unsigned'" @ "function %iswprint"
				@ %CWideCharacterType,
				// To eliminate warning: [-Wsign-conversion] where 'wchar_t' \
					is signed integer type.
			/ "directly cast to common type" @ "inner arguments"
				@ "function template %cast_array" @ %Array,
				// Also to eliminate warning: [-Wsign-conversion], etc when \
					the arguments are of distinct integer types.
			/ @ "class template %string_traits" @ %String $=
			(
				/ $revert_ex(b483) "%string_type" ^ "%remove_rcv_t"
					~ "%decay_t",
				* "corrected pointer types" $since b592
					$= (/ $revert(b592) ^ "pointers based on %value_type"
						~ "%allocator_traits")
					// As an example, for array types of 'char', the \
						'const_pointer_type' should not be 'char* const*'.
			),
			/ %Optional $=
			(
				* $impl "ill-formed inheriting constructor declaration"
					@ "%optional base class template" $since b591,
					// Both G++ 4.9.2 and Clang++ 3.6 are happy but G++ 5.1 \
						complains.
				/ DLDI "merged declarations %((in_place_t, in_place), \
					%(nullopt_t, nullopt))"
			),
			/ DLDI "merged declarations %((defer_lock_t, defer_lock), \
				%(try_to_lock_t, try_to_lock), (adopt_lock_t, adopt_lock))"
					@ %PseudoMutex
		),
		/ "substitution macro %yconstexpr" @ !"'constexpr' supported"
			@ %YDefinition -> '' ~ 'const'
			// To avoid possible ill-formed program due to duplicate 'const'. \
				Note now it behaves differently with '_GLIBCXX_USE_CONSTEXPR' \
				of libstdc++.
	),
	/ %Tools $=
	(
		/ @ !"platform %Win32" @ %SHBuild.Main $=
		(
			(
			* "ill-formed string %empty call" @ $since b599,
			* $comp "ill-formed string decoding call" $since b592 $dep_from
				("%ystdex::string_traits::const_pointer"
				@ %YBase.YStandardEx.String);
			* "failed to build" $orig $since b586 $dep_from
				%YFramework.(YSLib.UI.YModules, YCLib.XCB)
			),
			* $comp "assertion failed for absolute path checking" $since b599
				$dep_from "absolute path checking failure"
		),
		/ %ProjectGenerator.Main $=
		(
			* "invalid %NormalizeDirectoryPathTail call" ^ "non-class type \
				result of %DecodeArg" @ !"platform %Win32" $since b599,
			- "'-Wpacked' option for projects generation"
		)
		/ %Scripts $=
		(
			(
			+ '$C_CXXFLAGS_PIC' @ ("begin" @ "default values") @ "variables \
				%(CFLAGS, CXXFLAGS, LDFLAGS)" @ "%SHBuild-common-options.sh";
			(
			- "independent %C_CXXFLAGS_PIC"
				@ "%(SHBuild-YSLib-debug.sh, SHBuild-YSLib-debug.sh)";
			* "missing '-fPIC' during dynamic library building with the \
				precompiled header" @ !"platform %Win32" $since b564
			),
			+ '$C_CXXFLAGS_PIC CXXFLAGS_IMPL_COMMON_THRD_' @ "value"
				@ "exported %LDFLAGS" @ "%SHBuild-YSLib-debug.sh",
			/ "set %$LDFLAGS_OPT_DBG as ' '" @ "debug configurations"
				@ "%SHBuild-BuildApp.sh" ~ "%LDFLAGS as ' '";
			/ $comp "enabled position independent code for all library and \
				user code" @ !"platform %Win32"
				// It is still reasonable for static libraries, e.g. to enable \
					being embedded in shared libraries.
			),
			+ '$CXXFLAGS_IMPL_COMMON_THRD_' @ "default value"
				@ "variable %LDFLAGS" @ "%SHBuild-common-options.sh";
			* "failed building dynamic libraries" $since b564,
				// It is strange that G++ 4.9.2 did not complain about missing \
					'-fPIC' and '-pthread' on linker command.
			- $build "warning option '-Wpacked'" @ "build scripts and common \
				makefiles" $dep_to "removal of -Wpacked"
		)
	),
	/ $re_ex(b598) DLDI "all string arguments 'u""' for non-dependent class \
		type parameters" -> '{}' $effective @ %YFramework.YSLib.UI.TextBox;
	/ $build "simplified makefiles by based on removal of '-Wpacked'"
		@ "platform %DS" $dep_from "removal of -Wpacked",
	/ %YReader $=
	(
		/ %Shells $=
		(
			/ $forced DLDI "image loading" $dep_from
				("%ScrDraw" @ %'Helper_(DS)'.DSMain),
			/ DLDI "simplified %Cleanup"
		),
		+ $dev $re_ex(b586) "out-of-line virtual destructors" @ ("class \
			%SwitchScreensButton" @ %ShlExplorer, "classes %(ShlHexBrowser, \
			ReaderBox, FileInfoPanel, ShlTextReader::BookmarkSession)"
			@ %ShlReader, "class %FrmAbout" @ %About, "class %BookmarkPanel"
			@ %BookmarkUI, "class %SettingPanel" @ %ReaderSettingUI,
			"class %ColorBox" @ %ColorPicker),
			// To eliminate Clang++ warning: [-Wweak-vtables].
		/ DLDI "member function %ShlExplorer::OnPaint",
			// To eliminate Clang++ warning: [-Wshorten-64-to-32].
		/ DLDI "cast to 'size_t'" @ "constructor %SettingPanel"
			@ %ReaderSettingUI,
			// To eliminate warning: [-Wsign-conversion].
		/ DLDI @ "class %HexViewArea" %HexBrowser $=
		(
			/ "cast to 'std::uint32_t'" @ "function %LocateViewPosition"
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			/ "cast to prvalue for %ItemPerLine as argument of %min"
				@ "function %Refresh" @ %HexBrowser
				// To avoid odr-use cause linking failure because 'yconstexpr' \
					static member %ItemPerLine is never undefined.
		),
		/ @ "class %ShlTextReader" @ %ShlReader $=
		(
			/ DLDI "constructor %SettingSession::SettingSession",
				// To eliminate Clang++ warning: [-Wshadow], although it is \
					rarely possible to access a non-static member of the \
					enclosing class.
			/ "prevent propagate exception" @ "destructor %BaseSession"
				^ "%FilterExceptions"
		)
	),
	+ $forced $revert_ex(b590) $dev 'const' @ "variable defined using \
		'yconstexpr'" $dep_from "%yconstexpr" @ %YDefinition $effective
		@ "141 instances" @ %YBase.YStandardEx.(BitSegment, CStandardInteger,
		IntegerSequence, Iterator, Optional, PseudoMutex, String, Rational,
		Tuple, TypeOperation, Variadic, Utilities),
		YFramework.('Helper_(DS)'.DSMain, CHRLib.(Encoding, MappingEx,
		StaticMapping), Helper.(ShellHelper, Initialization, Environent),
		YCLib.(FileSystem, Host, HostedGUI, Keys, Video), YSLib.(Adaptor.Font,
		Core.(YClock, YConsole, YEvent, YMessage), Service.(FileSystem,
		TextBase, TextFile, TextManager), UI.(Animation, Hover, Menu, YGUI,
		YWidgetEvent, Scroll)), 'YCLib_(MinGW32)'.(MinGW32, NLS),
		YReader.(HexBrowser, Shells, ColorPicker, ShlExplorer))
),

b600
(
	/ %YBase.YStandardEx $=
	(
		/ %Path $=
		(
			/ @ "class template %path" $=
			(
				+ "base class 'totally_ordered<path<_tSeqCon, _tNorm>>'",
				/ "function %equals" -> "friend function %operaor==",
				/ "function %before" -> "friend function %operaor<",
				(
				+ "2 function %operator/=";
				+ "base classes ('dividable<path<_tSeqCon, _tNorm>, typename \
					_tSeqCon::value_type>',
					'dividable<path<_tSeqCon, _tNorm>>')"
				)
			),
			- "rational operation function templates for %path instances",
		),
		/ + '\f' @ "default arguments of array" @ "all 5 function templates \
			%(erase_left, erase_right, ltrim, rtrim, trim)" @ %String,
			// For locale "C" characters which make %std::isspace return \
				nonzero.
		+ %Pointer;
		/ "class templates %(pointer_iterator, pointer_classify)" @ %Iterator
			>> %Pointer,
		(
		/ "class template %nptr, function templates for %nptr instances"
			@ %Utilities >> %Pointer;
		/ %Pointer $=
		(
		/ $dev "rational operators for class template %nptr except for \
			%operator(==, <)" -> "base class %totally_ordered<nptr<_type>>"
			@ "class template %nptr",
		/ "function templates %operator(<, ==) for %(nptr, pointer_iterator) \
			instances" -> "member functions with 'ynothrow'"
		)
		),
		/ $dev %BitSegment $=
		(
			/ "member functions (postfix %operator(++, --), %operator(+, -, \
				->, []))" -> "instance of %iterator_operators_t as base class"
				@ "class template %bitseg_iterator";
			- "rational operators for class template %bitseg_iterator except \
				for %operator(==, <)",
			/ "function templates %operator(==, <) for instances of \
				%bitseg_iterator" -> ("friend functions"
				@ "class template %bitseg_iterator with 'ynothrow'")
		),
		/ %Iterator $=
		(
			/ "all non-member (relational, compound assignment, arithmetic) \
				operator function templates" -> "friend functions" $effective
				@ "class templates %(pseudo_iterator, transformed_iterator, \
				subscriptive_iterator)",
			+ $dev 'yconstfn_relaxed' @ "conversion function to \
				'iterator_type&'" @ "class template %transformed_iterator"
		),
		/ %CStandardIO $=
		(
			+ $dev "explicitly defaulted copy %operator="
				@ "class %ifile_iterator",
				// To eliminate Clang++ warning: [-Wdeprecated].
			(
			/ "postfix %operator++, %operator->" -> "instance of \
				%iterator_operators_t as base class" @ "class %ifile_iterator";
			- "function operator!= for %ifie_iterator"
			)
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ %FileSystem $=
				(
					/ @ "class %Path" $=
					(
						(
						+ "function %GetBaseRef";
						/ DLDI "simplified 2 functions %operator/=" ^ ($dep_from
							("%path::operator/=" @ %YBase.YStandardEx.Path),
							"macros %(PDefHOp, ImplRet)"),
						),
						+ $dev "base classes ('totally_ordered<Path>', \
							'dividable<Path, String>, 'dividable<Path>')",
						(
						+ "function %GetBase";
						/ $dev $impl "inlined and simplified friend functions \
							%operator(==, <)" ^ "%GetBase",
						),
						+ 'explicit' @ "constructors with string parameter"
							// To avoid ambiguity in %operator/, etc.
					),
					- "function %operator/ for %Path"
						// Also to avoid some subtle diagnostics.
					- "rational operation functions %operator(!=, <=, >, >=) \
						for %Path",
					/ $comp $impl "function %DeleteTree appended %string with \
						cast to %String" ~ "implicitly converted to %Path"
				),
				/ @ %File $=
				(
					/ "function template %operator<< for %File and string types"
						-> "inline function %operator for %File and %string",
					+ "function template %operator for %File and any other \
						types" ^ "%std::ostringstream"
				),
				+ DLDI 'ImplI(IImage)' @ "overrider %BasicImage::SetSize"
					@ %YGDI $dep_from %YBaseMacro,
					// To eliminate Clang++ 3.6 warning: \
						[-Winconsistent-missing-override].
				/ %TextRenderer $=
				(
					+ DLDI 'override' @ "overrider %TextRegion::GetContext"
						$dep_from %YBaseMacro,
						// To eliminate Clang++ 3.6 warning: \
							[-Winconsistent-missing-override].
					/ DLDI "explicit cast to 'SDst'" @ "member function \
						%TextRenderer::ClearLine"
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				)
			),
			* "wrong node string compared" @ "function %IsPrefixedIndex"
				@ %Core.ValueNode
				$= (/ $re_ex(b599 )$impl "node string generation" ^ "%MakeIndex"
					~ "%to_string"),
			+ DLDI "'override' qualifiers" @ "setter overriders" @ "class %View"
				@ %UI.YWidgetView $dep_from %YBaseMacro
				// To eliminate Clang++ 3.6 warning: \
					[-Winconsistent-missing-override].
		),
		/ %NPL $=
		(
			/ %Lexical $=
			(
				/ @ "function %Decompose" $=
				(
					/ DLDI "simplified" ^ "%string::front"
						~ "%string::substr",
					/ $comp "guaranteed '\f' trimmed" ^ $dep_from
						("%ystdex::ltrim" @ %YBase.YStandardEx.String)
				),
				(
				/ "ignored null character"
					@ "function %LexicalAnalyzer::ParseByte";
				* $comp "redundant string with single null character at end of \
					list of %Tokenize result for null-terminated character \
					array as source" $since b335 $dep_to "null character in \
					NPL units"
				),
				/ DLDI "simplified function %Literalize"
			),
			/ "function %operator for %File and %Configuration" @ %Configuration
				-> "function %operator<< for %std::ostream and %Configuration"
				$dep_from %YSLib.Service.File,
			/ %NPLA1 $=
			(
				/ DLDI "function template% InsertChildSyntaxNode#3"
					^ "%TransformToSyntaxNode" ~ "%NodeLiteral::GetSyntaxNode",
				(
				/ ("alias %NodeSequence" @ "namespace %NPL")
					>> ("namespace %YSLib" @ %ValueNode)
				+ 'using %YSLib::NodeSequence';
				)
				/ ("class %NodeLiteral" @ "namespace %NPL")
					>> ("namespace %YSLib" @ %ValueNode) $dep_from
					"%NodeLiteral::GetSyntaxNode"
					@ %Tools.ProjectGenerator.Main;
				+ 'using YSLib::NodeLiteral;'
			)
		),
		/ %Helper $=
		(
			/ %Initialization $=
			(
				/ @ "function %FetchMIMEBiMapping" $=
				(
					* $comp "corrupted MIME data generated" $since b597
						$dep_from "null character in NPL units"
						// After this fix the format is still wrong but it \
							would not crash. Note this also made '""' being \
							output at the 2nd line of output, it now \
							disappears intentionally.
					* $comp "wrong format of MIME data generated" $since b598
						$dep_from %YSLib.Core.ValueNode
				),
				/ DLDI "simplified function %LoadConfiguration" ^ $dep_from
					("%NodeLiteral" @ %YSLib.Core.ValueNode)
					~ "%(PackNodes, MakeNodes)",
				/ @ "function %FetchMIMEBiMapping" $=
				(
					+ $re(b594) DLDI 'ynothrow' @ "lambda-expression pushed as \
						application exit callback",
					/ DLDI "push application exit callback only after resource \
						acquiring successfully"
						// Since otherwise the pointer is null, \
							delete-expression would do nothing, the observable \
							behavior would not change.
				),
				/ "functions %(ReadConfiguration, WriteConfiguration)"
					>> ("namespace %NPL" @ %NPL.Configuration)
			),
			/ %HostRenderer $=
			(
				/ DLDI "split evaluation of operand in 'typeid'"
					@ "member function %HostRenderer::InitWidgetView",
					// To eliminate Clang++ 3.6 warning: \
						[-Wpotentially-evaluated-expression].
				/ DLDI "renamed private member" @ "class %WindowThread"
					// To eliminate Clang++ warning: [-Wshadow].
			)
		),
		* $dev $build $impl "wrong returned value cast of %::ShllExecuteW"
			@ "function %ExecuteShellCommand" @ "platform %Win32"
			@ %YCLib.HostedGUI $since b592,
			// It would cause build failure on x86_64.
		+ "'_q' as 1st parameter for qualifier support"
			@ "all 8 macros 'DefSetter*'" @ %YBaseMacro,
		/ @ "function %ExpandEnvironmentStrings" @ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			/ DLDI "explicitly cast to 'unsigned long' for \
				'::ExpandEnvironmentStringsW' argument"
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			* $impl "strict ISO C++ compatibility" $since b594
				// See http://stackoverflow.com/questions/26888805/how-to-declare-a-lambdas-operator-as-noreturn.
				$= (- 'YB_NORETURN' @ "lambda-expression")
		),

	),
	/ @ %Tool $=
	(
		/ %ProjectGenerator.Main $=
		(
			/ DLDI "simplified commands and library paths concatenation",
			/ $forced $dev $impl "path operations" $dep_from
				%YFramework.Service.FileSystem,
			/ DLDI "node syntax transformation" ^ "%TransformToSyntaxNode"
				~ "%NodeLiteral::GetSyntaxNode"
		),
		/ %SHBuild.Main $=
		(
			/ $forced $impl "path argument" $dep_from
				%YFramework.YSLib.Service.FileSystem,
			/ DLDI "makefile parsing"
				// To eliminate Clang++ warning: [-Wshadow].
		)
	),
	/ %YReader $=
	(
		/ $comp "bookmark names guaranteed trimmed '\f'" @ %ShlReader
			^ $dep_from ("%ystdex::ltrim" @ %YBase.YStandardEx.String);
		/ $forced "return type" @ "function %FetchDefaultShellDirectory"
			$dep_from %YFramework.YSLib.Service.FileSystem -> "%IO::Path"
			~ "%String",
		* $comp "crashed on read automatically generated MIME data" $since b597
			$dep_from %YFramework.Helper.Initialization
			// After this fix the file extension category based on MIME \
				mapping detected normally.
	),
	/ "regenerated Code::Blocks projects"
		^ ("%GenerateProjects.sh" @ %Tools.Scripts) $effective @ %YBase,
	/ $forced "inserted qualifiers" @ "macro 'DefSetter' invocations" $dep_from
		%YFramework.YBaseMacro $effective @ %YFramework.(YSLib.(Core.(YDevice, \
		YGDIBase), Service.YGDI, UI.(Process, Scroll, Selector, YWidgetEvent, \
		YWidgetView, ComboList, YWiget)), YCLib.HostedGUI),
		YDE.ImageBrowser.ImageControl,
	/ $dev $build "toolchain and library using"
	(
		/ $re_ex(b520) "updated library %FreeImage" $=
		(
			(
			/ "updated base library 3.17.0" ~ "3.16.0";
			/ @ "file %Makefile.srcs" $=
			(
				/ 'VER_MINOR = 16.0' -> 'VER_MINOR = 17.0',
				/ $forced "updated %SRCS"
			)
			),
			/ "merged old modification",
			* "hard coded compiler for include file generation"
				@ "%Makefile.gnu" $since b562
				$= (/ "build %jsimdcfg.inc" ^ '$(CC)' ~ 'gcc'),
			/ $design "all '='" -> ':=' @ "makefiles",
			/ @ "%Makefile.mingw" $=
			(
				- $lib "some outdated comments",
				/ "allowed user-provided assembler by variable %NASM with 'yasm'
					as default value",
					// It seems that 'nasm' from MSYS2 does not work, 'yasm' \
						can be used instead.
				/ "allowed user-provided compiler and linker by variables \
					%(CC, CXX, LD)",
				/ "supported switching between i686 and x86_64 targets by \
					%MSYSTEM value 'MINGW32' and 'MINGW64'",
				/ "compiled '.o' with source extensions",
				* "empty %jsimdinc.h generated" $since b431,
					// This was not actually used since the file was \
						already copied to the source tree.
				(
				+ "flag %C_CXX_FLAGS with default value '-O3 -fdata-sections \
					-ffunction-sections -pipe -Wno-attributes -fexceptions \
					-DNDEBUG' and applied to %(CFLAGS, CXXFLAGS)";
				+ $comp "-fdata-sections -ffunction-sections"
					@ "%(CFLAGS, CXXFLAGS)"
				)
			),
			* "circular dependencies on assembly modules" $since b431
				$effective @ "%(Makefile.mingw, Makefile.gnu)"
				$= (+ '.SUFFIXES'),
			// There are nothing to update from new makefiles. \
				Particularity 'mkdir -p' does not work for 'cmd'.
			/ "removed external plugin initialization"
				@ "%Source/Plugin.cpp",
				// Also eliminated update for it.
			^ "libjpeg-turbo 1.4.0" ~ "libjpeg-turbo 1.3.1" @ "%Source/LibJPEG"
				$=
			(
				+ $forced '#define BITS_IN_JSAMPLE 8'
					@ "%(config.h, jconfig.h)",
					// Now libjepg-turbo supports 12-bit data, so it was \
						removed from "jmorecfg.h" to "jconfig.h". If not \
						defined, %::JSAMPER and other declarations are \
						missing, and the build would fail.
				/ "updated version numbers" @ "%jconfig.h",
				+ $forced "new file %jconfigint.h based on %jconfig.h",
				/ $forced "updated %Makefile.srcs"
			),
			^ "libpng 1.6.17 with old libpng 1.6.3 standard configuration \
				header file %Source/LibPNG/pnglibconf.h" ~ "libpng 1.6.12",
				$=
			(
				+ $forced '#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED'
					// Otherwise 'png_set_compression_level' would not be \
						declared.
				/ "updated value of macros %(PNG_USER_CHUNK_CACHE_MAX, \
					PNG_USER_CHUNK_MALLOC_MAX)"
			);
			// No other configuration update for libpng or libjpeg-turbo \
				needed currently. If Linux platforms are supported in future, \
				SIMD should be turned on by define 'WITH_SIMD'.
			/ "rebuilt"
		),
		/ DLP "platform %MinGW32" $=
		(
			^ $re_ex(b520) "MinGW[gcc version 4.9.2 (Rev5, Built by MSYS2 \
				project)] mingw32/mingw-w64-i686-gcc-4.9.2-5" ~ "MinGW[gcc \
				version 4.8.2 (Rev1, Built by MSYS2 project)] \
				mingw32/mingw-w64-i686-gcc-4.9.1-1" @ "platform %MinGW32",
				// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
					Exceptions implementation: Dwarf2.
			^ "mingw-w64-i686-binutils 2.25-4 from MSYS2",
			/ $re_ex(b520) "recompiled library %FreeImage" $dep_from
				"updated library %FreeImage"
		),
		/ DLP "toolchain and library using" @ "platform %DS" $=
		(
			^ $re_ex(b558) "updated devkitARM release 44"
				~ "devkitARM release 43",
			^ $re_ex(b558) "updated libnds 1.5.10" ~ "libnds 1.5.9",
			^ $re_ex(b558) "updated default arm7 0.5.27"
				~ "default arm7 0.5.26",
			^ $re_ex(b558) "updated libfat 1.0.12" ~ "libfat 1.0.11";
			/ $re_ex(b520) "recompiled library %FreeImage" $dep_from
				"updated library %FreeImage"
		)
	),
	- $repo "all .a files"
		// To avoid enlarged the repository too much.
);

////

