﻿/*
	© 2014-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.PreAlpha5.txt
\ingroup Documentation
\brief 版本更新历史记录 - PreAlpha5 。
\version r15128
\author FrankHB <frankhb1989@gmail.com>
\since build 500
\par 创建时间:
	2014-05-29 19:30:47 +0800
\par 修改时间:
	2016-06-11 02:40 +0800
\par 文本编码:
	UTF-8
\par 模块名称:
	Documentation::ChangeLog::PreAlpha5
*/

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

$import $HISTORY;

// Scope: [b500, b600);

b599
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %ValueNode $=
				(
					* "wrong return type" @ "member function template \
						%emplace_hint" @ "class %ValueNode" $since b598
						$= (/ "return type" -> 'iterator'
							~ 'pair<iterator YPP_Comma bool>'),
					/ @ "functions %MakeIndex" $=
					(
						+ "overloading for %size_t parameter";
						* "lexicographical order not reserved in result" $since
							b598
					)
				),
				/ %YException $=
				(
					/ "supported return %bool to indicate exception occurred"
						@ "function %TryExecute; function template \
						%FilterExceptions",
					/ "removed last '.'" @ "tracing message for caught \
						exception" @ "function %TraceExceptionType"
				)
			),
			/ %Service $=
			(
				* "wrong result due to no iteration made"
					@ "functions %(GetIterator, GetPosition)"
					@ "class %TextManager" @ %TextManager $since b595
				/ %FileSystem $=
				(
					/ "merged 2 function %GetExtensionOf for string types"
						-> "function template" ^ ("%ystdex::find_suffix"
						@ %YBase.YStandardEx.String)
					/ @ "class %Path" $=
					(
						(
						/ "%GetString supported delimiter parameter with \
							default argument 'ucs2_t(YCL_PATH_DELIMITER)'";
						+ "function %Verify";
						/ DLDI "simplified function %operator String"
							^ "%Verify",
						/ "function %GetMBCS supported 2nd delimiter parameter \
							with default argument 'ucs2_t(YCL_PATH_DELIMITER)'"
							^ "%Verify" ~ "%operator String"
						),
						+ 'using ypath::size',
						+ 'using ypath::max_size',
						+ "constructor template for input iterator pairs",
						+ "constructor template for instances of \
							%std::initializer_list",
						/ @ "function %operator/="
						(
							* "wrongly popped back parent component when the \
								parameter is parent component and parent \
								component is at end" $since b409
								// So 'string(Path("..") /= u"..")' should be \
									'string("../..")' rather than \
									'string("..")' in general.
							* "wrongly ignored parent component parameter when \
								the nothing can be popped" $since b409
								// So 'string(Path() /= u"..")' should be \
									'string("..")' rather than 'string()' \
									in general.
						)
					)
				)
			)
		),
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				(
				/ @ "all 2 function templates %InsertSyntaxNode"
					-> "4 function templates" $=
				(
					/ "return type" -> 'pair<ValueNode::Container, bool>'
						~ 'ValueNode::iterator',
					/ DLDI "implemented" ^ $dep_from ("%ValueNode::emplace_hint"
						@ %YSLib.Core.ValueNode) ~ "%ValueNode::emplace",
					/ "parameterized 1st parameter to support node container"
				);
				+ "3 function templates %InsertChildSyntaxNode"
				),
				/ @ "function %ConvertDocumentNode" $=
				(
					/ "pop back a space for non-empty string before converted \
						result '?>'",
					/ "push back a space before converted result '/>'",
					/ "pop back space before '</' if existed",
					/ DLDI "string concatenated by condition" ^ 'if'
						~ "conditional expression"
				),
				/ @ "namespace %XSML" $=
				(
					(
					+ "function template %MakeTop";
					+ "function %MakeTop",
					+ "function %MakeXMLDecl";
					+ "function %MakeXMLDoc",
					),
					(
					+ "(inline functions, function templates) \
						%(MakeAttributeTagLiteral; MakeAttributeLiteral)";
					+ "2 function templates %InsertAttributeNode" $dep_from
						"%InsertChildSyntaxNode"
					)
				),
				+ "constructors with parameter ('const ValueNode&',
					'ValueNode&&')" @ "class %NodeLiteral",
				/ "trimmed first newline characters for nonempty node output"
					@ "function %PrintSyntaxNode"
				+ 'using YSLib::MakeIndex;'
			),
			* $comp "lexicographical order not reserved for syntax node"
				@ ("function %Reduce" @ %SContext $since b335, $forced
				"function %TransformToSyntaxNode" @ %NPLA1 $since b598)
				$dep_from %YSLib.Core.ValueNode
		)
		/ %CHRLib $=
		(
			/ "parameter '_tObj&'" @ "all function template %Decode"
				@ "class template specializations %GUCSMapper" -> '_tObj&&'
				$effecive @ %(StaticMapping, MappingEx),
			* "non lvalue reference type cannot instantiate nonnull decoder \
				pointer" @ "function template %FetchMapperPtr" @ %Mapping $since
				b595;
			* "functions %MBCToUC without output" @ %CharacterProcessing $since
				b595
		),
		/ %YCLib $=
		(
			* "missing assertion string" @ "function %ExecuteShellCommand"
				@ "platform %Win32" @ %HostedGUI $since b592,
			/ %FileSystem $=
			(
				/ DLDI "simplified platform %Win32" @ "constructor \
					%DirectorySession" $dep_from %'YCLib_(MinGW32)'.MinGW32,
				+ "functions %platform::(SetBinaryIO; SetupBinaryStdIO)"
			)
		),
		/ "constructor %DirectoryFindData" @ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			/ $lib "allowed empty directory after trailing slashes and \
				backslashes removed and treated as current working directory",
			* DD "wrong precondition" $since b549
		)
	),
	/ %YReader $=
	(
		* $comp "member functions %DSReader::(GetTopPosition, \
			GetBottomPosition always returned initial value" @ %DSReader $since
			b595 $dep_from %YFramework.YSLib.Service.TextManager;
		* $comp %ShlReader $since b595 $=
		(
			* "wrong reading position indicated" @ "member functions \
				%(TextInfoBox::UpdateData, ReaderBox::UpdateData)",
			/ @ "class %ShlTextReader" $=
			(
				* "wrong result" @ "function %GetReaderPosition";
				* "wrong position indicated" @ "reader box",
				* "wrong last position updated" @ "function %UpdateReadingList",
				* "no effect" @ "function %Locate"
			)
		),
		* $comp "wrong bookmark position added" @ "class %BookmarkPanel"
			@ %BookmarkUI $since b595 $dep_from
			("%ShlTextReader::GetReaderPosition" @ %ShlReader)
	),
	/ $re_add(b598) DLDI "all string arguments containing '""' for \
		non-dependent class type parameters" -> '{}' $effective
		@ %YFramework.YSLib.Service.FileSystem,
	/ $re_add(b598) DLDI "all string arguments '""' for dependent parameters"
		-> 'string()' $effective @ %(YFramework.(Helper.Initialization, \
		NPL.NPLA1), Tools.SHBuild.Main),
	/ DLDI "printed new line" @ %Tools.SHBuild.Main ^ "%std::putchar"
		~ "%std::puts",
	/ %Tools $=
	(
		(
		+ %SXML2XML
			$= (+ %Main ^ $dep_from ("%platform::SetupBinaryStdIO"
				@ %YFramework.YCLib.FileSystem));
		+ "installing %SXML2XML" @ "!SHBuild_NoDev" @ "%install-sysroot.sh"
		),
		/ %RevisionPatcher.Main $=
		(
			(
			/ $lib $impl "simplified" ^ $dep_from ("%platform::SetupBinaryStdIO"
				@ %YFramework.YCLib.FileSystem);
			/ $comp "supported platforms other than %Win32",
			/ $comp "removed redandant call of %std::ios_base::sync_with_stdio"
			);
			/ "wrapped to return nonzero when caught exception"
				^ "%FilterException"
		),
		/ "function %::main" @ SHBuild.Main $=
		(
			* "missing wrapped quotes on program name" @ "usage text" $since
				b474,
				// Otherwise it would be wrong if the full path has whitespaces.
			/ "ignored empty command line arguments",
			* $comp "first empty argument or argument containing only \
				slashes/backslashes caused assertion failure in \
				%VerifyDirectory call of normalizing %SRCPATH" $since b474
				$dep_from %YFramework.'YCLib_(MinGW32)'.MinGW32
				// Note that MSYS2 would convert path of single slash.
		),
		(
		+ %ProjectGenerator
			$= (+ %Main ^ $dep_from %YFramework.NPL.NPLA1);
		+ "%GenerateProjects.sh" @ %Tools,
			// Ensured generated files are identical to current ones.
		+ "installing %ProjectGenerator" @ "!SHBuild_NoDev"
			@ "%install-sysroot.sh"
		)
	),
	/ @ "function template %write" @ %YBase.YStandardEx.String $=
	(
		/ "parameter type of %std::basic_string instances"
			-> "template type parameter",
		+ "position parameter",
		+ "custom length parameter",
		+ "function templates %(find_prefix, find_suffix)"
	),
	/ $dev "Code::Blocks projects" $=
	(
		/ %YBase $=
		(
			* DLD "redundant node %CodeBlocks_project_file/Project/Extensions"
				$since b598,
			* $dev "wrong header name for %YBase.YStandardEx.Optional" $since
				b590,
			* "missing unit 'source/ystdex/concurrency.hpp'"
				@ "platforms %(Android, DS)" $since b520
		),
		- $dev "all nodes \
			%CodeBlocks_project_file/Project/Build/Target/working_dir"
			$effective @ "platform %MinGW32" @ %(YBase, YFramework);
		/ %YFramework $=
		(
			/ @ "%YFramework.cbp" $=
			(
				* DLD "redundant node \
					%CodeBlocks_project_file/Project/Option pch_mode" $since
					b598,
				* "missing unit 'include/YCLib/HostedGUI.h'" $since b560,
				* "missing updating freetype headers" $since b563,
				* "redundant %DS header" $since b585,
				- "unit 'data/default_font.bin'"
					// For consistent with other files.
			),
			* "redundant unit '../include/YSLib/Service/yftext.h'"
				@ 'YFramework_*.cbp' $since b473
			* "redundant unit '../source/YSLib/Service/yfile.cpp'"
				@ "%(YFramework_DS.cbp, YFramework_Android.cbp)" $since b473
			* "missing unit '../source/YSLib/UI/Viewer.cpp'"
				@ "%YFramework_Android.cbp" $since b525
		),
		- "all unit '../../Data/cp113.bin'" $effective
			@ "%(YFramework.cbp, YFramework_DS.cbp)",
			// Since it is not necessary long ago.
		* "duplicate units ('AndroidManifest.xml', 'Makefile')"
			@ "%YSTest_Android.cbp" $since b502,
		/ $lib "single quotes" @ "node %ExtraCommands" @ "%YSTest_MinGW32.cbp"
			-> "double quotes"
			// Note this might be different than Code::Blocks saved.
	)
),

b598
(
	/ %YBase.YStandardEx $=
	(
		+ "3 function template %quote" @ %String,
		/ @ %Any $=
		(
			/ "type" @ "alias %any_ops::any_storage" -> 'pod_storage< \
				aligned_storage_t<sizeof(void*), sizeof(void*)>>'
				~ 'pod_storage<>>';
				// From 8B to 4B on i686 targets.
			/ $comp $src $since b351 "%any size"
				// Made the storage compact (from 32B to 8B on i686 targets),
					same with implementation of %std::experimental::any in
					libstdc++ 5.
		)
	),
	/ %YFramework $=
	(
		* "invalid return type" @ "%string undeclared" @ "macro %YCL_TraceRaw"
			@ %Debug $since b593
			$= (+ $revert_ex(b593) + "'platform::' prefix" @ "return type"
				@ "lambda-expression")
			// This caused tracing macro could not be used unless the name \
				'string' is declared as compatible with 'sfmt' return type.
		/ %YSLib $=
		(
			/ %Adaptor $=
				(/ $dev "using-declaration of names in namespace %platform \
					%(basic_string, string, wstring, sfmt, vsfmt, to_string, \
					to_wstring)" @ %YAdaptor >> %YTextBase)
			/ %Core.ValueNode $=
			(
				/ @ "class %ValueNode" @ %ValueNode $=
				(
					+ "function template %(emplace, emplace_hint)"
						^ "%DefFwdTmpl",
					(
					+ "function template %insert" ^ "%DefFwdTemp";
					/ "all 2 functions %Add" -> ("inline function" ^ "%insert")
					),
					- $revert(b398) "function %GetContainerPtr",
					- $revert(b502) "function %ClearChildren",
					/ "simplified (copy, move) constructors"
						^ "%DefDeCopyMoveCtor",
					/ "function %GetContainerRef" $=
					(
						+ 'ynothrow',
						/ $dev -> "inline function"
					),
					/ "function %GetSize" -> "%size",
					+ "function %empty",
					/ $src $since b502 "node children allocation"
						^ "in place class storage" ~ "%unique_ptr" ,
					/ "removal of unique pointer node container interface" $=
					(
						- $revert(b502) "constructor (function, template) with \
							%unique_ptr<Container> parameter"
						- $revert(b503) "function %SetChildren with \
							%unique_ptr<Container> parameter"
					),
					/ "function %GetContainerRef" $=
					(
						/ DLDI ^ "macro %(PDefH, ImplExpr)",
							// For 'const', 'DefSetter' cannot be used here.
						/ $dev $src -> "inline function"
					),
					/ $dev $src $since b595 "functions %SwapContainer"
						-> "inline function" ^ "macros %(PDefH, ImplExpr)"
				),
				/ $forced "return type" @ "all 2 function %CollectNodes"
					-> 'ValueNode::Container'
					~ 'unique_ptr<ValueNode::Container>' $dep_from "removal of \
						unique pointer node container interface",
				+ "2 inline functions %MakeIndex"
			)
		),
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				(
				+ 'using YSLib::pair;',
				+ 'using YSLib::to_string;';
				+ "2 function templates %InsertSyntaxNode" ^ $dep_from
					("%MakeIndex" @ %YSLib.Core.ValueNode);
				+ "function %TransformToSyntaxNode"
				),
				+ "final class %NodeLiteral",
				(
				/ "allowed exception %ystdex::bad_any_cast propagete out of \
					function %EscapeNodeLiteral";
				+ "function %LiteralizeEscapeNodeLiteral"
				),
				* $lib "missing check non-empty node"
					@ "function %PrintSyntaxNode" $since b597
					// This would cause undefined behavior for empty nodes.
			),
			/ DLDI "simplified %operator<<" @ %Configuration ^ $dep_from
				("%LiteralizeEscapeNodeLiteral" @ %NPLA1)
		)
	),
	/ DLDI "simplified quoted string generation" $effective
		@ ((("functions %(EscapeLiteral, Literalize)" @ %Lexical,
		"function %ConvertDocumentNode") @ %NPL, "(all 2 functions, 1 function \
		template) %to_string" @ %YSLib.UI.YComponent) @ %YFramework, "member \
		function %ShlReader::LoadBookmarks" @ %YReader.ShlReader) ^ $dep_from
		("%ystdex::quote" %YBase.YStandardEx.String)
	/ $dev $build @ "Code::Block project files" $=
	(
		- "all node %CodeBlocks_project_file/Project/Extensions",
		/ @ "node %CodeBlocks_project_file/Project/"
			@ !"platform-specific project files" $=
		(
			/ "cleared all children except nodes %Option with attribute %title \
				of %(type, compiler)" @ "node %Build/Target"
		),
		/ @ "all nodes %CodeBlocks_project_file/Project/" @ !"platform %MinGW32"
			$=
		(
			- "all node %MakeCommands",
			- "all nodes %(Compiler, Option pch_mode)",
			/ @ "all nodes %Build/Target/" $=
			(
				- "all nodes %(Compiler, Linker, Option type, Option output, \
					Option object_output)",
				/ "set value" @ "Option type" -> "4"
			)
		),
		(
		/ "made command for %DistClean same as %Clean"
			@ "platforms %(DS, Android)";
			// There is no corresponding target in makefile.
		* "wrong command for %DistClean for platforms with makefiles" $since
			b217
		)
	),
	/ $comp $src $since b351 $dep_from %YBase.YStandardEx.Any $effective
		@ %YSLib.Core $=
	(
		/ "size of %ValueObject" @ %YObject,
			// Same as %ystdex::any.
		/ "size of %ValueNode" @ %ValueNode
			// From 48B to 16B on i686 targets. Note it would be larger if \
				using libstdc++ 5, since the current implementation of %string \
				used as its member is actually COW-based %std::string, which \
				is not conforming to ISO C++11 but only requires same size as \
				a pointer.
	),
	/ $forced DLDI "%ValueNode API use" $dep_from
		%YFramework.YSLib.Core.ValueNode $effective @ %YFramework.(NPL.(NPLA1,
		SContext), YSLib.(UI.(TreeView, Loader), Service.ContentType),
		Helper.Initialization) ,
	/ $dev $lib "all string default arguments '""'" -> '{}' $effective
		@ %YFramework.(YSLib.(Core.(YMessage, YException, YCoreUtilities),
		Adaptor.Font), Helper.ShellHelper),
	/ DLDI "simplified index nodes" ^ $dep_from ("%MakeIndex"
		@ %YFramework.YSLib.Core.ValueNode) $effective
		@ %(YFramework.NPL.(NPLA1, SContext), YReader.ReadingList)
),

b597
(
	/ %YFramework $=
	(
		* "wrong screen painted at initialization" @ "platform %DS"
			@ %'Helper_(DS)'.DSMain $since b596,
			// The second screen was remained unpainted and black.
		- "function template %CallStored" @ %Helper.ShellHelper,
		/ %YSLib $=
		(
			/ %Core.ValueNode $=
			(
				/ "return type" @ "function template %at"
					-> "trailing return type";
				* $comp "%at call for non %size_t integral type would select \
					overloading with range parameter" $since b531
			),
			/ $forced $dev %Adaptor $dep_from %YCLib.Container $=
			(
				/ 'using platform::GSStringTemplate;' @ %YAdaptor
					-> 'using platform::basic_string;';
				/ %YTextBase $=
				(
					/ 'using ucs2string = \
						GSStringTemplate<CHRLib::ucs2_t>::basic_string;'
						-> 'using ucs2string = basic_string<CHRLib::ucs2_t>;',
					/ 'using ucs4string = \
						GSStringTemplate<CHRLib::ucs4_t>::basic_string;'
						-> 'using ucs4string = basic_string<CHRLib::ucs4_t>;'
				)
			)
		)
		/ %NPL $=
		(
			/ %NPL $=
			(
				/ $dev "struct %NPL" => "%NPLTag",
					// To avoid disturbing qualified name lookup in namespace \
						%NPL.
				+ "namespace %SXML" $=
					(+ "enum class %ParseOption")
			),
			/ %NPLA1 $=
			(
				/ "alias %NodeMapper" $=
				(
					/ $lib "simplified" ^ "%ystdex::id_func_clr_t",
					/ "warpped with %std::function"
				),
				(
				+ "alias %NodeToString",
				+ "alias %NodeSequence",
				(
				+ "alias template %GNodeInserter";
				+ "alias %NodeInserter",
				+ "alias %NodeSequenceInserter" $dep_from "%NodeSequence"
				),
				+ "functions %MapNPLA1LeafNode",
				(
				+ "function %InsertNPLA1Child";
				/ "extended function %TransformNPLA1 to accept %(NodeToString, \
					NodeInserter) parameters with default arguments \
					%(MapNPLALeafNode, ParseNPLANodeString, InsertNPLA1Child)"
					$dep_from "%(NodeToString, NodeInserter, MapNPLA1LeafNode)"
				),
				(
				+ "function %InsertNPLA1SequenceChild";
				+ "function %TransformNPLA1Sequence for sequence value node"
					$dep_from "%(NodeToString, NodeSequenceInserter, \
					MapNPLA1LeafNode)";
				+ "function template %LoadNPLA1Sequence"
				),
				/ DLDI "simplified function %LoadNPLA1",
				/ "merged (function, function template) %LoadNPLA1 as function \
					template",
				/ $dev "structs %(NPLA, NPLA1)" => "%(NPLATag, NPLA1Tag)"
					// To be consistent with %NPLTag.
				+ "alias %IndentGenerator, function %DefaultGenerateIndent",
				+ "function %PrintIndent",
				(
				+ "function %EscapeNodeLiteral";
				+ "functions %(PrintNode, PrintNodeChild, PrintNodeString)"
				),
				+ "namespace %SXML" $=
				(
					+ "function %ConvertAttributeNodeString",
					+ "function %ConvertStringNode" $dep_from "%EscapeXML",
					+ "functions %(ConvertDocumentNode; PrintSyntaxNode)"
						$dep_from "%(IndentGenerator, ParseOption)"
				)
			),
			+ "functions %(EscapeXML, Literalize)" @ %Lexical,
			/ @ "function %operator<<" @ %Configuration
				^ ($dep_from ("%PrintNode" @ %NPLA1, "Literalize" @ %Lexical),
				"%std::ostringstream") $=
			(
				/ $impl "simplified",
				* $comp "redundant double quote for printed string" $since b343
			)
		),
		/ %YCLib $=
		(
			/ @ "inline namespace %containers" @ %Container $=
			(
				/ @ "class template %GSStringTemplate"
					-> "alias template %basic_string",
				/ $dev "aliases %(string, wstring)" $=
				(
					- $lib 'yimpl',
					/ $forced "implemented" ^ $dep_from "%basic_string"
				)
			),
			* $dev "missing 'using platform::sfmt;'" @ "macro %YCL_TraceRaw"
				@ %Debug $since b593;
				// This caused tracing macro could not be used unless the name \
					is found by ADL or it has been declared by alias \
					declaration, etc.
		)
	),
	/ %YReader.HexBrowser $=
	(
		/ "data source" @ "class %HexModel" @ ^ 'std::filebuf' ~ 'File' $=
		(
			/ DLDI "simplified constructor" ^ "%DefDeCtor",
			+ "indirect assertion" @ "constructor with 1 parameter"
				^ "%Nonnull",
			/ "function %operator=" -> "%Load",
			- "functions %(GetPtr, CheckEOF)",
			/ "function %SetPosition" -> "%Seek",
			+ "function %Fill",
			- DLDI "redundant base class %noncopyable",
			+ 'final';
			/ $comp $dev $design
				"exception never thrown from the source I/O operations"
		);
		/ @ "class %HexViewArea" $=
		(
			/ $forced DLDI @ "functions %(Load, UpdateData)",
			/ @ "function %UpdateData" $=
			(
				* $dev $design "missing clearing EOF bit at end" $since b253,
					// The order is wrong. It worked for C stream but not for \
						%std::ifstream.
				(
				+ "trace for empty view area with level 'Notice'";
				* "missing check for empty view area" $since b257
					// Which led to undefined behavior if non-empty data was \
						read successfully.
				),
				+ "trace for empty data with level 'Warning'"
			)
		)
	),
	/ $doc %Documentation $=
	(
		(
		+ %Test;
		/ "test for demo projects" @ %YFramework >> %Test
		),
		/ "test for initialization descriptions" @ %YFramework >> %YFramework
	),
	/ @ "%SHBuild-BuildApp.sh" @ %Tools.Scripts $=
	(
		/ '-xid,include' @ "command line" @ "function %SHBuild_BuildApp"
			>> ("value" @ "variable %SHBOPT"),
			// This actually effects only printed value of variable %SHBOPT.
		/ "base %SHBOPT" => "%SHBOPT_BASE"
			// To prevent confusion.
	),
	/ %YBase $=
	(
		+ "function template %write" @ %YStandardEx.String,
		+ $dev $build '#include <ostream>' @ %StandardInclusion
	)
),

b596
(
	/ %YFramework $=
	(
		/ @ "constructor %DSApplication" @ %'Helper_(DS)'.DSMain $=
		(
			/ "assertion" ^ "%Deref" ~ "%IsScreenReady";
		),
		/ %'Helper_(Android)' $=
		(
			/ DLDI "simplified constructor %NativeHost" @ %AndroidHost,
			/ $dev $design "missing checking %::ANativeWindow_lock failure"
				@ "screen size detection" @ "screen initialization" $since b504
				$= (+ "throwing %LoggedEvent on failure")
		),
		/ %YCLib.HostedGUI $=
		(
			* "missing checking %::ANativeWindow_lock failure"
				@ "function %UpdateContentTo" @ "platform %Android" $since b560
				$= (+ "trace with level 'Warning' on failure"),
			/ "constructors" -> 'using ScreenBuffer::ScreenBuffer'
				@ "class %ScreenRegionBuffer"
		),
		/ %YSLib $=
		(
			/ DLDI %UI $=
			(
				/ "simplified implementation" @ "function %LocateMenu" @ %Menu
					^ "%(GetBoundsOf, Rect::GetRight)"
				/ "simplified implementation" @ "width setting"
					@ "member function %ListBox::ResizeForPreferred"
					@ %ComboList ^ '+=' ~ '+'
			),
			+ "functions %(SwapContainer; SwapContent)" @ "class %ValueNode"
				@ %Core.ValueNode
		),
		/ $dev "simplified constructors" @ "class %Configuration"
			@ %NPL.Configuration
			$= (/ "all 2 constructors with lvalue reference type parameters,
				constructor templates" -> "2 constructor templates"
				^ "%ystdex::exclude_self_ctor_t")
	),
	/ $build %Tools $=
	(
		* "C frontend rejected '-Wsign-promo'" $since $orig (@ "default value"
			@ "%CFLAGS_WARNING" @ (b540 @ "SHBuild-common-options.sh", b558
			@ "Toolchain.options.mk"))
			$= (/ '-Wsign-promo' @ "default value"
				@ ("%C_CXXFLAGS_WARNING" >> "%CXXFLAGS_WARNING")),
		* "C frontend rejected '-Wsign-promo'" @ "Toolchain.DS.mk" $since b586
			$= (- '-Wsign-promo' @ "default value" @ "%C_CXXFLAGS_WARNING"),
		+ "support for variable %(SHBuild_CFLAGS, SHBuild_CXXFLAGS) to \
			override flags from command line when calling %(CC, CXX) \
			respectively" @ %SHBuild.Main,
		/ @ "%SHBuild-BuildApp.sh" $=
		(
			- "%CXXFLAGS expanded value" @ "exported %SHBuild_YSLib_Flags",
			/ "exported %(SHBuild_CFLAGS, SHBuild_CXXFLAGS) to support \
				different flags on C and C++ targets" $dep_from %SHBuild
		),
		/ "substituted tab space to space character at last" @ "variables \
			%(CFLAGS, CXXFLAGS, LDFLAGS)" @ "%SHBuild-common-options.sh"
			// To make the displayed value compact. Regular expression \
				replacement is supported here with significant restrictions \
				and 'BASH_REMATCH' is somewhat too heavy so contiguous \
				whitespaces are not merged, even it would be prettier.
		/ @ "%msys-pacman-update.sh" $=
		(
			/ 'mingw32/mingw-w64-i686-binutils-git' @ "first 'pacman' command"
				-> 'mingw32/mingw-w64-i686-binutils',
			+ 'msys/base-devel' @ "second 'pacman' command"
		)
	),
	/ DLB "updated toolchain" @ "platform %MinGW32"
		$= (^ "MSYS2 package %binutils 2.25-3 for default build"
			~ "package %binutils-git")
),

b595
(
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			(
			/ "all 'YB_IMPL_CPP'" -> '__cplusplus';
			- $revert(b313) "macro %YB_IMPL_CPP"
			),
			(
			+ "macro %YB_IMPL_GNUC";
			/ "macro %YB_ATTR for with '__attribute__' as possible"
				^ "%YB_IMPL_GNUC"
				// To support more attributes for Clang++.
			),
			/ "macro %YB_IMPL_GNUCPP" ^ '__GNUG__' ~ '__GNUC__',
				// Use %YB_IMPL_GNUC instead.,
			/ "library configuration macro %YB_USE_EXCEPTION_VALIDATION"
				-> "%YB_Use_StrictNoThrow" $=
			(
				/ "provided default definition '1'"
					@ '!defined(NDEBUG) && !defined(YB_Use_StrictNoThrow)',
				/ "tested tested with non-zero value" ~ "definition"
			),
			/ "library configuration macro %YB_USE_EXCEPTION_SPECIFICATION"
				=> "%YB_Use_DynamicExceptionSpecification"
		),
		/ %YStandardEx $=
		(
			* "recursive call failure due to recursive noexcept specification"
				@ "function template %seq_apply" @ %Functional $since b594,
			/ %Iterator $=
			(
				/ "class template %pair_iterator" -> "class template \
					%tuple_iterator; alias template %pair_iterator";
				/ $comp @ "%pair_iterator instances" $=
				(
					- "%pair_type",
					- $revert(b453) "defaulted move %operator= workaround Microsoft VC++ \
						2013",
					/ "%operator== only compare master iterators",
					+ "function %get",
					- "conversion operator template",
					- "member %(first, second)"
				),
				/ $lib "function templates %(make_reverse_iterator, \
					make_move_iterator_pair, make_move_iterator_pair), alias \
					template %iterator_operators_t" >> %IteratorOperation,
				/ "type" @ "protected data member %proto_ref"
					@ "class template %prototyped_iterator"
					-> 'std::reference_wrapper<value_type>' ~ 'lref<value_type>'
			),
			/ "return type" @ "all 2 function templates %search_map" @ %Container
				^ 'typename _tMap::const_iterator' ~ 'typename _tMap::iterator',
			/ %TypeOperation $=
			(
				(
				+ "inline namespace %cpp2011_traits";
				/ $dev "wrapped ISO C++11 names" @ "namespace %cpp2011_traits"
				),
				+ "uncommented %(aligned_union, aligned_union_t)"
					@ '!YB_IMPL_GNUC || YB_IMPL_GNUCPP >= 50000'
					$dep_from ("%YB_IMPL_GNUC" @ %YDefinition),
				+ "uncommented all 7 remained traits 'is_trivially_*'"
					@ '!YB_IMPL_GNUC || YB_IMPL_GNUCPP >= 50000' $dep_from
					("%YB_IMPL_GNUC" @ %YDefinition),
				(
				+ "inline namespace %cpp2014_traits";
				/ $dev "wrapped ISO C++14 names from WG21 N3655",
					@ "namespace %cpp2011_traits"
					@ !'__cpp_lib_transformation_trait_aliases >= 201304 \
					|| __cplusplus > 201103L',
				+ "using-declarations from namespace %std for names introduced \
					by ISO C++14 <type_traits> from WG21 N3655"
					@ '__cpp_lib_transformation_trait_aliases >= 201304 \
					|| __cplusplus > 201103L'
					// Though libstdc++ 5 only introduced 6 names of \
						[meta.trans.cv] under \
						'__cpp_lib_transformation_trait_aliases', these are \
						actually covered by N3655. Anyway, '__cplusplus' \
						should be OK.
				),
				+ "metafunction %identity_t"
			),
			/ %IteratorOperation $dep_from
				("%make_reverse_iterator" @ %Iterator) $=
			(
				+ "reserved %make_reserve_iterator definition"
					@ !'__cpp_lib_make_reverse_iterator >= 201402 \
					|| __cplusplus >= 201402',
					// Even if libstdc++ 5 declared it as \
						'__cplusplus > 201103', there is no such thing in \
						libstdc++ 4.9.
				+ "using-declarations from namespace %std for names introduced \
					by ISO C++14 <type_traits> from resolved LWG 2285"
					@ '__cpp_lib_make_reverse_iterator >= 201402 \
					|| __cplusplus >= 201402'
			),
			/ %Rational
			(
				/ @ "class template %fixed_point" $=
				(
					+ 'ynothrowv' @ "2 constructors with floating point \
						parameter, %operator(++, --, +=, -=, *=, /=, <<=), \
						multiplication implementation",
					+ 'ynothrow' @ "member function %get"
				),
				+ 'ynothrow' @ "function template %abs"
			),
			/ %Memory $=
			(
				+ "2 function templates %(static_pointer_cast, 2 \
					dynamic_pointer_cast, const_pointer_cast) for \
					%std::unique_ptr instances",
				+ "unary type trait %has_nested_allocator; metafunction \
					%nested_allocator",
				+ 'ynothrowv' @ "function %operator()"
					@ "class template %free_delete",
				+ "class template %allocator_delete; function template \
					%make_allocator_guard"
			),
			/ %Any $=
			(
				/ $lib "metafunction %is_aligned_storable" >> %TypeOperation,
				/ @ "namespace %any_ops" $=
				(
					/ 'using any_storage = pod_storage<non_aggregate_pod>;'
						@ "namespace %any_ops"
						-> 'using any_storage = pod_storage<void*>;',
					/ @ "class template %holder_handler" $=
					(
						(
						/ $lib "simplified %manage"
							^ "'default' branch handling by base class";
						- "alias %local_storage"
						),
						+ "static function %get_holder_pointer",
						+ "assertion for nonnull pointer"
							@ "static function %get_pointer"
					),
					/ @ "class template %value_handler" $=
					(
						(
						/ "merged 2 static functions %copy" ^ "%init_impl",
						/ "merged 2 static functions %uninit"
							-> "static function %dispose with 'ynothrowv'"
							$dep_from "%holder_handler";
						- $comp "public functions with storage overloadings"
						),
						+ "support of variadic parameters for initialization"
							@ "static function %init",
						/ "implemented %get_pointer" @ "%value_holder"
							!^ 'const_cast' $dep_from "allowing const access"
					)
				),
				- $revert(b352) "union %non_aggregate_pod" $dep_from
					"%any_ops::any_storage"
				/ "constructors with value argument" @ "class %any" $=
				(
					// Also to be conforming to WG21 N4081.
					/ "initialized manager and handler" ^ "%decay_t"
						~ "%(remove_reference_t, %remove_rcv_t)";
					* $re_ex(b594) $comp "initialized mismatched manager and \
						handler types" @ "constructor with only one value \
						argument" $since b376,
					* $comp "ill-formed for values of array type" $since b331
				),
				/ "class template %pod_storage" $=
				(
					(
					+ 'mutable' @ "all data members %(object, data)";
					/ "merged function templates %access to allow non-const \
						reference returned by const functions";
					$dep_to "allowing const access"
					),
					+ $dev "static assertion to disallow cv-qualified \
						underlying type" @ "%pod_storage"
						// Similar to %optional.
				)
			),
			/ @ "class template %used_list_cache" @ %Cache $=
			(
				/ DLDI "simplified function template %emplace"
					^ 'is_undereferenceable' ~ 'ystdex::undereferenceable',
				+ 'ynothrowv' @ "function %set_max_use",
				* "wrong exception-specification" @ "function %clear" $orig
					(@ "class template %GMRUCache"
					@ %YFramework.YSLib.Core.Cache $since b461)
					$= (/ 'ynoexcept' -> 'ynothrow')
			),
			+ "function %operator() with 'const'"
				@ "class template %expanded_caller" @ %Functional,
			* "%allocator_type" @ "class template %string_traits" $since b592
				$= (/ "implemented" ^ $dep_from ("%nested_allocator" @ %Memory)
					~ "%std::allocator"),
			+ $dev "constructible and some 'nullptr' initialization static \
				assertions for type parameter" @ "class template %nptr"
				@ %Utilities
		)
	),
	* "unknown option '-Wno-double-promotion' for Clang++" @ "%test.sh" @ %Test
		$since b586,
	/ %YFramework $=
	(
		/ %CHRLib $=
		(
			+ "data member 'ucs4_t UCS4;'" @ "anonymous union %Value"
				@ "struct %ConversionState" @ %CharacterMapping,
			/ @ "class %GUCSMapper<CharSet::UTF_8>" %StaticMapping $=
			(
				(
				+ "fast UTF-8 decoding function template %Decode for \
					'ConversionState&'" $dep_from %CharacterMapping;
				+ "static function template %Decode for 'ConversionState&&'"
					^ "fast decoding"
				),
				+ "assertion for dereferenceable output iterator"
					@ "function template %Encode",
				- $revert(b594) "function templates %(UCSMapper; \
					UCSMapper_Decode, UCSMapper_Encode)" $dep_from %MappingEx,
				/ @ "function template %FillByte" $=
				(
					* "missing using-declaration for dereferenceable iterator \
						check" $since b250,
						// For types from namespace %ystdex like \
							%input_monomorphic_iterator, ADL would prevent the \
							error.
					/ DLD "initialized %byte argument" ^ "cast"
						// To eliminate warning: [-Wsign-conversion] for \
							'const char*', etc.
				)
			),
			* "missing checking conversion result"
				@ "functions %(MBCSToUCS2, MBCSToUCS4)" $since b248,
				// This would case invalid access for any handles which could \
					not increase the source iterator.
			+ "support of parameterized output type" ~ 'ucs2_t&'
				@ "function template %ConvertCharacter" @ %Convert,
			/ %MappingEx $=
			(
				+ "3 function templates %FetchMapperPtr_TryUCSMapper";
				/ "function template %FetchMapperPtr" ^ ("multiple template \
					parameters", "%FetchMapperPtr_TryUCSMapper")
			),
			/ "UCS conversion mapper type" %CharacterProcessing $=
			(
				/ $forced DLD "encoding return type and decoding parameter type"
					$dep_from %MappingEx,
				/ "decoding iterator type" ^ "direct parameter type and \
					conversion call"
					~ "%(ystdex::iterator_monomorphic_iterator, \
					ConvertCharacter)"
					// This could improve performance significantly for short \
						strings (about 50%).
			)
		),
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ $forced DLD @ %TextManager $dep_from %CHRLib.MappingEx,
				/ $forced DLD @ %(TextManager, CharRenderer, YBlend) $dep_from
					("%pair_iterator::(first, second)"
					@ %YBase.YStandardEx.Iterator)
			),
			* "missing invalidate drop down list on handling %Confirmed"
				@ "constructor %DropDownList" @ %UI.ComboList $since b482,
			- DLD "'std::' berore 'nullptr_t'" $effective
				@ %(Service.FileSystem, Core.YEvent),
				// It has been declared in %Adaptor.YAdaptor indirectly.
			/ "allowed array to initialize" @ "constructor %ValueObject"
				@ %Core.YObject ^ "%ystdex::decay_t" ~ "%ystdex::remove_rcv"
				// Similar to %ystdex::any.
		)
	),
	+ $build '$C_CXXFLAGS_ARCH' @ "default value"
		@ "variable %C_CXXFLAGS_COMMON" @ "%SHBuild-common-options.sh" @ %Tools,
	/ $dev $repo $re_add(b594) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.(CHRLib.("%MapEx.h" => "%MappingEx.h")
),

b594
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				+ "function template %CopyBitmapBuffer" @ %YGraphics,
				/ "implemented %String::GetMBCS" @ %Core.YString ^ $dep_from
					("%MakeMBCS" @ %CHRLib.CharacterProcessing) ~ "GetMBCSOf"
			),
			- $revert(b209) 'using ystdex::errno_t' @ %Adaptor.YAdaptor
				$dep_from %Helper.ShellHelper,
			+ "function template %InvalidateWidgets" @ %UI.YWidget,
			/ DLD "implemented encoding conversion" @ %Service.TextManager
				^ $dep_from ("%pair_iterator" @ %YBase.YStandardEx.Iterator)
				~ "%GetCountOf"
		),
		/ %YCLib $=
		(
			/ $dev $build "used '#error' when detected macro %__MSYS__"
				@ %Platform,
				// MSYS is currently not supported.
			/ %HostedGUI $=
			(
				+ 'ynothrow' @ "constructor %WindowDeviceContextBase"
					@ "platform %Win32",
				/ $lib $design "implemented function %UpdateContentTo"
					@ "platform %Android" ^ "%BlitLines" ~ "%CopyTo",
					// This may slightly improve performance because the \
						rotation is fixed without dispatching at runtime.
			)
		),
		/ @ "class %ConfigurationDeleter" @ %'Helper_(Android)'.AndroidHost $=
		(
			(
			+ "alias %pointer";
			/ "function %operator()" ^ "%pointer"
			),
			+ 'const ynothrow' @ "%operator()"
		),
		/ %CHRLib $=
		(
			/ %StaticMapping $=
			(
				/ DLD "implemented 'yconstfn' functions %(IsSurrogateHead, \
					IsValidSurrogateHead, IsValidSurrogateTail)"
					^ "macros %(PDefH, ImplExpr)",
				* $dev "missing prventing ADL use of %(IsSurrogateHead, \
					IsValidSurrogateHead, IsValidSurrogateTail)" @ "template \
					classes %(GUCS2Mapper<CharSet::UTF_16BE>, \
					GUCS2Mapper<CharSet::UTF_16LE>)" $since b552,
				+ 'ynothrow' @ "functions %(IsSurrogateHead, \
					IsValidSurrogateHead, IsValidSurrogateTail)",
				+ "struct %UCSMapperBase",
				/ @ "class %GUCSMapper<CharSet::UTF_8>" $=
				(
					/ DLD "simplified decoding implementation",
					+ 'ynothrow' @ "function %IsValid",
					/ @ "static function template %InverseMap" -> "%Encode" $=
					(
						/ "return type" -> 'size_t' ~ 'byte',
							// Also to avoid truncating the result.
						/ "2nd parameter type" -> 'ucs4_t' ~ 'const ucs2_t&',
						+ $dev 'ynoexcept_assert("Invalid type found.", \
							*d = char());'
					)
				),
				/ "function templates %(UCSMapper_Map, UCSMapper_InverseMap, \
					UCSMapper)" -> "%(UCS2Mapper_Decode, UCS2Mapper_Encode, \
					UCS2Mapper)"
				(
					+ "noexcept specification",
					* $dev "missing prevent ADL" @ "intermediate calls" $since
						b273
				),
				/ DLD "all bit operation operands" $=
				(
					// To eliminate warning: [-Wsign-conversion].
					/ "wrapped with 'ucs4_t'",
					^ "%unsigned literal" ~ "%int literal"
				)
			),
			/ %Encoding $=
			(
				(
				+ "alias %ByteOrder" ^ $dep_from ("%ystdex::byte_order"
					@ %YBase.YStandardEx.CStandardInteger);
				+ "metafunction %EncodingTraits" @ "namespace %CharSet"
				),
				/ @ "enum %Encoding" @ "namespace %CharSet" $=
				(
					// Update as http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib, \
						which was modified at 2014-05-23 07:44:38.
					/ "%Reserved_1" => "%other"
					/ "%Reserved_2" => "%unknown",
				)
			),
			+ "metafunction %MapFixedEncoding" @ %CharacterMapping,
			/ %CharacterProcessing $=
			(
				(
				+ $revert_ex(b248) "function %MBCSToUCS4",
				+ "function %UCS2ToUCS4";
				+ "8 function templates %MakeUCS4LE"
				),
				/ DLDI "simplified function %UCS4ToUCS2" ^ $dep_from
					("function template %transform_when" @ %Algorithm),
				- "'yconstraint' assertion" @ "function template %MakeUCS2LE#3",
					// Since %ntctslen would assert.
				* "missing 3 function templates %MakeUCS2LE accepting \
					character string pointer, length and encoding" $since b544,
					// This made string class version of %MakeUCS2LE not usable.
				* "missing 3 function templates %MakeMBCS accepting character \
					string pointer, length and encoding" $since b544,
					// This made string class version of %MakeMBCS not usable.
				/ "resizing result string" @ "function template %MakeMBCS with \
					'ucs2_t*' parameter" ^ "%FetchMaxCharWidth"
					~ "%FetchMaxVariantCharWidth",
				* @ "function template %MakeMBCS with 'const _tString&' \
					parameter" $since b544 $=
				(
					/ "implemented" ^ "%CHRLib::MakeMBCS"
						~ "%CHRLib::MakeUCS2LE",
					/ "swapped 1st and 2nd template parameter"
						// Also to allow user only providing zero or one \
							destination type as template arguments.
				),
				- $revert(b305) "function template %GetMBCSOf" $dep_from
					%YSLib.Core.YString,
				(
				+ "function %UCS4ToMBCS";
				+ 2 "function templates %MakeMBCS for %ucs4_t"
				)
			),
			/ %CharacterMapping $=
			(
				// The state is now not mandated to be the same of processed \
					number of bytes.
				/ "(function, function template) %GetCountOf" => "%GetIndexOf"
					$dep_from %YSLib.Service.TextManager,
				/ "data member %ConversionState::Count" => "%Index"
			),
			/ "class template %GUCS2Mapper" -> "%GUCSMapper"
				@ %(StaticMapping, MapEx) $=
			(
				(
				+ $dep_from ("base class %UCSMapperBase" @ %StaticMapping);
				+ 'using UCSMapperBase::Assign',
					// To adapt to %ucs4_t assignment.
				),
				/ @ "static function template %Map" -> "%Decode" $=
				(
					/ "assignment" ^ $dep_from "%Assign" ~ '=',
					+ "noexcept specification" $dep_from %CharacterMapping
				)
			)
		),
		/ %Helper $=
		(
			/ %ShellHelper $=
			(
				- $revert($before b132) "function templates \
					%((CallStoredAtOnce; NowShellToStored), NowShellToNew)";
				/ "return type" @ "function %NowShellTo" -> 'void' ~ 'errno_t'
			),
			* "possible thrown exception" @ "closing window"
				@ 'YF_Hosted && !YCL_Android' @ "destructor" @ "class \
				%Environment" @ %Environment $orig (@ %Host $since b382) $=
				(/ "implemented inner loop" ^ "%FilterException")
		)
	),
	/ DLDI "simplified sized buffer copy" ^ $dep_from
		("%CopyBitmapBuffer" @ %YSLib.Core.YGraphics) $effective @YFramework.(
		YCLib.HostedGUI, YSLib.(Core.YDevice, Service.(YBlit, YGDI)));
	/ $build "all '#!/usr/bin'" @ ".sh files" -> '#!/usr/bin/env '
		@ effective %(Tools, Test.Test),
		// To improve compatibility.
	* $re(b546) "shebang specifying '/usr/bin/sh' without POSIX shell \
		compatibility" @ %Test.Test $since b575,
	/ DLD "all '\0' for null terminate character"
		-> "value-initialized character" $effective %(YBase.YStandardEx(String,
		CAssertion), YFramework.(YCLib_MinGW32.MinGW32, YCLib.(Debug,
		FileSystem), CHRLib.CharacterProcessing, YSLib.Adaptor.Image))
		!$effective @ %YBase.LibDefect.Exception,
		// Only string cookie of type %__cxxabiv1::_Unwind_Exception_Class
			@ %YBase.LibDefect.Exception is not of string terminate character.
	/ $build "first 'pacman -S'" -> 'pacman -Syu' @ "%msys2-pacman-update.sh"
		@ %Tools,
		// To make it consistent to 'update'.
	/ %YBase $=
	(
		* "strict ISO C++ code conformance" @ %LibDefect $since b308
			$= (* "missing including <cwchar>" @ %YStandardEx.String),
		/ %YStandardEx $=
		(
			+ "enum class %byte_order" @ %CStandardInteger,
			+ "function templates %(transform_when; copy_when)" @ %Algorithm,
			+ 'ynothrow' @ "function template %classify_path" @ %Path,
			/ %Functional $=
			(
				+ "noexcept-specifications"
					@ "function templates %(sizeof_params, varg, chain_apply, \
					seq_apply, unseq_apply)",
				* "wrong use of 'yconstexpr'" @ "function template %varg" $since
					b412
					$= (/ 'yconstexpr' -> 'yconstfn')
			),
			+ "noexcept-specification" @ "member function template"
				@ "%is_equal::operator() for object reference" @ %Functor,
			+ "exception specifications" @ "function templates %(hash_combine, \
				hash_combine_seq)" @ %Hash ^ 'ynoexcept_spec',
			/ "class template %pair_iterator" @ %Iterator $=
			(
				+ 'const' @ "function template \
					%operator pair<_tFirst, _tSecond>",
				+ "noexcept specification" @ "move constructor",
				* "wrong exception-specification and implementation"
					@ "friend function %operator==" $since b585
			),
			/ DLD "implemented constructor %any_input_iterator"
				@ %(Any, AnyIterator) ^ "%remove_rcv_t" ~ "%remove_rcv",
			* "inialialized mismatched manager and handler types"
				@ "constructor template %any with parameters '_type&& x, \
				any_ops::holder_tag'" $since b375
				$= (/ $re_ex(b376) "implemented initialization"
					^ "%remove_rcv_t" ~ "%remove_cv_t")
		),
		/ %YDefinition $=
		(
			- 'using errno_t = int;' $dep_from
				%YFramework.YSLib.Adaptor.YAdaptor
			+ 'ynothrow' @ "function template %unsequenced"
		)
	),
	+ DLDI "('ynothrow', 'ynoexcept', 'ynothrowv') exception-specification"
		@ "lambda-expressions whose exception guarantee can be determined"
		$effective @ %(YStandard.(Concurrency, String, CAssertion, Path, Thunk),
		YFramework.('Helper_(DS)'.DSMain, YSLib.(Core.(YEvent, YException),
		Servie.FileSystem, UI.(Animation, ExStyle, TreeView, YUIContainer),
		Adaptor.Image), Helper.(GUIApplication, HostRenderer, Environment,
		HostWindow, Initialization), YCLib.(Debug, HostedGUI, JNI)),
		YReader.(BookmarkUI, ReaderSettingUI, Shells, ShlReader)),
	+ "'YB_NORETURN' for lambda-expressions always not return" $effective
		@ %YFramework.YCLib.HostedGUI,
	/ "simplified widgets invalidation" ^ $dep_from ("%InvalidateWidgets"
		@ %YFramework.YSLib.UI.YWidget) @ %YReader.(ShlExplorer, ShlReader),
	/ $dev $repo $re_add(b593) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %YFramework.(CHRLib.("%encoding.h" => "%Encoding.h"),
		YSLib.Core.("%ystring.h" => "%YString.h"))
),

b593
(
	/ %YBase.YStandardEx $=
	(
		/ %String $=
		(
			* "forwarding failure"
				@ "function templates %(erase_left, erase_right)" $since b592
				$= (/ DLD $revert(b592) ^ "implemented"
					^ 'static_cast<_tString&&>' ~ 'yforward')
				// Because the 'erase_*' methods are currently whithout '&&' \
					qualifier overloadings.
			* "forwarding failure" @ "function templates %trim" $since b592
				$= (/ DLD $re_ex(b592) "implemented intermediate calls"
					^ 'yforward'),
				// This is slightly different. The called functions are in \
					'namespace ystdex' with forwarding refernce overloadings.
			* "ill-formed 'npos' for reference type"
				@ "function templates %(erase_left, erase_right)" $since b592
				$= (/ DLD "implemented" ^ 'decay_t<_tString>::npos'
					~ '_tString::npos')
		),
		+ "function template %ntctscpy" @ %CString,
		/ %Cast $=
		(
			- $revert(b297) "function template %union_cast",
				// Similar to removal of %initializer_cast @ b555. Note at \
					least currently (as per WG21 N4296) access value of \
					inactive non-static member is still undefined behavior in \
					C++, which is different than ISO C99. Use \
					'reinterpret_cast' instead if type punning is really needed.
			+ "function template %as_const"
		)
	),
	/ %Tools $=
	(
		* "wrong message for deleting '.a' file failure" @ %SHBuild.Main $since
			b591,
		* $build $comp "failed to build" @ %RevisionPatcher.Main $since b592
			$dep_from ("%trim" @ %YBase.YStandardEx.String)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ "threw %BadImageAlloc" ~ "%std::bad_alloc" @ "allocation failure"
				@ "constructors %HMultiBitmap" @ %Adaptor.Image,
			/ $dev $design "explicit qualified 'Drawing::' to prevent ADL on \
				string class" @ "function templates %(FetchStringOffsets, \
				FetchStringWidth)" @ %Service.TextLayout,
			/ %Adaptor$=
			(
				/ %YContainer -> %YCLib.Container $=
				(
					/ "alias-declarations %(ucs2string, ucs4string)"
						>> %YTextBase;
					/ "namespace %YSLib" -> ("inline namespace containers"
						@ "%namespace %platform");
					/ @ "namespace %platform::containers" $=
					(
						- "all Loki options",
						+ 'using wstring = \
							yimpl(GSStringTemplate<wchar_t>::basic_string);',
						+ 'using ystdex::sfmt;',
						+ 'using ystdex::vsfmt;',
						+ 'using std::to_wstring;'
					);
					+ 'using namespace platform::containers;'
						@ "namespace %platform_ex"
				),
				/ %YAdaptor $=
				(
					/ "using-declarations %(ystdex::arrlen, std::to_string, \
						ystdex::to_string)" -> "all names imported from \
						namespace %platform" @ $dep_from %YCLib.Container,
					(
					/ "alias-declarations %(byte, octet, ptrdiff_t, size_t, \
						wint_t)" @ "namespace %YSLib" >> ("inline namespace \
						%basic_types" @ "namespace %platform") %YCLib.Platform
						$dep_to "basic types";
					+ 'using platform::byte;',
					+ 'using platform::octet;',
					+ 'using platform::ptrdiff_t;',
					+ 'using platform::size_t;',
					+ 'using platform::wint_t;'
					),
					/ "all names imported to namespace %YSLib"
						@ "namespace %platform" @ $dep_from %YCLib.Reference
				),
				- "all unused macros" @ %Configuration $dep_from
					%YCLib.Container $effective @ "%(YSL_USE_COPY_ON_WRITE, \
					YSL_USE_YASLI_VECTOR, YSL_USE_FLEX_STRING, \
					YSL_OPT_SMALL_STRING_LENGTH, YSL_DEBUG_MSG)",
				/ %YReference -> %YCLib.Reference $=
				(
					/ "using-declaration %unlock_delete" -> %YAdaptor,
					/ "all function templates, aliases template %locked_ptr"
						>> %Core.YShellDefiniton;
					/ "namespace %YSLib" -> ("inline namespace %references"
						@ "namespace %platform");
					+ 'using namespace platform::references;'
						@ "namespace %platform_ex"
				),
				* $dev "duplicate definition of macro \
					%YFM_YSLib_Adaptor_Configuration" @ %YModules $orig
					(@ %YFramework.YModule $since b461)
			),
			/ DLDI @ %UI.TreeView ^ $dep_from ("%ystdex::as_const"
				@ %YBase.YStandardEx.Cast) ~ "%ystdex::qualify"
		),
		/ DLDI "simplified function %MBCSToUCS2" @ %CHRLib.CharacterProcessing,
		/ %YCLib $=
		(
			+ 'using namespace platform::basic_types;'
				@ "namespace %platform_ex" @ %Platform $dep_from "basic types",
			/ @ "function %u16getcwd_n" @ !"platform %Win32" @ %FileSystem $=
			(
				/ DLD "implemented" ^ 'std::char_traits<char16_t>::copy'
					~ 'std::copy',
				* "missing set terminate null character" $since b538
			),
			/ @ %HostedGUI $=
			(
				/ @ "class %ScreenBuffer" $=
				(
					(
					/ "protected members %(pBuffer, hBitmap)"
						@ "platform %Win32" -> "private members";
					/ DLDI "simplified" @ ("move constructor"
						@ "platform %Win32", "destructor")
					),
					/ @ "function %operator=" $=
					(
						* "missing 'ynothrow'" $since b445,
						* "missing definition" @ !"platform %Win32" $since b563
					),
					* "missing buffer invariant constraint" @ "platform %Win32"
						$since b445 $=
					(
						/ DLD "simplified constructor" @ "platform %Win32"
							^ $dep_from "%CreateCompatibleDIBSection";
						* $comp "missing check %::CreateDIBSection failure"
							$orig (@ %Helper $since b299)
					)
				),
				/ @ "platform %Win32" $=
				(
					+ "class %Clipboard"
						// Only text supported currently.
					+ "function %CreateCompatibleDIBSection"
				)
			),
			/ 'using std::string;' @ "namespace %XCB" @ %XCB
				-> 'using platform::string'
		),
		/ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			+ "struct %GlobalDelete"
			+ "class %GlobalLocked",
			/ "supported return value"
				@ "macros %(YCL_CallWin32, YCL_CallWin32_Trace)"
				^ "lambda-expression"
		),
		/ $dev $design "simplified Win32 API calls" ^ $dep_from
			("%YCL_CallWin32" @ %MinGW) ~ "%YCL_Raise_Win32Exception" $effective
			@ (%'YCLib_(MinGW32)'.(Consoles, MinGW32), "platform %Win32"
			@ %(Helper.Environment, YCLib.(FileSystem, Host, HostedGUI)))
	),
	/ DLD "all temporary of '[0]' operation on 'const string' with length \
		required for string type with 'c_str' member" -> '.c_str()' $effective
		@ %YFramework.(YCLib.FileSystem, YSLib.Service.TextLayout),
	/ DLD "all temporary of '[0]' operation on 'const string' without length \
		required for string type with 'data' member" -> '.data()' $effective
		@ %(YBase.YStandardEx.String, YFramework.YSLib.Service.TextLayout),
	/ "all 'std::unique_ptr'" -> 'YSLib::unique_ptr'
	- "'std::' after inclusion of %YCLib.Container names" $dep_from
		%YCLib.Container @ !(%YFramework.(YSLib.(Adaptor.YNew,
		Core.(YCoreUtilities, YException))), "exception %std::string",
		"%ystdex::to_string result for %std::thread::id"), $effective
		@ %(YFramework.(YCLib.(Debug, Host, Input, JNI, XCB),
		YSLib.(Adaptor.(Image, Font), Core.(YGDIBase, ValueNode),
		Service.FileSystem, UI.(YStyle, YComponent)),
		'YCLib_(MinGW32)'.(MinGW32, NLS), 'Helper_(Android)'.AndroidHost,
		Helper.ShellHelper), YReader.(DSReader, ShlExplorer, ReaderSetting));
		// In %(YCLib, YFramework.YSLib.Adaptor.Font) some types are actually \
			changed if %string is not %std::string. For function declarations \
			of the former case, the revision numbers are also changed.
	- "'std::' after inclusion of %YCLib.Platform names" $dep_from
		%YCLib.Platform @ !(%YFramework.YSLib.Adaptor.YNew) $effective
		@ %(YFramework.(YCLib.(HostedGUI, MemoryMapping, Video, Keys,
		FileSystem), 'YCLib_(MinGW32)'.MinGW32,
		YSLib.(Adaptor.Image, Service.TextFile)), Main),
	- "'std::' after inclusion of %YCLib.Platform names" $dep_from
		%YCLib.Reference @ !(%YFramework.YSLib.Core.YObject), $effective
		@ %YFramework.('Helper_(Android)'.AndroidHost, YCLib.(XCB, FileSystem,
		Host, HostedGUI), YSLib.Core.ValueNode, YCLib_(MinGW32)::Consoles),
		// Also several types change.
	/ $dev $repo $re_add(b590) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ %(Adaptor.("%config.h" => "%Configure.h"),
		Core.("%ysdef.h" => "%YShellDefinition.h")) @ %YFramework.YSLib
),

b592
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ %HostedUI $=
			(
				- "1st parameter" @ "function %PrepareTopLevelPopupMenu",
				(
				+ "function %FetchDefaultTopLevelPosition"
					@ !"platform %Android";
					// Current only implemented for platform %Win32. The \
						position is an approximation as top level overlapped \
						window behavior.
				/ "set top level window position" @ !"window style containing \
					'WS_OVERLAPPED | WS_CHILD'" @ "function %ShowTopLevel"
					@ "platform %Win32" ^ "%FetchDefaultTopLevelPosition"
				)
			),
			/ @ "class %HostRenderer" @ %HostRenderer $=
			(
				+ "assertion for nonnull parameter" @ "function %Update",
				(
				/ "only refreshed when the window is existed and not minimized \
					(currently for platform %Win32 only)"
					@ "function %RefreshForWidget";
				* $comp "mismatched buffer found and exception threw after the \
					window is minimized" $since b590
				)
			),

		),
		/ %'YCLib_(MinGW32)' $=
		(
			* DLB "missing 'ystdex::' before 'or_'" @ %COM $since b590,
			/ %MinGW32 $=
			(
				+ "2 functions %ExpandEnvironmentStrings",
				+ "assertion for nonnull string parameter"
					@ "constructor %RegistryKey",
				/ "macro %YF_Raise_Win32Exception"
					=> "%YCL_Raise_Win32Exception",
				/ "macro %YF_Raise_Win32Exception_On_Failure"
					=> "%YCL_Raise_Win32Exception_On_Failure",
				+ "macros %(YCL_CallWin32, YCL_CallWin32_Trace)"
			)
		),
		/ %YSLib $=
		(
			/ %UI.TextBox $=
			(
				* "failed to response for caret shared by different senders"
					@ "member function %Caret::Check" $since b483,
					// If there are 2 senders, even the input cannot work \
						because the caret check would reset the external text \
						input focus.
				* "%Shift combined with arrow keys handled" @ "class %TextBox"
					$since b571
					 // Since b571 arrow keys did not work in %TextBox. Since \
						b582 it seemed to be OK other than %Shift keys \
						combined with arrow keys which would not be responded \
						before %KeyDown.
			),
			/ "class %ValueNode" @ %Core.ValueNode $=
			(
				+ 'const ynothrow' @ "functions %(Clear, ClearChildren)",
				+ "function %ValueNode::ClearContainer"
			),

		),
		/ %YCLib $=
		(
			/ @ "platform %Win32" @ %NativeAPI $=
			(
				* "missing '#undef GetMessage'" $since b437,
					// This caused %Win32Exception::GetMessage is actually \
						'GetMessageW'.
				+ '#undef ExpandEnvironmentStrings'
			),
			- DLB "redundant inclusion of '<Shlwapi.h>'" @ "platform %Win32"
				@ %FileSystem $redendant $since b559,
			/ @ "platform %Win32" %HostedGUI $=
			(
				/ @ "class %ScreenBuffer" $=
				(
					+ "assertion for nonnull parameter"
						@ "function %Premultiply",
					* "missing assertion for nonnull"
						@ "function %UpdateFromBounds" $mismatch $since b591
				),
				(
				+ "functions %(IsMaximized, IsMinimized)"
					@ "class %WindowReference";
				+ ('using WindowReference::IsMaximized;',
					'using WindowReference::IsMinimized;') @ "class %HostWindow"
				),
				+ "function %ExecuteShellCommand",
				/ $design "simplified implementation" $=
				(
					^ $dev $design $dep_from ("macro %YF_CallWin32"
						@ %'YCLib_(MinGW32)'.MinGW32),
					^ $dep_from ("macro %YF_CallWin32_Trace"
						@ %'YCLib_(MinGW32)'.MinGW32) ~ "%YTraceDe" $effective
						@ "member functions %WindowMemorySurface::( \
						UpdateBounds, UpdatePremultiplied)"
				),
				(
				+ "struct %GDIObjectDelete"^ $dep_from
					("macro %YF_CallWin32_Trace" @ %'YCLib_(MinGW32)'.MinGW32);
				/ $design "implemented destructor %ScreenBuffer"
					^ "%GDIObjectDelete"
				)
			),
			/ %Host $=
			(
				/ "type %HandleDeleter" => "%HandleDelete";
				/ @ "member function %HandleDelete::operator()" $=
				(
					+ 'const ynothrow',
					+ "trace with level 'Warning' on failure" ^ $dep_from
						("%YF_CallWin32_Trace" @ %'YCLib_(MinGW32)'.MinGW32)
						@ "platform %Win32"
				)
			)
		),
		+ "exposed data member %Session::Lexer" @ %NPL.SContext,
		+ "'YB_NONULL' for nonnull function parameters" $effective @ %(Helper.(
			HostWindow, "DS screen implementation"), CHRLib.CharacterProcessing,
			YCLib.(Debug, FileSystem, HostedGUI),
			'YCLib_(DS)'.DSVideo, YSLib.Core.(YDevice, YException))
	),
	/ %Tools.SHBuild.Main $=
	(
		/ DLD "clarified build mode" ^ "enum class",
		(
		/ $revert_ex(b541) "purged output before building .a files and warned \
			if this operation failed";
		* $comp "wrong modules reserved in .a files after being renamed" $since
			b541
		),
		/ DLD "simplified function %::main" ^ "%Nonnull" ~ "%YAssertNonnull"
	),
	/ @ "function ::main" @ %YDE.ImageBrowser.Main $=
	(
		/ "set window position" ^ "%Point::Invalid",
			// In combination of modification on %ShowTopLevel, this makes the \
				window shown at 1/4 top and left position of the screen.
		(
		- "handling of %Win32Exception" @ "platform %Win32";
		/ DLDI "simplified" ^ "%FilterExceptions"
		)
	),
	/ %YBase.YStandardEx $=
	(
		* "wrong type identification used"
			@ "member function %bad_any_cast::to_type" @ %Any $since b586,
		/ %String $=
		(
			/ @ "traits class %string_traits" $=
			(
				(
				+ "alias %allocator_type";
				+ "aliases %(size_type, difference_type)" ^ "%allocator_type",
				/ "aliases %(pointer, const_pointer)" ^ "%allocator_type"
				),
				+ "aliases %(reference, const_reference)"
			),
			+ "3 function templates %(erase_left, erase_right)" $dep_from
				"%string_traits::size_type",
			/ DLD "simplified function templates %trim" ^ 'yforward'
				~ 'static_cast<_tString&&>'
		)
	),
	* $dev "missing updating project file for renaming of \
		%YFramework.YSLib.Adaptor.YReference" @ "Microsoft VC++ project" $since b590
),

b591
(
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			/ $dev $impl $revert(b590) '()' @ "macro %yoffsetof" -> '::value',
				// This is required when 'constexpr' is not even supported, \
					e.g. in Microsoft VC++ 2013.
			(
			+ "macro %YB_HAS_CPP14_CONSTEXPR detecting C++ constexpr support";
			+ $workaround(#22) "pseudo keyword %yconstfn_relaxed"
			),
			+ "pseudo keywords %(yalignas, yalignas_type)",
			+ "feature tests support from WG21 N4200" $=
			(
				(
				+ "macro %__has_cpp_attribute" @ "!defined";
				+ "%__has_cpp_attribute(noreturn) test" @ "macro %YB_NORETURN"
				),
				+ "macro %__cpp_constexpr test" @ "macro %YB_HAS_CONSTEXPR"
			),
			/ "enabled standard attributes" @ "macro %YB_ATTR"
				@ '!(YB_IMPL_GNUCPP >= 20500) && (__cpp_attributes >= 200809 \
				|| __has_feature(cxx_attributes) || YB_IMPL_GNUCPP >= 40800)',
				// GNU attributes are more general.
			+ "%__has_builtin(__builtin_expect) test"
				@ "macros %(YB_EXPECT, YB_LIKELY, YB_UNLIKELY)"
		),
		/ %TypeOperation $=
		(
			+ "metafunction %void_t",
			/ "unary type trait %has_addressof" $=
			(
				/ DLD "implemented" ^ "expression SFINAE" $dep_from "%void_t",
					// This require C++11 support introduced_rom WG21 N2634.
				* DD "comments" $since b588,
				/ "allowed non class types"
			),
			+ $re_ex(b551) 'using std::is_trivially_destructible;'
		),
		- $revert(b590) "redundant 'using ystdex::is_undereferenceable;'"
			@ "function template %transform_n" @ %Algorithm,
		- DLD "redundant 'ystdex::'" @ %Path,
		+ "2 function templates %constfn_addressof" @ %Memory,
		/ %Optional $=
		(
			+ "class template %ystdex::optional" $dep_from
				("%yconstfn_relaxed" @ %YDefinition, "%constfn_addressof"
				@ %Memory, "%is_trivially_destructible" @ %TypeOperation);
			+ "function templates for %optional operations"
				@ "namespace %ystdex",
			+ "specialized class template %hash for %ystdex::optional"
				@ "namespace %std"
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ @ "platform %Win32" @ %HostedGUI $=
			(
				+ "'::LRESULT&' parameter" @ "alias %MessageHandler";
				/ "assigned result to 3rd parameter" @ "handler"
					@ "function %BindDefaultWindowProc",
				/ @ "class %WindowMemorySurface" $=
				(
					+ "tracing of %BitBlt call failure with level 'Warning'"
						@ "function %Update",
					/ @ "function %UpdatePremultiplied" $=
					(
						/ "throwing exception on %UpdateLayeredWindow call \
							failure" -> "tracing with level 'Warning'";
						+ $revert(b561) 'ynothrow'
					),
					+ "function %UpdateBounds to accept partially update",
				),
				+ "member functions %ScreenBuffer::(UpdateToBounds, \
					UpdateFromBounds)" $dep_from
					"%WindowMemorySurface::UpdateBounds",
				+ "function %GetInvalidatedArea"
					@ "class %WindowRegionDeviceContext",
				/ "exception neutrality from %CheckScalar" ~ "assertion"
					$effective @ "member functions \
					%WindowReference::(GetBounds, GetSize)"
			),
			/ %Debug $=
			(
				+ "extracted macro %YCL_TraceRaw from %YCL_Trace",
				* "probable noexcept exception-specification violation during \
					getting thread ID" @ 'YF_Multithread == 1'
					@ "static member %Logger::DefaultSendLog" $since b579
			)
		),
		/ %Helper $=
		(
			/ @ "platform %Win32" $=
			(
				/ "passing ::LRESULT parameter for message map handlers"
					%Environment $dep_from
					("%MessageHandler" @ %YCLib.HostedGUI),
				/ %HostRenderer $=
				(
					+ "message handler for %WM_ERASEBKGND to skip unnecessary \
						background erasing" @ "constructor %RenderWindow"
						@ %HostRenderer $dep_from %Environment,
					/ @ "class %HostRenderer" $=
					(
						/ "supported invalidated boundary parameter"
							@ "function %Update" ^ $dep_from
							("%HostWindow::UpdateFromBounds" @ %HostWindow),
							// To improve performance at least when \
								%WS_EX_LAYERED is not specified.
						+ "function template %UpdateBoundsToSurface"
							@ "class %HostRenderer"
					)
					/ "optimized painting by update only invalidated region"
						@ "%WM_PAINT handler" @ "constructor %RenderWindow"
						$dep_from %"HostRenderer::UpdateBoundsToSurface"
				),
				/ "class %Window" @ %HostWindow $=
				(
					* "wrong type of 2nd handler parameter" @ "%WM_CHAR handler"
						@ "constructor" @ %HostWindow $since b511,
						// Also to eliminate G++ warning: [-Wsign-conversion].
					+ "function %UpdateFromBounds" @ "class %Window" $dep_from
						("%ScreenBuffer::(UpdateToBounds, UpdateFromBounds)"
						@ %YCLib.HostedGUI)
				),
				/ "cleared %WS_EX_LAYERED bit for extended style with trace of \
					level 'Informative'" @ "%WS_POPUP set for window style"
					@ "functions %ShowTopLevel" @ %HostedUI,
					// It seems that layered window only work under %WS_POPUP \
						set, otherwise the window would show but be visible \
						even if %UpdateLayeredWindow is called.
				/ $lib "optimized painting by update only invalidated region"
					@ "DS window %WM_PAINT handler" $dep_from \
					"%(WindowMemorySurface::UpdateBounds, \
					%WindowRegionDeviceContext::GetInvalidatedArea)"
					@ %YCLib.HostedGUI
			),
			/ "simplified implementation" @ %Initialization ^ $dep_from
				("function %ExtractException" @ %YCLib.Host),
			/ %HostedUI $=
			(
				/ "function template %ActOnHover_ShowTopLevel, \
					function %PrepareTopLevelPopupMenu"
					^ "empty window guard";
				/ @ "functions %(SetupTopLevelTimedTips, \
					SetupTopLevelContextMenu)" $=
				(
					- "attaching to host window";
					- "1st parameter",
					/ "return type" -> 'void' ~ 'bool'
				)
			)
		),
		/ %YSLib.Core.YException $=
		(
			+ "alias %ExtractedExceptionPrinter",
			+ "functions %TraceException, TraceExceptionType"
				$dep_from ("%YCL_TraceRaw" @ %YCLib.Debug);
			+ "(functions %ExtractException; TryExecute); function template \
				%FilterExceptions"
		),
		/ $design "simplified implementation" ^ $dep_from ("%FilterExceptions"
			@ %YSLib.Core.YException) @ ("destructor %WindowClass"
			@ %YCLib.HostedGUI, "function %FetchDBCSOffset"
			@ %'YCLib_(MinGW32)'.NLS, ("destructor %HostRenderer",
			"static member function %WindowThread::DefaultGenerateGuard"
			@ 'YF_Multithread == 1', "destructor %WindowThread")
			@ %Helper.HostRenderer),
		/ $design "simplified implementation"
			@ "%NativeWindowDestroyed event callback"
			@ "constructor %NativeHost" @ %'Helper_(Android)'.AndroidHost
			^ $dep_from ("%FilterExceptions" @ %YGlobal)
	),
	* $doc "missing explicitly requiring of an implementation with nothrow \
		guarantee on %std::string" @ %Documentation.ProjectRules,
		// Otherwise, the nothrow guarantee of several APIs in %YCLib.Debug \
			can not be hold.
	/ $forced DLDI "simplified for top level widgets" $dep_from
		%YFramework.Helper.HostedUI,
	/ $revert(b590) DLDI "unmerged multiple 'yunused' expressions"
		$effective @ %YFramework.Helper.HostedUI
		// To eliminate warning: [-Wunused-value].
),

b590
(
	/ %YBase.YStandardEx $=
	(
		(
		/ "class template %unlock_deleter" -> "%unlock_delete"
			@ "namespace %threading" @ %PseudoMutex $=
		(
			* "missing unlocking" @ "%operator()" $since b551;
				// Even if it would be unlocked at destruction, it did not \
					meet requirements of 'std::unique_ptr' for spcific \
					resource release operation, so 'reset' would not release \
					the lock, which was unexpected.
			/ DLD "stored lock"
				!^ "%bound_deleter instance as private base class";
			* $comp "polluted member type %pointer" $since b551
				// Since the %pointer member is not declared, unexpected base \
					class member %pointer(i.e. 'void*') is used even if it \
					private.
		);
		- $revert(b550) "class template %bound_deleter" @ %Memory
		),
		/ "alias template %unlock_deleter" @ "namespace %concurrency"
			=> "%unlock_delete" @ %Concurrency,
		+ "function template %make_shared_guard" @ %Utilities,
		* "missing unqualified 'std::' for %(is_same, integral_constant)"
			@ %Variadic $since b589,
		/ %IntegerSequence $=
		(
			(
			/ "supported base value"
				@ "metafunctions %(make_succsessor, make_successor_t)";
			+ "metafunctions %(make_peano_sequence, make_peano_sequence_t)";
			/ "metafunctions %make_natural_sequence"
				-> ("alias template" ^ "%make_peano_sequence_t")
			),
			(
			+ "alias template %make_natural_sequence_t";
			/ DLD "simplified %make_integer_sequence"
				^ "%make_natural_sequence_t"
			)
		),
		/ DD "Doxygen groups" $=
		(
			+ "group %type_traits_operations" @ "%meta_operations"
				>> "%metafunctions",
			/ "marked tight category %metafunctions \
				for metafunctions" ~ "%meta_operations" $effective
				@ %(TypeOperation, IntegerSequence, CStandardInteger),
			/ "marked tight category %unary_type_traits \
				for metafunctions" ~ "%meta_operations" $effective
				@ %CStandardInteger,
			(
			+ "group %transformation_traits" @ "%";
			/ "marked tight category %transformation_traits for metafunctions"
				~ "%meta_operations" $effective @ %(TypeOperation, Iterator,
				CStandardInteger)
			),
			(
			+ "group %exceptions";
			/ "marked group %exceptions for exception classes" @ $effective
				@ %(Exception, Any)
			),
			/ "marked WG21 N4081 reference, ordered interface" @ %Any
		),
		/ @ "metafunction %is_char_specialized_in_std" @ %CString $=
		(
			/ $re_add(b578) DLD "simplified" ^ "%or_" ~ "%integral_constant",
			* "wrong implementation for non %char type" $since b544
		),
		+ "unary type trait %is_cv" @ %TypeTraits,
		* "binary type trait %is_aligned_storable not based on \
			%std::integral_constant" @ %Any $since b503
		/ %Rational $=
		(
			/ $re_add(b578) DLD "simplified metafunction %is_normalizable"
				^ "%or_" ~ "%integral_constant",
			+ "%std::hash specialization for %ystdex::fixed_point instances"
		),
		+ %Optional $=
		(
			+ "struct %in_place_t; object %in_place",
			+ "struct %nullopt_t; object %nullopt",
			+ "class %bad_optional_access"
		),
		/ %Algorithm $=
		(
			+ "missing 'using ystdex::is_undereferenceable;'"
				@ "function template %transform_n",
			* "missing including %CAssertion" $since b576
				// This might cause 'yconstraint' used without defined.
		)
	),
	/ %YFramework $=
	(
		- $revert(b561) "functions %(Update, UpdatePremultiplied) with \
			%ScreenRegionBuffer parameter" @ "class %WindowMemorySurface"
			@ %YCLib.HostedGUI,
			// To avoid misuse of thread-unsafe functions.
		/ %Helper $=
		(
			/ %HostRenderer $=
			(
				/ @ "class %HostRenderer" $=
				(
					/ "locked buffer" @ "function template %UpdateToSurface",
					(
					(
					// Adjusting buffer is out of %Update call to avoid \
						invalidated parameter of %Update used.
					+ "function %AdjustSize",
					/ $re_ex(b589) "buffer adjusting" @ "function %Update"
					(
						- $revert(b589) "tracing",
						+ "checking and throwing %LoggedEvent on mismatch"
					)
					);
					* $comp "missing resize underlying %BufferedRenderer \
						buffer size on adjusting renderer buffer size" $since
						b589
						// This would probably cause undefined behavior when \
							underlying native view size is modified.
					),
					+ "function %RefreshForWidget"
				),
				/ @ "class %RenderWindow" $=
				(
					+ "call to adjusting buffer" @ "function %Refresh" $dep_from
						"%HostRenderer::AdjustSize",
					/ DLDI "simplified" ^ $dep_from "%Host::RefreshForWidget"
				),
				/ DLDI "simplified static member function \
					%WindowThread::DefaultGenerateGuard" ^ $dep_from
					("%ystdex::make_shared_guard" @ %YBase.YStandardEx.Utilities)
			),
			/ %HostedUI $=
			(
				* $dep_to "tip depending on top level window" $since b583,
				/ DLDI "simplified function %ShowTopLevel"
					!^ "%WaitForHostWindow"
			)
		),
		/ %YSLib $=
		(
			/ @ "class %BufferedRenderer" @ %UI.YRenderer $=
			(
				/ "assertion" @ "function %Paint" -> "assertion"
					@ "function %Validate",
				/ "avoiding redundant copy when the context parameter is the \
					context of the renderer buffer"
					// This usually does not occur since there should be no \
						parent widget normally. However, it is not forbidden.
			),
			/ $re(b587) %Service.TextRenderer $=
			(
				* "missing" !^ "ADL"
					@ "function template %PutString#3" $mismatch $since b587,
				/ "dispatched calls" @ "function template %PutText" !^ "ADL"
			)
		),
		* $lib "wrong implementation" @ "macro %ImplUnseq" @ %YBaseMacro $since
			b435
			// The macro %yunused can be implemented by other means like \
				attributes, which would cause it being semantically different \
				and possible wrong behavior.
			$= (/ $revert(b435) "implemented" ^ 'static_cast<void>'
				~ "%yunused")
	),
	/ $build "tried to make link before copy to reduce copy overhead"
		@ "pre build steps" @ "Code::Blocks project %YSTest_MinGW32",
	* "wrong use of 'const' after 'yconstexpr'" @ '!YB_HAS_CONSTEXPR' $effective
		%(YFramework.(YCLib.(Host $since b489, Key $since b489), YSLib.(
		Core.YConsole $since b585, UI.(Hover $since b572, YGUI $since b572,
		Menu $since b537)), 'YCLib_(MinGW32)'.NLS $since b556),
		YBase.YStandardEx.Utilities $since b586),
		// ISO C++14 [dcl.type]/2 forbids duplicate 'const'.
	/ DLD "merged multiple 'yunused' expressions except for template parameters"
		$effective @ %YFramework.Helper.HostedUI,
		// Since YSLib now guarantees no %operator, is overloaded. Note that \
			there should no ',' between these expressions.
	* $comp "tip on close button never shown" @ "class %ImageControl"
		@ %YDE.ImageBrowser.ImageControl $since b583 $dep_from
		"tip depending on top level window",

	/ DLD "simplified static assertion for cv-qualified types" ^ $dep_from
		("%is_cv" @ %TypeTraits) $effecitve @ %(YBase.YStandardEx.Any,
		YFramework.YSLib.YObject),
	/ DLD
		"simplified constant expressions with %integral_constant derived types"
		^ "%and_" @ %(YBase.YStandardEx.(Iterator, ScopeGuard), YCLib.XCB),
	/ DLD "simplified static assertions" ^ "%or_" @ %'YCLib_(MinGW32)'.COM,
	/ $dev $impl "simplified static assertions with %integral_constant \
		derived types" ^ '()' ~ '::value' ($dep_from "%is_aligned_storable"
		@ %YBase.YStandardEx.Any) $effective @ %(YBase.YStandardEx.(Algorithm,
		Any, Functional, Iterator, Rational, Thunk, Path, Memory,
		IntegerSequence, Cast), YFramework.(YSLib.(UI.(YStyle, YGUI, YControl),
		Adaptor.Font, Service.(YPixel, YBlend, YStorage), Core.(YObject,
		YGraphics, YCoreUtilities, Task)), YCLib.(XCB, HostedGUI, Video,
		FileSystem), 'YCLib_(MinGW32)'.COM, CHRLib.(StaticMapping,
		CharacterProcessing), YDefinition),
		// See $2015-04 @ %Documentation::Workflow::Annual2015.
	/ DLD "simplified noexcept exception specifications with \
		%integral_constant derived types" ^ '()' ~ 'value' $effective
		@ %YBase.YStandardEx.(Iterator, ScopeGuard, Utilities),
		YFramework.YSLib.Core.YEvent),
		// See $2015-04 @ %Documentation::Workflow::Annual2015.
	/ $re_ex(b586) DLD "simplified noexcept exception specifications"
		^ 'ynoexcept_spec' ~ "nested 'ynoexcept'" $effective
		@ %YBase.YStandardEx.(Any, Examiner),
	+ DD "option strategies" @ %Documentation.Defintions,
	/ $dev $repo $re_add(b587) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%yref.hpp"
		=> "%YReference.hpp") @ %YFramework.YSLib.Adaptor,
	* $dev $build "missing Microsoft VC++ project dependencies setting"
		@ "platform %Android"
),

b589
(
	/ %YFramework $=
	(
		/ "assertion string" @ "constructor %WConsole"
			@ %'YCLib_(MinGW32)'.Consoles,
		/ %YCLib $=
		(
			/ DLD "cast to 'std::uint64_t' for result"
				@ "function %GetFileSizeOf" @ '!YCL_Win32' @ %FileSystem,
				// Also to eliminate warning: [-Wsign-conversion] for intermediate results.
			/ "class %ScreenRegionBuffer" @ %HostedGUI $=
			(
				/ "functions %(UpdatePremultipliedTo, UpdateTo)"
					@ "platform %Win32" >> "class %ScreenBuffer";
				/ "all non-special member functions and using-declarations \
					except for %GetScreenBufferRef" -> "function %Lock"
			)
		),
		/ %YSLib $=
		(
			/ DLD "cast to 'size_t'" @ ("member function %HBitmap::operator \
				CompactPixmap" @ %Adaptor.Image, ("member function \
				%CompactPixmapEx::ClearImage" @ %YGDIBase, "function \
				%GetSizeOfBuffer" @ "class template %GGraphics" @ %YGraphics)
				@ %Core, ("functions %(ClearImage, Fill), function template \
				%BlitScaleComponent" @ %YBlit, "member functions \
				%TextRegion::(Scroll, ClearTextLine)" @ %TextRenderer)
				@ %Service, "member function \
				%AMUnitList::AdjustViewLengthForHeight" @ %UI.Viewer),
				// To eliminate warning: [-Wsign-conversion] for intermediate \
					results.
			/ "1st parameter" @ "member functions %(TextRegion::(ClearLine, \
				ClearTextLine), TextRenderer::ClearLine)"
				@ %Service.TextRenderer -> 'size_t' ~ 'std::uint16_t',
				// Also to eliminate warning: [-Wsign-conversion] for \
					intermediate results.
		),
		/ %Helper $=
		(
			/ @ %HostRenderer $=
			(
				/ "lifted guard operations to be configurable"
					@ "class %WindowThread" $=
				(
					(
					+ "aliases %(Guard, GuardGenerator)";
					+ "data member 'GuardGenerator GenerateGuard{};'";
					+ "constructor with %GuardGenerator parameter to \
						initialize %GenerateGuard",
					+ "static function %DefaultGenerateGuard",
					^ "%GenerateGuard" @ "static function %ThreadLoop";
					* $comp "missing no excetpion guarantee when leaving \
						window thread" $since b426
					),
					- "guard operations of calling %Environment::(EnterThread, \
						LeaveThread)" @ "static function %WindowLoop"
				),
				/ @ "class %HostRenderer" $=
				(
					/ DLD "supported arbitrary argument forwarding",
					+ "2 constructor templates with \
						%WindowThread::GuardGenerator parameter" $dep_from
						"class %WindowThread",
					* "probable infinite recursive call of constructor" $since
						b570
						$= (/ DLD "implemented delegation"
							^ "%ystdex::empty_base" ~ "%ystdex::identity"),
					/ "unconditional assertion for matched view and buffer \
						sizes" @ "member function %Update" -> ("adjusting \
						mismatched buffer size to view size with traces of \
						level 'Warning'" @ "host window pointer is nonnull")
						$dep_from %YCLib.HostedGUI
						// To avoid unexpected result when the underlying view \
							size is modified. Note this depends on thread-safe \
							%ScreenRegionBuffer member functions.
				)
			),
			/ @ "platform %Win32" @ %HostedUI $dep_From
				("constructors" @ "class %HostRenderer" @ %HostRenderer) $=
			(
				+ "function %ShowTopLevel with with \
					%WindowThread::GuardGenerator parameter";
				/ "function template %ActOnHover_ShowTopLevel now would call \
					no guard operations"
			),
			/ "2nd parameter" @ "member function %Host::Window::UpdateFrom"
				@ %HostWindow -> 'ScreenBuffer&' ~ 'ScreenRegionBuffer&'
				$dep_from %YCLib.HostedGUI
,		)
	),
	/ %YReader.ShlReader $=
	(
		/ DLD "cast to ('size_t', 'SDst')" @ "constructor %ShlTextReader"
			// To eliminate warning: [-Wsign-conversion] for intermediate \
				results.
		/ DLD "cast to 'std::time_t'" @ "constructor %ShlHexBrowser"
			// To eliminate warning: [-Wsign-conversion] in platform %Android. \
				It seems that the %::stat struct member is wrongly mismatched \
				with %::time_t.
	),
	/ %YBase.YStandardEx $=
	(
		+ %IntegerSequence $=
		(
			+ "using-declaration %std::(integer_sequence, index_sequence, \
				make_integer_sequence, make_index_sequence, index_sequence_for)"
				@ '__cplusplus >= 201402L',
			/ @ !'__cplusplus >= 201402L' $=
			(
				+ "class %template %integer_sequence";
				+ "alias template %index_sequence_for"
			),
			+ "metafunction specialization for %integer_sequence instances \
				%(seq_size, back, clear, front, pop_back, pop_front, \
				push_back, push_front)" $dep_from
				("new sequence metafunctions" @ %Variadic)
		);
		/ @ %Variadic $=
		(
			/ "split for ISO C++14 interface" $=
			(
			/ "metafunction %make_successor"
				-> ("metafunction for %integer_sequence" @ %IntegerSequence),
			(
			/ "metafunction %make_natural_sequence" -> "%make_natural_sequence \
				supported integer type" @ %IntegerSequence;
				-> ("metafunction %make_integer_sequence"
				@ !'__cplusplus > 201103L') @ %IntegerSequence;
			/ "alias template %make_natural_sequence_t" -> (("alias templates \
				%(make_integer_sequence; make_index_sequence")
				@ !'__cplusplus > 201402L' @ %IntegerSequence)
				// See $2015-03 @ %Documentation::Workflow::Annual2015 for \
					details about '__cplusplus'.
			),
			/ "class template %variadic_sequence"
				-> ("alias template %index_sequence" @ %IntegerSequence),
			),
			(
			/ "undefined metafunctions declarations with 'sequence_' prefix"
				-> "undefined metafunctions without 'sequence_prefix'"
				@ "namespace %vseq";
			/ "metafunction %sequence_join_n" -> "%join_n",
			/ "metafunction %sequence_split"
				-> "undefined metafunctions %(front, pop_front)",
			/ "metafunction %sequence_split_n" -> "metafunction %split_n",
			/ "metafunction %sequence_element" -> "metafunction %at with 2 \
				specializations for non-empty sequences",
			/ "metafunction %sequence_reverse" -> "metafunction %reverse",
			/ "specializations" @ "metafunctions %(sequence_cat, \
				sequence_element for empty sequence, sequence_project, \
				sequence_fold)"
				-> ("specializations for %integer_sequence" @ "namespace %vseq"
				@ %IntegerSequence);
			/ "metafunction %cat" >> "%concat"
			),
			/ DLD "simplified sequence metafunctions" ^ "macros",
			+ "undefined metafunctions %(seq_size, clear, back, front, \
				pop_back, pop_front, push_back, push_front, erase, find, \
				deduplicate, unique)" @ "namespace %vseq" $dep_to
				"new sequence metafunctions",
			/ "metafunction %vseq_fold" => "%vfold"
		),
		/ @ %Tuple $=
		(
			+ "metafunction specialization for %std::tuple instances \
				%(seq_size, back, clear, front, pop_back, pop_front, \
				push_back, push_front)" $dep_from
				("new sequence metafunctions" @ %Variadic),
			- "specialization" @ "%(sequence_join_n, sequence_split, \
				sequence_element, sequence_reverse)"
		),
		+ "defaulted as deleted function template %is_undereferenceable for \
			('const std::atomic<_type>', 'const volatile std::atomic<_type>')"
			@ %DereferenceOperation
	)
),

b588
(
	// These warnings are detected by 32-bit G++ 4.9 but not x86_64 Clang++ \
		3.5.1.
	/ %YReader $=
	(
		/ DLDI @ "member function %HexViewArea::Refresh" @ %HexBrowser,
			// To eliminate G++ warning: [-Wsign-compare].
		/ DLD "cast to 'SPos'" @ ("function %HexViewArea::Refresh"
			@ %HexBrowser, "constructor %ShlExplorer" @ %ShlExplorer,
			"constructor %ShlTextReader" @ %ShlReader,
			"constructor %BookmarkPanel" @ %BookmarkUI),
			// To eliminate warning: [-Wsign-conversion].
		/ DLD "cast to 'ptrdiff_t'"
			@ ("functions %HexViewArea::(Refresh, \UpdateData)"
			@ %HexBrowser, "constructor %BookmarkPanel" @ %BookmarkUI),
			// To eliminate warning: [-Wsign-conversion].
		* "reset view before successfully loaded model"
			@ "member function %HexViewArea::Load" @ %HexBrowser $since b254,
			// Thus if exception thrown, the view state is unexpected.
		/ DLD "cast to 'size_t'" @ ("member function %HexViewArea::UpdateData"
			@ %HexBrowser, %ShlExplorer,
			"constructor %ShlTextReader" @ %ShlReader),
			// To eliminate warning: [-Wsign-conversion].
		/ @ "scroll implementation" @ %DSReader $=
		(
			/ DLD "cast to ('SPos', 'SDst')",
				// To eliminate warning: [-Wsign-conversion].
			* $re_ex(b587) "missing restriction on nonnegative vertical margin \
				components" $since b365
		),
		/ DLD "cast to 'BookmarkList::difference_type'"
			@ "function %BookmarkPanel::GetSelected" @ %BookmarkUI
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ DLD "cast to 'SPos'" @ ("function %Diminish" @ %Core.YGDIBase,
				("member function %Padding::operator*=" @ %YGDI,
				"member function %TextState::PutNewline" @ %TextBase,
				"function %FetchLastLineBasePosition" @ %TextLayout,
				"function %PlotLineSeg" @ %YDraw) @ %Service, ("constructor \
				%DropDownList" @ %ComboList, "style 'Aoi' implementation"
				@ %ExStyle, "member function %ProgressBar::Refresh" @ %Progress,
				"member function %TabBar::PerformLayout" @ %TabControl,
				"constructor, member function %GetIndentBoxBounds" @ "class \
				%TreeList" @ %TreeView, "functions %(RectDrawCornerArrow, \
				DrawArrow, DrawCornerArrow)", "member function \
				%TextList::InvalidateSelected" @ %ListControl @ %YStyle) @ %UI),
				// To eliminate G++ warning: [-Wsign-conversion].
			/ DLD "cast to 'ptrdiff_t'" @ ("member function \
				%TextList::InvalidateSelected" @ %ListControl,
				"member function %AMUnitList::AdjustOffsetForHeight" @ %Viewer)
				@ %UI,
				// To eliminate G++ warning: [-Wsign-conversion].
			/ %Service $=
			(
				/ DLD "cast to 'SDst'" @ "function %GetTextLineHeightExOf"
					@ %TextBase,
					// To eliminate G++ warning: [-Wsign-conversion].
				/ @ "class %ImagePages" @ %ImageProcessing $=
				(
					* "missing check for finite scale value"
						@ "function %ZoomTo" $since b580 $orig (@ "function
						%(Zoom, ZoomByRatio)" $since b555),
					+ "3rd parameter 'float = 0.F' to specify allowed error"
						@ "function %ZoomByRatio",
					/ "disallowed modification when the rescaled size is equal \
						to original size" @ "function %AdjustOffset"
						!^ "%HalfDifferenceIfGreater"
				),
				/ DLD "cast to 'size_t'" @ "member function \
					%CompactBitmapEx::SizeOfBufferAlpha" @ %YGDI,
					// To eliminate G++ warning on 'SDst' with less rank than \
						'size_t': [-Wsign-conversion].
				+ "function template %PutChar for non %ucs4_t character type"
					@ %CharRenderer,
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "swapped %DrawRect inline and non-inline implementations"
					@ %YDraw
			),
			/ %Core $=
			(
				- $revert(b554) "function template %HalfDifferenceIfGreater"
					@ %YCoreUtilities $dep_from
					"member function %ImagePages::AdjustOffset",
				/ @ "class %Rect" @ %YGDIBase $=
				(
					+ 'using Point::GetX',
					+ 'using Point::GetY',
					+ 'using Point::SetX',
					+ 'using Point::SetY',
					+ "member functions %(GetBottom, GetRight)"
				),

			),
			* "missing 'YF_API'" @ "class %PseudoRenderer" @ %UI.YRenderer
				$since b547
		),
		/ @ "class %LexicalAnalyzer" @ %NPL.Lexical $=
		(
			/ "1st parameter functions %(ParseQuoted, ParseByte)" -> 'char'
				~ 'byte'
				// This would make less conversions on parameters.
		),
		/ "class %ViewSignal" @ "namespace %Windows::UI"
			@ %'Helper_(MinGW32)'.Win32Control >> ("namespace %UI"
			@ "all platforms" @ %YSLib.UI.YWidgetView),
		/ %Helper $=
		(
			/ $lib $design "simplified host Widget implementation"
				@ "platform %Win32" @ %HostedUI,
			/ DLD "member function %Environment::EnterWindowThread"
				@ %Environment -> "non-inline member function"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ DLD "cast to ('base_type', '_type')"
			@ "function template %operator _type for integer types"
			@ "class template %fixed_point" @ %Rational,
			// To eliminate G++ warning: [-Wsign-conversion].
		/ DLD %Iterator $=
		(
			// To eliminate G++ warning: [-Wsign-conversion].
			/ @ "class template %transposed_iterator" $=
			(
				/ "cast to 'size_type'" @ "function %operator+="
				/ "cast to 'difference_type'"
					@ "friend function %operator-, function %get"
			),
			/ "cast to '_tDifference'" @ "function template %operator- for 2 \
				parameters of %subscriptive_iterator instance"
		),
		/ %Rational $=
		(
			* "reduced precision caused wrong result" @ "function %operator/="
				@ "class template %fixed_point" $since b586,
			+ "'yconstfn' function templates %((2 is_zero, round_in_nocheck; \
				round_in), pow_int, square, cube, quad)"
		),
		/ %Memory $=
		(
			+ "3 function template %pack_object";
			+ "class template %object_pack"
		),
		+ "unary type traits %(is_class_type; has_addressof)" @ %TypeOperation,
		(
		+ %Hash;
		/ "function templates %(hash_combine, hash_combine_seq, hash_range), \
			class template %combined_hash" @ %Functional >> %Hash
		),
		(
		+ %Ref;
		/ "class template %lref, function templates %(ref, cref, unref), unary \
			type trait %wrapped_traits, alias template %wrapped_traits_t"
			@ %Functional >> %Ref,
		/ "class %void_ref" @ %Any >> %Ref
		),
		(
		+ %Thunk;
		/ "class templates %(thunk_caller, thunk), function templates \
			%make_thunk" @ %Functional >> %Thunk
		),
		(
		+ %Functor;
		/ "all functors, function templates %(xcrease, delta_assign)"
			@ %Functional >> %Functor;
		* "strict ISO C++ code conformance" @ "functor %deref_str_comp" $orig
			(@ %Functional $since b333)
			$= (* "missing including <algorithm> for \
				%std::lexicographical_compare")
		),
		/ DLD "simplified inclusion" @ %Concurrency,
		(
		+ "%ScopeGuard";
		/ "class templates %state_guard, alias template %swap_guard"
			@ %Utilities >> %ScopeGuard
		)
	),
	/ %Tools $=
	(
		/ $re_ex(b587) %Scripts $=
		(
			/ '-Wfloat-equal -Wsign-conversion' @ "default value"
				@ "variable %CXXFLAGS_WARNING" @ "%SHBuild-common-option.sh"
				=> ("default value" @ "variable %C_CXXFLAGS_WARNING"),
			+ '-Wfloat-equal -Wsign-conversion' @ "default value"
				@ "variable %C_CXXFLAGS_WARNING" @ "%Toolchain.options.mk",
			+ '-Wfloat-equal' @ "default value"
				@ "variable %C_CXXFLAGS_WARNING" @ "%ToolchainDS.mk"
		),
		/ %SHBuild.Main $=
		(
			/ DLD "cast to 'byte', 'size_t'",
				// To eliminate warning: [-Wsign-conversion].
			/ "set default logger level 'Informative'" @ "main function"
				// To avoid too may debug information when assertion is turned \
					on (e.g. stage 1).
		),
		/ DLD "cast to 'size_t'" @ %RevisionPatcher.Main
			// To eliminate warning: [-Wsign-conversion].
	),
	/ "floating point number comparison" %Test.YBase ^ "%abs" ~ '==',
		// To eliminate warning: [-Wfloat-equal].
	/ %YDE.ImageBrowser.ImageControl $=
	(
		/ DLD "renamed constructor parameter",
			// To eliminate warning: [-Wshadow].
	),
	/ "3rd argument" @ "function template %make_transposed kept unsigned"
		$effective @ %YFramework.YSLib.Service.(YBlit, YBrush),
		// To eliminate warning: [-Wsign-conversion].
	/ $re_ex(b587) DD $term $lib $design "all 'C++1y'" -> 'C++14'
		!@ %Documentation::(ChangLog, Workflow) $effective
		%Documentation.CommonRules,
	/ DLDI "simplified" ^ $dep_from
		("%Rect::(GetBottom, GetRight)" @ %YFramework.YSLib.Core.YGDIBase)
		$effective @ %YFramework.(YSLib.(Core.YGDIBase, Service.(YStyle, YDraw),
		UI.(Menu, Scroll)), YCLib.HostedGUI))
),

b587
(
	// NOTE: x86_64 Clang++ 3.5.1 is used to test for warnings. G++ warnings \
		are not all eliminated. A lot of warnings are remained using G++ 4.9.1 \
		on platform %MinGW, but a few on other platforms because newly added
		'-Wfloat-equal -Wsign-conversion' is not updated for makefiles.
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "missing normal value check for 2nd parameter"
					@ "constructor %ProgressBar" @ %Progress $since b271
					$= (/ DLD "comparing" ^ "%std::isnormal" ~ '== 0'),
					// Also to eliminate warning: [-Wfloat-equal].
				* "wrong return value" @ "member functions %Widget::(SetX, \
					SetY)" @ %YWidget $since b267 $=
					// Also to eliminate warning: [-Wsign-conversion].
					(/ "return value" -> 'SPos' ~ 'SDst'),
				/ DLD "cast to 'ucs2_t'"
					@ "member function %GUIState::SendInput#1" @ %YGUI,
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'SPos'" @ ("function %LocateMenu, constructor \
					%Menu" @ %Menu, "functions %(DrawTick, DrawCross, \
					RectDrawCornerArrowOutline, DrawRectRoundCorner)" @ %YStyle,
					"member function %TreeList::GetIndentBox, constructor \
					%TreeList" @ %TreeView, "member functions \
					%TextBox::(GetCaretLocation, GetCaretPosition)" @ %TextBox,
					"constructors %(HorizontalTrack, VerticalTrack), function \
					%DrawTrackBackground, member functions \
					%ATrack::(SetThumbPosition, LocateThumb, CheckArea), \
					constructor %ScrollBar" @ %Scroll, "constructors \
					%(DialogBox, DialogPanel)" @ %UIContainerEx, "member \
					function %BorderResizer::(CheckArea, Wrap)" @ %Border,
					"constructor, function %Refresh" @ "class %DropDownList"
					@ %ComboList, "member function %MLabel::GetAlignedPenOffset"
					@ %Label, "constructor, function %InvalidateSelected"
					@ "class %TextList" @ %ListControl, "member function \
					%TabControl::GetPageBounds" @ %TabControl, "member \
					function %AMUnitList::CheckPoint" @ %Viewer),
					// To eliminate warning: [-Wsign-conversion].
				/ DLDI @ "functions %(RectDrawArrow, RectDrawCornerArrow, \
					RectDrawArrowOutline)" ^ 'SPos' ~ 'SDst',
					// To eliminate warning: [-Wsign-conversion].
				/ "return type" @ "member function %ATrack::GetTrackPosition"
					@ %Scroll -> 'SPos' ~ 'SDst',
					// Also to eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'size_t'" @ ("member function %Find" @ ("class \
					%TabControl" @ %TabControl, "class %MLinearUIContainer"
					@ %MLinearUIContainer, "constructor %DropDownList"
					@ %ComboList), "member function \
					%(AMUnitList::GetLastLabelIndexClipped, CheckPoint)"
					@ %Viewer, "member function %TextList::InvalidateSelected2"
					@ %ListControl, "member function %TextBox::GetCaretPosition"
					@ %TextBox),
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'ptrdiff_t'" @ ("member functions \
					%SequenceViewer::(Offset, IncreaseHead, IncreaseSelected)"
					@ %Viewer, $impl "class %TreeList" @ %TreeList),
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'IndexType'" @ "member function %TreeList::Bind"
					@ %TreeView,
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'IndexType'"
					@ "member function %BorderResizer::Wrap" @ %Border,
					// To eliminate warning: [-Wsign-conversion].
				/ @ "member function %WidgetLoader::DetectWidgetNode" @ %Loader
					$=
				(
					/ "check values for size" ^ "%CheckNonnegtiveScalar";
					* $comp "missing overflow check" $since b433
				),
				/ DLD "implemented constructor %TreeList" @ %TreeView
					^ "%cbegin" ~ "%begin"
			),
			/ %Service $=
			(
				/ %YStyle $=
				(
					* "missing finite value check for saturation value"
						@ "member function %HSL::operator Color" $since b271 $=
					(
						+ "assertion for saturation" ^ "%std::isfinite",
						/ DLD "comparing" ^ "%std::isnormal" ~ '== 0'
						// Also to eliminate warning: [-Wfloat-equal].
					),
					/ $lib "simplified implementation" @ "constructor %HSV"
						// It now uses less 'float'. Also to eliminate \
							warning: [-Wfloat-equal].
				),
				/ DLD "cast to 'SDst'"
					@ ("functions %(GetHorizontalOf, GetVerticalOf)" @ %YGDI,
					"functions %(PlotHLineSeg, PlotVLineSeg, PlotLineSeg)"
					@ %YDraw, "member function %TextState::GetCharBounds, \
					function %GetTextLineBaseOf" @ %TextBase,
					"function templates %FetchStringWidth#(3, 4)" @ %TextLayout,
					"member function %TextRegion::Scroll#1" @ %TextRenderer,
					"blit component calculation" @ %YBlit),
					// To eliminate warning: [-Wsign-conversion].
				/ %YGDI $=
				(
					/ "parameter type" @ "member function %Padding::operator*="
						-> 'size_t' ~ 'SDst',
					/ "function %Padding::operator* for %Padding" $=
					(
						/ "parameter type" @ -> 'size_t' ~ 'SDst',
						/ DLD "cast to ('SPos', 'ptrdiff_t') for components"
							// To eliminate warning: [-Wsign-conversion].
					),
					/ DLD "cast to 'SPos', 'SDst'"
						@ "functions %(operator+, FetchMargin), ClipMargin)"
						// To eliminate warning: [-Wsign-conversion].
				),
				/ DLD "cast to 'ptrdiff_t'"
					@ ("functions %(PutPixel, PlotHLineSeg, PlotVLineSeg)"
					@ %YDraw, "member function %TextFileBuffer::GetPosition"
					@ %TextManager, "member function %SwitchPageDiff"
					@ %ImageProcessing,
				/ "member functions %TextFile::(Locate, Rewind)" @ %TextFile)
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'SPos'" @ ("functions %(PlotHLineSeg, \
					PlotVLineSeg, PlotLineSeg, DrawRect)" @ %YDraw, "functions \
					%(AdjustEndOfLine, SetCurrentTextLineNOf)" @ %TextBase,
					"function %FetchLastLineBasePosition" @ %TextLayout,
					"function %AdjustOffset" @ %ImageProcessing, "blit \
					component calculation" @ %YBlit, "member function \
					%TextRegion::ClearTextLine" @ %TextRenderer),
					// To eliminate warning: [-Wsign-conversion].
				/ DLDI @ "functions %(DrawCircle, FillCircle)" @ %YDraw,
					// To eliminate warning: [-Wsign-conversion].
				/ "return type" @ "function %GetCurrentTextLineNOf" @ %TextBase
					-> 'ptrdiff_t' ~ 'std::uint16_t'
				/ %TextLayout $=
				(
					/ @ "function %AdjustBottomMarginOf" $=
					(
						/ "return type" -> 'void' ~ 'SDst',
						/ DLD "cast to 'SPos'",
							// To eliminate warning: [-Wsign-conversion].
					)
					/ DLD "implemented function template %FetchMaxTextWidth"
						^ 'SDst()' ~ '0',
						// To eliminate warning: [-Wsign-conversion].
					/ DLD "implemented function %FetchLastLineBasePosition"
						^ "%GetTextLineBaseOf",
					* "missing restriction on nonnegative bottom margin \
						component" @ "function %FetchResizedBottomMargin" $since
						b365,
						// Also to eliminate warning: [-Wsign-conversion].
					* "missing nonnegative result check"
						@ "function %FetchCharWidth" $since b280
						// Also to eliminate warning: [-Wsign-conversion].
				),
				/ DLD "implemented inline functions"
					"%(SetPenOf, AdjustEndOfLine, CarriageReturn)" @ %TextBase
					^ "macros %(PDefH, ImplExpr)",
				/ DLD "implemented inline functions" ("%(GetTextLineHeightOf, \
					GetTextLineHeightExOf, GetCurrentTextLineNOf, \
					GetTextLineBaseOf)" @ %TextBase, \
					"%(FetchResizedBottomMargin, AdjustBottomMarginOf)"
					@ %TextLayout) ^ "macros %(PDefH, ImplRet)"),
				/ DLD %YBlit $=
				(
					// To eliminate warning: [-Wsign-conversion].
					/ "cast to '_Diff'" @ "function template %BlitScan",
					/ "cast to 'difference_type' for iterator addition"
						@ "function template %Blit"
				),
				/ %CharRenderer $=
				(
					* "wrong return type 'SDst'" ~ 'SPos' @ "function template \
						%GetEndOfLinePositionOf" $since b372,
						// Also To eliminate warning: [-Wsign-conversion].
					(
					+ "function template GetEndOfLineOffsetOf",
					(
					+ "enum %PutCharResult";
					+ "function %HasPutNewline",
					/ @ "function %PutCharBase" $=
					(
						/ "return type" -> 'PutCharResult' ~ 'std::uint8_t';
						/ "differentiated printable character from unprintable"
					),
					/ "return type" @ "function template %PutChar"
						-> 'PutCharResult' ~ 'std::uint8_t'
					);
					+ "function template %PutChar with EOL parameter";
					/ "simplified function template %PutChar witout EOL"
						^ "new overloading, %GetEndOfLineOffsetOf"
						// Also to eliminate warning: [-Wsign-conversion].
					)
				),
				/ DLD "cast to 'size_t'" @ (%CharRenderer,
					"function %GetRootNameLength" @ %FileSystem,
					"member function %SwitchPageDiff" @ %ImageProcessing),
					// To eliminate warning: [-Wsign-conversion].
				/ %TextRenderer $=
				(
					/ @ "member function %TextRegion::Scroll#2" $=
					(
						// Also to eliminate warning: [-Wsign-conversion].
						* "missing restriction on nonnegative vertical margin \
							components" $since b365,
						* "missing check to ensure sum of vertical margin \
							components is less than height" $orig (@ "member \
							function %YTextRegion::Move" @ %Shell.YText $since
							$before b132)
					),
					/ @ "function templates %((PrintLine, PutLine, \
						PrintString, PutString)#3)" $=
					(
						/ DLD "cast to 'String::size_type'",
							// To eliminate warning: [-Wsign-conversion].
						/ "dispatch call" !^ "ADL"
					),
					/ "lifted EOL position calculation out of loop"
						@ "%(PutLine, PutString)" @ %TextRenderer $dep_from
						%CharRenderer
						// This improves performance on assumption of the \
							renderer does not modify the EOL position in the \
							loop.
				),
				/ @ "class %File" @ %File $=
				(
					/ @ "function %GetPositon" $=
					(
						/ "threw %LoggedEvent on failure",
						/ "return type" -> 'size_t' ~ 'ptrdiff_t'
							// Also to eliminate warning: [-Wsign-conversion].
					),
					/ $lib "simplified constructor by reducing redundant file \
						seek on querying initial file size"
				),
				- "function %GetTextPosition" @ "class %TextFile" @ %TextFile
			),
			/ %Core $=
			(
				// To eliminate warning: [-Wsign-conversion].
				/ %YGDIBase $=
				(
					/ DLD "cast to 'SPos'" @ "functions %(LocateCenter, \
						RotateCenter, TransposeCCW, TransposeCW), member \
						functions %Rect::operator(&=, |=)",
					/ DLD "cast to 'SDst'" @ "function %MakeRect, member \
						function %Rect::operator(&=, |=)",
					/ DLD "cast to '_type'" @ "function templates \
						%operator(+, -) for %GBinaryGroup instance and %Size"
				),
				/ DLD "cast to 'ptrdiff_t'" @ "function %at" @ %ValueNode
			),
			/ %Adaptor $=
			(
				/ %Image $=
				(
					/ DLD "cast to 'int'"
						@ "member function %ImageCodec::DetectFormat#1",
						// To eliminate warning: [-Wsign-conversion].
					/ @ "class %HBitmap" $=
					(
						// Also to eliminate warning: [-Wsign-conversion].
						* "missing size component range check" @ "constructors \
							with 'const Size&' parameter" $since b417
							$= (+ "size component check" ^ "%CheckScalar"),
						* "missing size range check" @ "%operator CompactPixmap"
							b471
							$= (+ "size check" ^ "%CheckScalar")
					),
					/ @ "%HMultiBitmap constructor implementation" $=
					(
						* "missing nonnegative check for page count procedure \
							result" $since b456,
						/ DLD "cast to 'size_t'"
							// To eliminate warning: [-Wsign-conversion].
					)
				),
				/ %Font $=
				(
					/ @ "member function %FontCache::LoadTypefaces" $=
					(
						+ "trace for loaded face number with level \
							%Informative",
						/ "cast result to 'size_t'"
							// To eliminate warning: [-Wsign-conversion].
					),
					/ @ "class %Typeface" $=
					(
						// To eliminate warning: [-Wsign-conversion].
						/ "cast to 'std::int32_t'"
							@ "member function %Typeface::LookupBitmap"
						/ "cast to 'long'" @ "constructor",
					)
				)
			)
		),
		/ %NPL.SContext $=
		(
			// To eliminate warning: [-Wsign-conversion].
			/ DLD "cast to 'byte'" @ ("member functions \
				%Session::(DefaultParseByte, DefaultParseQuoted)" @ %Scontext,
				"member function %LexicalAnalyzer::FilterForParse" @ Lexical),
			/ DLD "cast to 'char'" @ ("constructor %SContext" @ %Scontext, \
				"member functions %LexicalAnalyzer::(ParseQuoted, ParseByte)"
				@ %Lexical)
		),
		/ %'YCLib_(MinGW32)' $=
		(
			/ %MinGW32 $=
			(
				/ DLD "cast error code to 'Win32Exception::ErrorCode'"
					@ "%YF_Raise_Win32Exception_On_Failure",
					// See http://stackoverflow.com/questions/19547419/errors-in-windows-dword-getlasterror-vs-hresult-vs-lstatus \
						for different types. Also to eliminate warning: \
						[-Wsign-conversion] for WIN32 registry API calls.
				/ DLD "implemented function %ConvertTime",
					// To eliminate warning: [-Wsign-conversion].
				/ DLD "cast to 'int'" @ "constructor %Win32Exception, console \
					handler",
					// To eliminate warning: [-Wsign-conversion].
				/ @ "functions %(MBCSToMBCS, WCSToMBCS, MBCSToWCS)" $=
				(
					/ "all 'int' parameter" -> 'unsigned',
						// Also to eliminate warning: [-Wsign-conversion].
					/ "shift parameter of length to 1st"
						// To avoid ambiguity.
				),
				* "missing internal check to result of %MBCSToMBCS" $since b431
					// Also to eliminate warning: [-Wsign-conversion].
			),
			/ @ "class %WConsole" @ %Console $=
			(
				/ DLD "cast to 'short'" @ "function %CursorUp"
					// To eliminate warning: [-Wsign-conversion].
				* "missing check for positive console size components" $since
					b520
					// Also to eliminate warning: [-Wsign-conversion].
			)
		),
		/ DLD %YCLib $=
		(
			// To eliminate warning: [-Wsign-conversion].
			/ "cast to 'std::uint64_t'" @ "platform %Win32"
				@ "function %GetFileSizeOf" @ %FileSystem,
			/ "cast to ('int', 'unsigned long', 'SPos', 'SDst')"
				@ "platform %Win32" @ %HostedGUI
		),
		/ %Helper $=
		(
			// To eliminate warning: [-Wsign-conversion].
			/ "last parameter type"
				@ "function template %ActOnHover_ShowTopLevel"
				@ "platform %Win32" @ %HostedUI -> 'unsigned long' ~ 'int',
			/ DLD "cast to ('short', 'unsigned')" @ "constructor %Window"
				@ %Host,
			/ DLD "cast to 'ptrdiff_t'" @ "platform %Win32"
				@ "constructor %InputManager" @ %InputManager,
			/ DLDI @ "member function %FPSCounter::Refresh"
		),
		/ %CHRLib $=
		(
			// To eliminate warning: [-Wsign-conversion].
			/ DLDI @ (%MappingEx,
				"member function %GUCS2Mapper<CharSet::UTF_8>::InverseMap"
				@ %StaticMapping),
			/ DLD "cast to 'size_t'"
				@ "functions %(MBCSToUCS2, UCS2ToMBCS, UCS4ToUCS2)"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ "metafunction %fixed_multiplicative" @ %Rational -> "%make_widen_int"
			@ %CStandardInteger,
		/ DLDI "cast to 'size_t'" @ "function template %ntctslen" @ %CString,
			// To eliminate warning: [-Wsign-conversion].
		/ DLD "cast to 'size_t'" @ "operator+="
			@ "class template %bitseg_iterator" @ %BitSegment
			// To eliminate warning: [-Wsign-conversion].
	),
	/ %YReader $=
	(
		/ @ "member function %HexModel::GetPosition" @ %HexBrowser $=
		(
			- 'ynothrow',
			/ "return type" -> 'size_t' ~ 'ptrdiff_t'
		),
		* "wrong result presented on file position getting failure"
			@ "hex browser %ViewChanged handler" @ "constructor %ShlHexBrowser"
			@ %ShlReader
	),
	+ $build '-Wfloat-equal -Wsign-conversion' @ ("default value"
		@ "variable %CXXFLAGS_WARNING", "compiler options"
		@ "platform %Win32" @ "Code::Blocks projects"),
	(
	/ $dev $repo $re_add(b586) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ((("%progress.h"
		=> "%Progress.h") @ %UI, "%yblit.cpp" => "%YBlit.cpp" @ %Service)
		@ %YSLib, ("%MapEx.cpp" => "%MappingEx.cpp", "%smap.hpp"
		=> "%StaticMapping.hpp", "%chrproc.cpp" => "%CharacterProcessing.cpp")
		@ %CHRLib) @ %YFramework;
	/ $forced $build "updated %LIBS" @ "%SHBuild-bootstrap.sh"
		@ %Tools.Scripts
	),
	/ $revert_ex(b525) DD $term $lib $design "all 'C++1y'" -> 'C++14'
		!@ %Documentation $effective %Helper.InputManager
		// The standard has been published.
),

b586
(
	// NOTE: x86_64 Clang++ 3.5.1 is used to test for warnings.
	/ %YBase $=
	(
		/ DLD "%to_string with floating pointer parameters"
			^ "casting to 'double'" @ %LibDefect.String,
			// To eliminate G++ warning: [-Wdouble-promotion].
		+ "macro %(ynoexcept_assert, ynoexcept_spec)" @ %YDefinition,
		/ %YStandardEx $=
		(
			/ "namespace %operators_impl" @ "namespace %ystdex" @ %operators
				=> "%dependent_operators",
			/ %Utilities $=
			(
				+ "namespace %dependent_swap",
				+ "classes %(any_constructible, not_constructible)",
				+ "type traits %(is_swappable, is_nothrow_swappable)",
				/ @ "class template %state_guard" $=
				(
					/ "specialization with reference type tokens" $=
					(
						/ "supported exception-specification",
						+ "exception-specification" @ "destructor"
							// Allow destructor to throw.
					),
					/ @ "specialization with non-reference type tokens" $=
					(
						* "wrong exception-specification if %condition_type \
							convent to %bool could throw" @ "destructor",
						+ "exception-specification" @ "function %dismiss"
					)
					+ "exception-specification"
						@ "underlying destroy operation, constructors",
				),
				/ "allow throwing exception" @ "functions \
					%(operator bool, swap)" @ "class template %nptr" $=
				(
					- "static assertion",
					/ 'ynothrow' -> "exception-specification allowing to throw"
				)
			),
			/ %Iterator $=
			(
				/ @ "non-special constructors"
					@ "class template %transposed_iterator" $=
				(
					+ "noexcept specification",
					/ "initialized member iterator" ^ "copy" ~ "forwarding"
				),
				+ "noexcept specification"
					@ "constructor template %transformed_iterator",
				+ "noexcept specification"
					@ "templates %(make_transform, make_transposed)"
					^ $dep_from ("%ynoexcept_spec" @ %YDefinition)
			),
			/ "class %bad_any_cast" @ %Any $=
			(
				/ "stored %lref<const std::type_info> object"
					~ "%name result of %std::type_info";
				+ "functions %(from_type, to_type)",
				* $comp "unspecified storage and possibly undefined behavior \
					depending on implementations" @ "functions %(from, to)"
					$since b342,
					// ISO C++ does not specified whether the result of \
						%std::type_info::name can be used out of full \
						expressions or not.
				* "missing 'YB_API'" $since b331
			),
			- DLD "unused parameter" @ "catch clause"
				@ "destructor %thread_pool" @ %Concurrency,
				// To eliminate Clang++ warning: [-Wunused-exception-parameter].
			+ $dev "explicitly defaulted default constructor"
				@ "classes %(unsupported, unimplemented)" @ %Exception,
				// To eliminate Clang++ warning: [-Wdeprecated] due to \
					user-provided destructor declared.
			/ @ "class template %fixed_point" %Rational $=
			(
				/ @ "constructor template for integers" $=
				(
					/ DLD "cast to %base_type from shift result"
						~ "cast from parameter",
						// To eliminate Clang++ warning: [-Wconversion].
					/ 'ynothrow' -> 'ynothrowv'
						// Since left shift may cause undefined behavior.
				),
				/ "cast to %base_type from round result"
					@ "constructor template for floating point numbers",
					// To eliminate Clang++ warning: [-Wconversion].
				+ "explicitly defaulted copy %operator=",
					// To eliminate Clang++ warning: [-Wdeprecated].
				/ DLD "cast to result type from shift result"
					~ "cast from parameter"
					@ "function %operator/=, multiplicative operations"
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			),
		)
	),
	/ %YFramework $=
	(
		/ DLD "renamed local variable" @ "constructor %InputQueue::InputQueue"
			@ %'YCLib_(Android)'.Android,
			// To eliminate G++ warning: [-Wshadow-local].
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ DLD "simplified exception-specification" @ %YEvent
					^ "%std::is_nothrow_constructible";
				+ "YGraphics.cpp" @ %YGraphics
					$= (+ $dev "definition of destructor"
						@ "interface %IImage"),
				/ DLD "cast" @ "ctor-initializer"
					@ "constructor templates %GBinaryGroup" @ %YGDIBase,
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				/ @ "function template %RestrictUnsigned" @ %YCoreUtilities $=
				(
					/ "2nd parameter" -> '_type' ~ 'unsigned',
					+ $dev "static assertion to confirm '_type' is \
						unsigned integer"
					// Also to eliminate Clang++ warning: [-Wshorten-64-to-32] \
						for %TextBox::UpdateTextBoxClippedText without cast.
				)
			),
			/ "user-provided constructor" -> "inherited constructor"
				@ "class %MessageSignal" @ %(Core.YMessage,
				"class %UIEventSignal" @ %UI.YWidgetEvent),
			/ %UI $=
			(
				+ $dev "explicitly defaulted default constructor"
					@ "class %BadEvent" @ %YWidgetEvent,
				/ $dev %YWidgetView $=
				(
					/ @ "class %AView" $=
					(
						/ "inline defined destructor" -> ("defined virtual \
							out-of-line destructor" @ "non-header file"),
							// To eliminate Clang++ warning: [-Wweak-vtables].
					),
					/ $lib "explicitly defaulted (move, copy) constructors"
						@ "class %View" ^ "%DefDeCopyMoveCtor"
				),
				- 'virtual' @ "destructor" @ "class %Console" @ %Console,
					// Also to eliminate Clang++ warning: [-Wweak-vtables].
				/ DLD "cast" @ "constructor %BorderResizer" @ %Border,
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				* "wrong return type" @ "member function %GetTotal"
					@ "classes %(MTextList, AMUnitList)" $orig
					(@ %TextList $since b527)
					// Also to eliminate Clang++ warning: [-Wshorten-64-to-32].
					$= (/ "return type" -> 'size_t' ~ 'SDst'),
				/ DLD "cast to %Rect component type"
					@ "member function %TextList::InvalidateSelected"
						@ %ListControl
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			),
			/ $dev @ ("classes %(GraphicDevice, KeyInputDevice)"
				@ %Core.YDevice, "class %AController" @ %UI.YWidgetEvent) $=
			(
				/ $lib "inline defined destructor" -> ("defined virtual \
					destructor out-of-line" @ "non-header file"),
					// To eliminate Clang++ warning: [-Wweak-vtables].
				+ "explicitly defaulted default constructor"
					// To eliminate Clang++ warning: [-Wdeprecated] due to \
						user-provided destructor declared.
			),
			/ $dev "inline defined defaulted destructor" @ ("class %UIEventArgs"
				@ %UI.YWidgetEvent, "class %Timer" @ %Service.YTimer)
				-> ("defined virtual out-of-line destructor"
				@ "non-header file"),
				// To eliminate Clang++ warning: [-Wweak-vtables].
			+ $dev "out-of-line virtual destructor" @ (("%PseudoRenderer"
				@ %YRenderer, "class %Control" @ %YControl, "class %Desktop"
				@ %YDesktop, "classes %(HorizontalTrack, VerticalTrack, \
				ScrollableContainer)" @ %Scroll, "class %Thumb" @ %Button,
				"class %TabControl" @ %TabControl, "classes %(TreeList, \
				TreeView)" @ %TreeView, "classes %(ListBox, FileBox)"
				@ %ComboList, "class %Menu" @ %Menu, "class %TextArea"
				@ %TextArea, "class %WidgetNotFound" @ Loader) @ %UI,
				"class %TextRegion" @ %Service.TextRenderer,
				"classes %(DialogBox, DialogPanel)" @ %UIContainerEx),
				// To eliminate Clang++ warning: [-Wweak-vtables].
			/ %Service $=
			(
				/ %File $=
				(
					/ DLD "cast to %long" @ "member function %File::Seek",
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
					/ DLD "implemented function template %operator>>"
						^ "%std::isspace" ~ "%std::iswspace"
						// Also to eliminate Clang++ warning: [-Wconversion].
				),
				/ %TextFile $=
				(
					/ "parameter type" @ "function %Locate" -> "%std::size_t"
						~ "%std::uint32_t"
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				),
				- "virtual destructor" @ "class %TextFileBuffer" @ %TextManager,
					// Also to eliminate Clang++ warning: [-Wweak-vtables].
				+ "explicit constructor for same 4 components"
					@ "class %Padding" @ %YGDI,
				/ DLD "implemented member function %TextRegion::Scroll#2"
					@ %TextRenderer ^ 'auto' ~ 'std::int32_t',
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].

			),
			+ "explicitly defaulted default constructor" @ ("class %PathNorm"
				@ %Service.FileSystem, "class %BadImageAlloc" @ %Adaptor.Image),
			+ DLD "explicitly initialized interface type subobject"
				@ ("class %Widget" @ %UI.Widget, "class %CompactPixmap"
				@ %Service.YGDI),
				// To eliminate G++ warning: [-Wextra].
			/ %Adaptor $=
			(
				/ %Image $=
				(
					/ DLD "cast to 'unsigned long'"
						@ "member functions %(ImageTag::(SetCount, SetLength), \
						ImageCodec::DetectFormat#1)",
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
					/ DLD "cast to %int"
						@ "member function %HBitmap::operator[]",
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
					* "missing offset range check" @ "constructor accepting pitch"
						@ "class %HBitmap" $since b471,
						// Also to eliminate Clang++ warning: \
							[-Wshorten-64-to-32].
						$= (+ $design "range check by call of %CheckScalar \
							which would throw on failure")
				),
				/ %Font $=
				(
					/ DLD "cast to %long for face indexes"
						@ "member function %FontCache::LoadTypefaces",
						// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				)
			),
			/ DLD "cast to 'SDst'" @ ("function template %FillPixel"
				@ %Service.YBlit, ("member functions \
				%AMUnitList::(GetFullViewHeight, GetViewPosition)" @ %Viewer,
				"member function %TreeList::GetIndentWidth" @ %TreeView) @ %UI)
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].
		),
		/ %YBaseMacro $=
		(
			+ "definition of defaulted copy constructors"
				@ "macro %YInterfaceHead" @ %YBaseMacro,
				// To eliminate Clang++ warning: [-Wdeprecated] due to \
					user-provided destructor declared.
			- "destructor definition" @ "macro %YInterfaceHead",
			+ "virtual destructor declarations"
				@ "macros %(DeclI, DeclDerivedI)"
				// Keep non-pure to avoid Clang++ warning: [-Wweak-vtables].
		),
		/ DLD "cast to %ucs2_t" @ "functions %(FetchBiCharBE, FetchBiCharLE)"
			@ %CHRLib.CharacterMapping,
			// To eliminate Clang++ warning: [-Wconversion].
		* $dev $build "strict ISO C++ conformance" $=
		(
			// To eliminate G++ warning: [-Wpedatic], Clang++ warning: \
				[-Wextra-semi].
			* "redundant ';' at end of member function definition"
				@ (("class %HostRenderer" $since b430 @ %HostRenderer $orig
				($impl $since b426)) @ %Helper, @ ("class %ValueNode"
				@ %Core.ValueNode $since b338, "class %HBitmap"
				@ %Adaptor.Image $since b417) @ %YSLib),
			// To eliminate Clang++ warning: [-Wundefined-reinterpret-cast].
			$= (* "undefined behavior of 'reinterpret_cast'" @ "constructor \
				%ScreenBuffer" @ "platform %Win32" @ %YCLib.HostedGUI $orig
				(@ %'YCLib_(MinGW32)'.Win32GUI $since b428))
		),
		(
		/ "macro %ImplEmptyDtor" -> "macro %ImplDeDtor with 'inline' removed"
			@ %YBaseMacro;
		/ DLD "simplified out-of-line defaulted destructor definitions"
			^ "%ImplDeDtor" $effective @ %('Helper_(MinGW32)'.Win32Control,
			'YCLib_(MinGW32)'.MinGW32, YCLib.(FileSystem, Host), YSLib)
		),
		/ %'YCLib_(MinGW32)' $=
		(
			/ %MinGW32 $=
			(
				- "redundant 'break'" @ "console handler" @ %MinGW32,
					// To eliminate Clang++ warning: [-Wunreachable-code-break].
				/ DLD "cast size to 'unsigned long'" @ "member functions \
					%RegistryKey::(GetSubKeyNames, GetValueNames)",
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				/ DLD "cast size to 'unsigned'"
					@ "function %FetchSystemPath",
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				/ @ "functions %(MBCSToMBCS, WCSToMBCS, MBCSToWCS)" $=
				(
					* "missing zero length check" $since b431,
					* "missing length overflow check" $since b431
						// If overflow when cast to 'int', the behavior is \
							undefined. Also to eliminate Clang++ warning: \
							[-Wshorten-64-to-32].
						$= ($design "prevented length overflow by call of \
							%YSLib::CheckPositiveScalar which would throw on \
							failure");
					/ "check nonnull only when length is in the range and \
						always by %Nonnull indirectly"
				)
			),
			/ DLD "2nd parameter" -> 'unsigned long' ~ 'size_t'
				@ "member function %WConsole::Fill" @ %Consoles,
				// To eliminate Clang++ warning: [-Wshorten-64-to-32] where \
					%size_t is not 'unsigned long'.
		),
		/ %YCLib $=
		(
			/ DLD "cast virtual key code to 'int'" @ "platform %Win32"
				@ "function %UpdateKeyStates" @ %Input,
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			/ %Keys $=
			(
				/ DLD "cast key code to 'unsigned' as %function %MapKeyChar#1"
					@ "function %MapKeyChar#2" @ "platform %Win32",
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
				/ DLD "cast key code to 'int'" @ "function %FetchLockState"
					@ "platform %Win32" @ %Keys
					// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			),
			/ DLD "cast mapped size to 'unsigned long'" @ "constructor \
				%MappedFile" @ "platform %Win32" @ %MemoryMapping,
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].
			/ DLD "cast size to 'int'" @ "platform %Win32"
				@ "function %u16getcwd_n" @ %FileSystem,
				// To eliminate Clang++ warning: [-Wshorten-64-to-32].

		),
		/ DLD "implemented member functinon %FPSCounter::Refresh"
			@ %Helper.ShellHelper
			// To eliminate Clang++ warning: [-Wshorten-64-to-32].
	),
	* $dev "missing entries for files of %YFramework.Core.(YConsole, YGraphics)"
		@ "Code::Blocks projects" $since b585,
	/ %Test $=
	(
		+ $dev $build '-Wno-double-promotion' @ "%CXXFLAGS" @ "%test.sh",
			// To eliminate G++ warning: [-Wdouble-promotion].
		/ DLD "renamed local variable for several lambda-expressions" @ %YBase
			// To eliminate G++ warning: [-Wshadow].
	),
	/ DLD "simplified declarations" ^ $dep_from
		("%(ynoexcept_assert, ynoexcept_spec)" @ %YBase.YDefinition) $effective
		@ %(YBase.YStandarEx.(Iterator, Utilities, Iterator, Cast, Functional),
		YFramework.YSLib.Core.YEvent),
	/ $dev @ ("class %bad_any_cast" @ %YBase.YStandardEx.Any, (((
		"classes %(LoggedEvent, FatalError)" @ %YException,
		"classes %(MessageException, MessageSignal)" @ %YMessage) @ %Core,
		("class %FontException" @ %Font,
		"classes %(BadImageAlloc, UnsupportedImageFormat, UnknownImageFormat)"
		@ %Image) @ Adaptor, ("class %PathNorm" @ %FileSystem, "class %Image"
		@ %YResource, "class %BasicImage" @ %YGDI) @ %Service,
		("classes %(RoutedEventArgs, KeyEventArgs, InputEventArgs, \
		CursorEventArgs, CursorWheelEventArgs, TextInputEventArgs, \
		PaintEventArgs, BadEvent)" @ %YWidgetEvent, "class %InputTimer" @ %YGUI)
		@ %UI) @ %YSLib, ("class %Exception" @ %Host,
		"class %FileOperationFailure" @ %YFileSystem) @ %YCLib,
		"class %Win32Exception" @ %'YCLib_(MinGW32)'.MinGW32,
		"class %ViewSignal" @ %'Helper_(MinGW32)'.Win32Control) @ %YFramework) $=
	(
		+ "defined virtual out-of-line destructor" @ "non-header file",
			// To eliminate Clang++ warning: [-Wweak-vtables].
		+ "explicitly defaulted copy constructor"
			// To eliminate Clang++ warning: [-Wdeprecated] when user-provided \
				destructor declared.
	),
	/ "explicitly defaulted (default, copy) constructor for all platforms"
		@ ("class %cloneable" @ %Base, "class template %path_norm" @ %Path,
		"class %any_ops::holder" @ %Any),
			[-Wdeprecated] due to user-provided destructor declared. The default
		// The copy constructor is provided to eliminate Clang++ warning: \ \
			constructor is provided due to the default declared one will be \
			supressed by the copy constructor.
	+ "interface destructor definitions" $effective @ (Core.(YEvent, YObject),
		UI.YWidget, Service.YResource) @ %YFramework,
		// Also to eliminate Clang++ warning: [-Wweak-vtables].
	(
	/ $dev $repo $re_add(b584) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%main.cpp"
		=> "%Main.cpp" @ %YReader.Main, ((("%ydevice.h" => "%YDevice.h",
		"%yexcept.cpp" => "%YException.cpp", "%ymsg.h" => "%YMessage.h",
		"%ydevice.cpp" => "%YDevice.cpp", "%yobject.cpp" => "%YObject.cpp")
		@ %Core, ("%ydraw.h" => "%YDraw.h", "%yres.cpp" => "%YResource.cpp")
		@ %Service, ("%scroll.h" => "%Scroll.h", "%ydesktop.h" => "%YDesktop.h",
		"%ydesktop.cpp" => "%YDesktop.cpp", "%button.h" => "%Button.h",
		"%uicontx.h" => "%UIContainerEx.h", "%uicontx.cpp"
		=> "%UIContainerEx.cpp", "%textarea.h" => "%TextArea.h",
		"%textarea.cpp" => "%TextArea.cpp") @ %UI) @ %YSLib,
		"%chrmap.h" => "%CharacterMapping.h" @ %CHRLib) @ %YFramework);
	* $comp "mismatched header file name"
		@ %YFramework.YSLib.(Core, Service).YModule $since b585
	),
	/ $build %Tool.Scripts $=
	(
		+ '-Wshorten-64-to-32 -Wweak-vtables' @ "default value"
			@ "variable %CXXFLAGS_IMPL_WARNING for Clang++"
			@ "%SHBuild-common-options.sh",
			// See $2015-03 @ %Documentation::Workflow::Annual2015 for details \
				of '-Wweak-vtables'. Though it is not fit for every project, \
				it is still tentatively placed here in the script.
		(
		/ "allowed %(C_CXXFLAGS_IMPL_WARNING, CXXFLAGS_IMPL_WARNING) to be \
			overridden" @ "%Toolchain.options.mk";
		/ "removed '-Wdouble-promotion -Wpacked'" @ "default options"
			@ "%Toolchain.DS.mk"
		)
	)
),

b585
(
	/ %YBase.YStandardEx $=
	(
		/ %Iterator $=
		(
			+ 'yconstfn' @ "function template %operator== for %pseudo_iterator",
			+ "function templates binary %operator(-, <) between \
				%pseudo_iterator",
				// It always returns zero for '-' and compares underlying \
					value for '<'.
			/ $re_add(b461) @ "class template %pointer_iterator" $=
			(
				+ 'ynothrowv' @ "functions %operator(+=, -=, ++, --)"
				+ 'ynothrow' @ "function %operator pointer"
			),
			+ $re_add(b461) 'ynothrow'
				@ "function template %operator== for %pointer_iterator",
			/ @ "class template %pseudo_iterator" $=
			(
				/ "user-provided constructor"
					-> "explicitly defaulted constructor",
					// The member can be uninitialized now.
				+ 'ynothrow' @ "functions %operator(+=, -=, 2 *, ++, --)"
			),
			+ "noexcept-specification" @ "function template %operator== for \
				%pseudo_iterator",
			/ @ "class template %pair_iterator" $=
			(
				/ "user-provided constructor"
					-> "explicitly defaulted constructor",
					// The member can be uninitialized now.
				+ "noexcept-specification" @ "functions %operator(+=, -=, *, \
					++, --), friend (function, function template) %operator==",
				+ 'ynothrow' @ "function %base"
			),
			/ @ "class template %transformed_iterator" $=
			(
				+ "noexcept-specification" @ "functions %operator*",
				+ 'ynothrow' @ "all 2 conversion functions, 2 functions %get"
			),
			+ "noexcept-specification" @ "functions templates \
				%operator(==, +=, -=, <) for %transformed_iterator"
		),
		+ 'ynothrow' @ "function template %underlying" @ %Utilities
	),
	/ $dev "packed common target files to main project" @ "Microsoft VC++ projects",
		// Since there are some files are acutally used by multiple target \
			platforms, put them in projects of particular platform is not \
			reasonable.
	* $dev "wrong paths of %Helper_(DS) source files"
		@ "main Code::Block project" $since b431,
	/ %YFramework $=
	(
		+ %'YCLib_(DS)'
			$= (+ %DSVideo);
		/ "namespace %platform_ex" @ %YCLib.Video >> %'YCLib_(DS)'.DSVideo
		/ %YCLib $=
		(
			/ %Video $=
			(
				/ "function %platform::YConsoleInit" -> ("%platform_ex::DSInit"
					@ "platform %DS") @ %'YCLib_(DS)'.DSVideo,
				/ @ "class %Color" $=
				(
					/ DLD "all data members"
						^ "brace-or-equal-initializer ' = 0'";
					/ "explicitly defaulted default constructor"
				),
				/ "namespace %Consoles" >> $dep_from %YSLib.Core.YConsole
					$dep_to "console color set"
			),
		),
		/ %YSLib $=
		(
			/ %Core $=
			(
				+ %YConsole $=
				(
					+ 'namespace ColorSpace = Drawing::ColorSpace;'
						@ "namespace %Consoles" $dep_from "console color set";
					/ "type" @ "%ConsoleColors" -> "array of %ColorSet"
						~ "array of %Color"
				),
				+ %YGraphics,
				/ %YGDIBase $=
				(
					/ @ "class template %GBinaryGroup" $=
					(
						/ DLD "all data members"
							^ "brace-or-equal-initializer ' = 0'"";
						/ "explicitly defaulted default constructor"
					),
					/ "class template %GGraphics, aliases %(BitmapPtr, \
						ConstBitmapPtr, ConstGraphics, Graphics), interface \
						%IImage, class %PaintContext, functions \
						%(UpdateClipArea, UpdateClipSize)"
						>> $dep_from %YGraphics
				)
			),
			/ %Service $=
			(
				* DLB $re(b547) "strict ISO C++ code conformance"
					@ %CharRenderer $since b583
					$= (* "missing user-provided default constructor for \
						default initialized const object"
						@ "function %RenderChar"
						$= (/ $design ^ "list initialization"
							~ "default initialization")),
				/ DLD "implemented floating arguments for format '%f' by \
					explicitly casting to 'double'" ~ "casting to 'float'"
					@ %ImageProcessing;
					// To eliminate G++ warning: [-Wdouble-promotion].
			)
		)
	),
	/ @ "call %YConsoleInit" @ "function %OnExit_DebugMemory only for \
		platform %DS" @ %YSTest_(ARM9).Main,
	/ "%RevisionPatcher.sh" @ %Tools.Scripts $=
	(
		// See $2015-03 @ %Documentation::Workflow::Annual2014.
		/ "default value" @ "variable %PatchEnd" -> '30' ~ '20',
		/ "restricted revision pattern with single prefixed number character"
	),
	* DLD "non-default search linker options relations"
		@ "%Code::Blocks project %'YSTest_(MinGW32)'" $since b299,
		// The default is "append". Though this has no effect currently, it \
			was not intended.
	/ DLDI "function" ^ "explicit format string" @ $effective
		@ ("%FetchDBCSOffset" @ %'YCLib_(MinGW32)'.NLS, "%TestFramework"
		@ "platform %Win32" @ %'Helper_(DS)'.DSMain @ %YFramework),
		// To eliminate G++ warning: [-Wformat-security].
	/ DLD $build "removed name shadowing" $effective @ $=
	(
		// To eliminate G++ warning: [-Wshadow].
		/ "renamed parameter %wait" -> "%waiter" @ "functions"
			@ "class template %thread_pool" @ %YBase.YStandardEx.Concurrency,
		/ "renamed local variable" @ (((("member functions %(TabBar::Refresh, \
			TabControl::SwitchPage)" @ %TabControl, "constructor %DropDownList"
			@ %ComboList, "constructor %TextList" @ %ListControl, "functions \
			%(RectDrawCheckBox_Aoi, RectDrawRadioBox_Aoi)" @ %ExStyle "member \
			function %GUIState::Wrap" @ %YGUI) @ %UI, ("member functions \
			%TextFileBuffer::(operator[], GetPosition)" @ %TextManager,
			"functions %(DrawCircle, FillCircle)" @ %YDraw) @ %Service,
			"member function %Font::GetGlyph" @ %Adaptor.Font) @ YSLib,
			("constructor %RenderWindow" @ %HostRenderer) @ %Helper)
			@ %YFramework, ("function template %handle_nested" @ %Exception)
			@ %YBase.YStandardEx.Exception, "constructor %ShlExplorer"
			@ %YReader.ShlExplorer),
		- "redundant local variable" @ "%TabControl::UpdateTabPages"
			@ %YFramework.YSLib.UI,
		/ $impl "renamed local variable" @ (("function %ExtractException"
			@ %Helper.Initialization, "member function %Logger::DoLogException"
			@ %YCLib.Debug, "member functions %ValueNode::(operator[], at)"
			@ %YSLib.Core.ValueNode), %Tools.SHBuild.Main),
		/ "simplified constructor" ^ "lambda capture" @ (("class %Terminal"
			@ %Host, "class %MappedFile" @ %MemoryMapping) @ %YCLib,
			"class %HBitmap" @ %YSLib.Adaptor.Image) @ %YFramework
	),
	(
	/ "build options" $effective ("%SHBuild-common-optioins.sh", \
		"%Toolchain.options.mk") @ %Tools.Scripts $=
	(
		(
		/ "variable %CFLAGS_WARNING" -> "variable %C_CXXFLAGS_FLAGS_WARNING" $=
		(
			- "'-Wunreachable-code' since it is ignored by GCC currently",
				// See GCC source "gcc/common.opt". Also no need use for other \
					implementations since they are mostly inteded to be \
					compatible with GCC.
			- "'-Winit-self -Wmain' since they are already enabled by '-Wall'",
				// '-Wmain' is also enabled by pedantic modes.
			+ '-Wdeprecated-declarations',
			+ '-Wdiv-by-zero -Wmultichar -Wpacked -Wpragmas -Wshadow',
			+ '-Wformat=2 -Wno-format-nonliteral'
				// Like '-Wformat-security -Wformat-y2k'. There is also a \
					'-Wformat-signedness' option with level 2 but it is not \
					supported by G++ 4.9 yet.
		),
		+ "'-Wdouble-promotion -Wlogical-op -Wtrampolines' as default value of \
			variable %C_CXXFLAGS_IMPL_WARNING" @ "G++ detected";
		+ "variable %CFLAGS_WARNING with default value '$C_CXXFLAGS_WARNING \
			$C_CXXFLAGS_IMPL_WARNING'",
		+ '$C_CXXFLAGS_IMPL_WARNING' @ "default value"
			@ "variable %CXXFLAGS_WARNING"
		),
		+ '-Woverloaded-virtual' @ "variable %CXXFLAGS_WARNING",
		+ '-Wconditionally-supported' @ "variable C_CXXFLAGS_IMPL_WARNING"
			@ "G++ detected"
	);
	/ "updated C++ options" @ "Code::Block projects" @ "platform %MinGW32"
	),
	/ %YReader $=
	(
		- "redundant protected member %SettingPanel::ddlScrollTiming"
			@ %ReaderSettingUI;
			// Also to eliminate G++ warning: [-Wshadow].
		/ DLD "implemented floating point constant" @ %ShlExplorer ^ "%float"
			~ "%double"
			// To eliminate G++ warning: [-Wdouble-promotion].
	),
	/ $re_ex(b478) "updated %SUBTITLE2 year" @ "makefile" @ "platform %DS"
		@ "project %YSTest"
),

b584
(
	/ %YFramework.YSLib $=
	(
		* DLB "wrong data files path" @ "Code::Block projects"
			@ "platforms %(DS, ())" $since b252,
		/ %UI $=
		(
			+ "functions %(ActAfter; DisplayFor)" @ %Animation,
			(
			+ "2 constructors color parameters" @ "class %BorderStyle"
				@ %Border;
			/ DLDI "simplified constructor %ProgressBar" @ %Progress
			)
		),
		/ %Service $=
		(
			/ %YTimer $=
			(
				/ $dev $re_ex(b572) "all 'const TimeSpan&' parameter"
					-> 'TimeSpan' $effective @ "function %Delay",
					// See $2015-01 @ %Documentation::Workflow::Annual2015.
				/ "underlying integer type" @ "alias %TimeSpan"
					-> "unsigned type as of %Duration";
				/ "class %HighResolutionClock; alias-declarations %(Duration, \
					TimePoint, TimeSpan)" >> 9$dep_from %Core.YClock)
			),
			* "thread safety" @ "character blit" @ %CharRenderer $orig
				(@ %Shell.YText $since b189),
			/ @ "namespace %Shaders" @ %YPixel $=
			(
				/ @ "functor %BlitTransparentPoint" $=
				(
					/ $design "all reference type parameters" @ "function \
						templates %operator()" -> "object type parameters",
					(
					/ "parameter with type %IteratorPair"
						@ "function template %operator()"
						-> "instance of %ystdex::pair_iterator";
					$dep_to "%IteratorPair usage"
					)
				),
				/ "merged member function templates %operator()#(1, 2)"
					@ "functor %BlitAlphaPoint";
				* $comp "undeclared using of %IteratorPair" @ "blit loop \
					functors" $since b442 $dep_from "%IteratorPair usage",
					// Since %YPixel is designed without %YBlit support, there \
						should be a declaration of %IteratorPair if used \
						directly.
				/ "functors %(BlitTransparentPoint, BlitAlphaPoint)"
					>> $dep_from %YBlend
			),
			/ %YBlit $=
			(
				+ "4 function templates %BlitRect";
				/ @ "simplified function templates %FillRectRaw" $=
				(
					/ "merged all 3 function templates" ^ "%BlitRect";
					/ $comp "last pixel parameter" -> "2nd parameter"
				)
			),
			(
			+ %YBlend $=
			(
				(
				+ "function template %BlendRectRaw";
				+ "function %BlendRect"
				),
				(
				+ "function template %CompositeRectRaw";
				+ "function %CompositeRect"
				)
			);
			+ "classes %(BlendBrush, CompositeBrush)" @ %YBrush
			)
		),
		/ %Core
			$= (+ %YClock),
		/ "return type" @ "%GetFrameTimeOf" @ %Adaptor.Image -> "%TimeSpan"
			~ 'std::chrono::milliseconds'
	),
	/ %YDE.ImageBrowser.ImageControl $=
	(
		+ "protected data member %lblCenter";
		+ "showed scale value on %CursorWheel and hiding after 1 second"
	),
	/ $dev $repo $re_add(b580) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ (("%progress.cpp"
		=> "%Progress.cpp") @ %UI, "%ydraw.cpp" => "%YDraw.cpp" @ %Service)
		@ YFramework.YSLib
),

b583
(
	/ @ "%build-YSTest.sh" @ %YStest $=
	(
		/ "quoted path for source and include directory at command line",
			// Not necessary at now but good to be consistent.
		- ($re_ex(b561) @ %Tools) "unnecessary curly braces around variables"
	),
	/ "quoted path for include directory" @ "exported variable \
		%SHBuild_YSLib_Flags" @ "%SHBuild-BuildApp.sh" @ %Tools.Scripts
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %Caret" @ %TextBox $=
				(
					/ "stopped caret at once when found disabled"
						@ "function %Check",
						// To improve performance.
					* "caret not shown and input not allowed after lost focus \
						through indirect parent and then focused even directly"
						$since b571
				),
				+ "parameter pack support" @ "function template %ActOnHover"
					@ %Hover,
				+ "function %MoveToCenter" @ %YUIContainer
			),
			/ %Core.YGDIBase $=
			(
				+ "function %LocateCenter",
				/ "implemented %RotateCenter" ^ "%HalfDifference"
			),
			/ %Service.YBlit $=
			(
				(
				/ "function template %operator()"
					@ "functors %(SequenceTransformer, VerticalLineTransfomer)"
					^ "input iterator" ~ "pixel transformer functor",
				/ DLD "implemented function templates %(FillPixel, \
					FillVerticalLine, FillRectRaw)" ^ "%ystdex::pseudo_iterator"
					~ "%PixelFiller";
				- "functors %PixelFiller",
				/ DLD "implemented function template %FillPixel"
					^ "%CopyLine<true>" ~ "SequenceTransformer";
				- "functor %SequenceTransformer"
				),
				(
				/ DLD "implemented function templates %TransformRect"
					^ "%Drawing::BlitPixels" ~ "%RectTransformer";
				- "functors %RectTransformer"
				),
				/ "explicitly specified non-ADL %TransformRect call"
					@ "%TransformRect#2",
				/ @ "%CopyLine<true>" $=
				(
					+ "assertion for dereferenceable iterator when size is not \
						zero" @ "%operator()",
						// As %SequenceTransformer::operator().
					+ "overloaded function template %operator() for instances \
						of %ystdex::pseudo_iterator" ^ "%std::fill_n"
				)
			);
		),
		/ %Helper.HostedUI $=
		(
			* "tips not hidden on drag leave" @ "function %BindTimedTips"
				$since b573,
			+ "function %AttachToHost" @ "platform !%Android"
				@ !"host platforms",
			- "last parameter to determinate whether detach from host window"
				@ "%PrepareTopLevelPopupMenu",
			/ @ "function %SetupTopLevelContextMenu" $=
			(
				(
				/ "always detached from window when the host window destroyed";
				- "last parameter to determinate whether detach from host \
					window"
				),
				/ "put 3rd and 4th parameter at front",
					// As same as %SetupTopLevelTimedTips.
				/ "implemented %SetupTopLevelContextMenu with slightly \
					different trace message for detaching from host window"
					@ "platform %Win32" ^ "%AttachToHost",
				/ "set detaching window callback after other operations \
					completed"
					// Thus the host window would not be touched after an \
						exception is thrown. Also to be same as \
						%SetupTopLevelTimedTips.
			),
			/ "function %SetupTimedTips" -> "function %SetupTopLevelTimedTips"
			* $comp "top level widget reserved when window destroyed" $since
				b573
				// For Win32, the window can be closed by Alt+F4 by default.
		),
		/ DLD "implemented throw expression in catch clauses" ^ "%CatchThrow"
			~ "%CatchExpr" $effective @ %(YSLib.(UI.Loader, Service.YGDI),
			Helper.HostRenderer, NPL.NPLA1, YCLib.FileSystem);
	),
	/ @ "class %ImageControl" %YDE.ImageBrowser $=
	(
		/ "zooming scales for %CursorWheel"
			-> "'1.201F' and its reciprocal" ~ ('1.2F', '0.8F'),
			// To get some smooth scaling ratios and precisely inversed \
				behavior when the wheel is rolled towards a different direction.
		* "wrong absolute error calculated for invalidating the context menu"
			@ "function %UpdateMenuItem#1" $since b580
	)
	/ @ "function template %pseudo_iterator" @ %YBase.YStandardEx.Iterator $=
	(
		/ "default argument" @ "2nd template parameter" -> 'const _type*'
			~ '_type*',
		+ "%operator* for non-const '*this'"
	)
),

b582
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "missing check %IsRelated before call of %ClearSelect"
					@ "member function %TextList::InvokeConfirmed"
					@ %ListControl $since b581;
				* $comp "selection cleared after submenu popped when no \
					%CursorOver event is handled subsequently",
					// Since %CursorOver event is triggered \
						platform-dependently, this may behave differently on \
						different platforms. Note that %TouchHeld for submenus \
						is not directly supported, but similar differences \
						exist for these platforms.
				/ @ "member function %GUIState::UpdateChar with parameter \
					'KeyInput&'" @ %YGUI $=
				(
					/ "key input no longer modified";
					+ 'const' @ "parameter type"
				),
				/ %TextBox $=
				(
					/ @ "class %TextBox" $=
					(
						* $comp "wrong key scanned in fast input"
							@ "class %TextBox" $dep_from
							("%GUIState::UpdateChar" @ %YGUI) $since b489,
							// See $2015-03 @ \
								%Documentation::Workflow::Annual2015.
						(
						+ "function %GetPenOffset";
						- "calculation of pen offset" @ "function \
							%UpdateTextBoxClippedText" ^ "%GetPenOffset",
						(
						/ "offset" @ "function %GetCaretLocation"
							^ "%GetPenOffset" ~ "%ptOffset",
						* $comp "caret position not updated properly after \
							font size changed" $since b516
							// For example, when using %TextPlaceholder.
						);
						- "protected data member %ptOffset"
						)
					),
					/ @ "constructor %Caret" $=
					(
						/ $forced "widget for animation" ^ "stored widget \
							reference" ~ "sender from event argument";
						* $comp "wrong widget used for %GotFocus handler when \
							the sender is not the widget being invalidated"
							$since b483 $dep_from %YFocus
							// This would lead to assertion failure when \
								%TextBox::InvalidateDefaultCaret is called.
					)
				),
				/ $re_ex(b486) %YFocus $=
				(
					/ "simplified cascaded focus releasing" $=
					(
						+ "releasing cascaded focuses with routed event \
							arguments before releasing direct focus"
							@ "function %ReleaseFocusFrom";
						/ DLDI "simplified"
							@ "function %DoRequestFocus" ^ "%ReleaseFocusFrom"
					),
					+ "requesting cascaded focuses with routed event arguments \
						after requesting direct focus"
						@ "function %RequestFocusFrom"
				)
			)
		)
		* "keyboard not response when cursor out of top level window and \
			cursor mapped to top level window" @ "platform %Win32" @ %Helper
			$since b571
			$= (* "missing search for foreground host window if the window \
				under cursor not found" @ "member function \
				%Environment::MapTopLevelWindowPoint" @ %Environment)
	),
	+ $re_ex(b578) 'using is_transparent = yimpl(void)'
		@ "specialized '<void>' functors" $effective @ %("plus, minus, \
		multiplies, devides, modulus, equal_to, not_equal_to, greater, less, \
		greater_equal, less_equal") @ %YBase.YStandardEx.Functinoal
		// See WG21 N3657. This 'void' implementation is occasionally equal to \
			that in libc++, and is also same with libstdc++ from the aspect of \
			being an incomplete type.
),

b581
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "functions %(IsEnabled, SetEnabledOf)" @ %YControl $=
				(
					- "try block and catch clause for %BadEvent",
					/ DLDI "simplified" ^ "macros %(PDefH, ImplExpr, ImplRet)"
				),
				/ @ "class %AMUnitList" @ %Viewer $=
				(
					/ "virtual function %GetItemHeight"
						-> "protected %GetItemHeightCore";
					+ "non-virtual function %GetItemHeight"
				),
				/ %ListControl $=
				(
					/ "overrider %MTextList::GetItemHeight" -> ("protected \
						%MTextList::GetItemHeightCore",
						"public 'using AMUnitList::GetItemHeight;'"
						@ "class %AMUnitControlList") $forced $dep_from
						(%"AMUnitList:GetItemHeightCore" @ %Viewer),
					(
					+ "enum %SelectionOption";
					+ "data member %SelectionOptions";
					+ "%CursorOver handler for hover selecting on non-bubble \
						event when %HoverSelect is set"
						@ "constructor %TextList",
						// Disabled menu item is still not allowed selected by \
							%TouchDown but allowed by %KeyDown. This is now \
							intended.
					+ "handlers for unit control and %TextList for event %Leave"
						$dep_from ("changed sender of event %Leave" @ %YGUI)
					),
					+ 'std::function<bool(IWidget&)> IsRelated{};'
				),
				/ @ "class %Menu" @ %Menu $=
				(
					+ "function %TryShowingSub",
					+ "selection on hover" $dep_from
						("%TextList::SelectionOptions" @ %ListControl) $=
					(
						+ "set 'SelectionOptions[SelectOnHover]'"
							@ "constructor",
						/ "set %Selected handler to show sub menu when \
							'SelectionOptions[SelectOnHover]' set"
					),
					+ "set ('SelectionOptions[ClearSelectionOnConfirm]', \
						'SelectionOptions[ClearSelectionOnLeave]')"
						@ "constructor",
					/ "set %IsRelated" @ "%Menu" $dep_from
						("%TextList::IsRelated" @ %ListControl)
				),
				/ "class %GUIState" @ %YGUI $=
				(
					/ "changed sender of event %Leave" @ "%CursorOver handler"
						@ "member function %Wrap",
						// Now the sender should be triggring the event and \
							the event position is relative to the subscriber. \
							So the old %Leave handlers should be rewritten to \
							take the right position coordinate.
					* "missing reset of entered top level pointer",
					(
					+ "data member %CursorOverLocation";
					/ "saved old %CursorLocation to %CursorOverLocation"
						@ "function %ResponseCursor",
					+ "function %IsCursorMoved"
					)
				)
				- "function %OnHover_SetRenderer" @ %Hover $dep_from
					%Helper.HostedUI
			),
			/ %Service $=
			(
				/ "last default argument" @ "class %ImagePages"
					@ %ImageProcessing -> '{}' ~ '0.F',
				+ "constructor with first 2 'float' parameters"
					@ "classes %(HS; HSL, HSV)" @ %YStyle
			)
		),
		* "missing declared alias %::LRESULT" @ "platform %Win64" @ %HostedGUI
			$since b564
			// This caused declaration of %::WNDPROC ill-formed.
	),
	/ @ "class template %fixed_point" @ %YBase.YStandardEx.Rational $=
	(
		+ DLD "'yimpl' for %enable_if_t parameters" @ "constructors",
		(
		+ 'explicit' @ "2 constructors with 1st floating pointer parameter"
			$dep_from %YFramework.YSLib.Service.ImageProcessing;
		* $comp "ambiguous overloadings for %operator(-, /) when first \
			parameter is of floating point and second is of %fixed_point \
			instance" $since b260
		),
		/ "user defined conversions" $=
		(
			* $re_ex(b276) "missing 'explicit' for conversions to integral \
				types" $since b276
				$= (/ "conversion operator template for arithmetic types"
					-> "2 conversion operator templates with 'explicit' only \
					for integral types"),
			+ 'ynothrow'
		),
		+ "'ynothrow' for friend functions %(fabs, ceil, floor, round)"
	),
	/ "handlers for event %Leave" $effective @ ((("class %Thumb" @ %Button, \
		"class %TreeList" @ %TreeView) @ %YSLib.UI, "function %BindTimedTips"
		@ %Helper.HostedUI)) @ %YFramework, "class %ShlExplorer"
		@ %YReader.ShlExplorer) $forced
		$dep_from "member function %GUIState::Wrap" @ %YGUI
),

b580
(
	/ %YBase $=
	(
		/ %LibDefect $=
		(
			+ %CStandardIO
				$= (+ "ISO C++ functions declarations from C99 %(snprintf, \
					vfscanf, vscanf, vsscanf)" @ "namespace %std"
					@ "using libstdc++ without C99 functions enabled");
			/ "declaration %vsnprintf" @ %String >> %StandardIO
			// Now platforms %(DS, Android) could use %std::snprintf, etc. See
				http://stackoverflow.com/questions/24477228/stdc-version-not-defined-in-c11 \
				for reason why C99 funtion declarations from newlib does not \
				work.
		)
	),
	/ %YFramework $=
	(
		/ $re_ex(b579) @ "time printing implementation" @ %Helper.ShellHelper $=
		(
			/ "simplified implementation" ^ "%std::snprintf" $dep_from
				%YBase.LibDefect.CStandardIO;
			* $comp "ignored size parameter" @ "platform %DS" $since b307
		),
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %GUIState" @ %YGUI $=
				(
					- DLD "redundant handled state check"
						@ "functions %(ResponseCursor, ResponseKey)",
					/ "better event handling for hit children"
						@ "function %ResponseCursor" $=
					(
						+ "%Direct event simulation",
						+ "%Bubble event handling"
					),
					* "set wrong sender after calling %TryLeave"
						@ "wrapped %TouchUp" @ "function %Wrap" $since b422,
						// This was expected to reset the sender, but actually \
							no-op. Since it was at last priority, the effect \
							was not obvious.
					/ "supported filtered enabled visual event"
						@ "%ResponseCursor" ^ $dep_from
						("%AController::IsEventEnabled" @ %YWidgetEvent)
						~ "%IsEnabled"
				),
				/ @ "member function %AMUnitControlList::SetUnit" @ %ListControl
					$=
				(
					/ "parameter type" -> 'unique_ptr<IWidget>'
						~ 'unique_ptr<IWidget>&&',
					/ "threw %std::invalid_argument for null pointer"
				),
				/ %YWidgetEvent $=
				(
					/ @ "enum %VisualEvent" $=
					(
						/ "explicitly specified underlying type %size_t",
						+ "enumerator %MaxEvent",
					)
					/ @ "class %AController" $=
					(
						/ DLD "implemented virtual member function \
							%AController::GetItemRef"
							^ "macro %(PDefH, ImplRet)",
						+ "virtual member functions %(IsEventEnabled, \
							SetEventEnabled)",
					),
					+ 'muable' @ "data member %WidgetEvent::Paint"
				),
				+ 'const' @ "virtual member functions %(GetItem, GetItemRef)"
					$effective @ ("classes %(AController, WidgetController)"
					@ %YWidgetEvent, "class %Controller" @ %YControl),
				/ "all function parameter 'const VisualEvent&'" -> 'VisualEvent'
					$effective @ (("member functions %(AController::GetItem, \
					AController::GetItemRef, WidgetController::GetItem)",
					"function template %DoEvent", "function %GetEvent")
					@ %YWidgetEvent, "member functions Controller::(GetItem, \
					GetItemRef)" @ %YControl),
				/ @ "class %Controller" @ %YControl $=
				(
					+ 'const'
						@ "virtual member functions %(GetItem, GetItemRef)",
					/ "access-specifier" @ "protected data member %EventMap"
						-> 'public',
					(
					+ DLD "event mask";
					+ "overrider %(IsEventEnalbed, SetEventEnabled)"
					)
				)
			),
			/ %Service $=
			(
				/ "class %ImagePages" @ %ImageProcessing $=
				(
					/ DLD "implemented default image brush" @ "constructor"
						^ 'Drawing::UpdateRotatedBrush<>'
						~ 'ImageBrush::UpdateComposite',
					+ "function %ZoomTo"
				),
				/ %YBrush $=
				(
					+ "function template %DispatchRotatedBrush",
					- $revert(b448) "static member function \
						%ImageBrush::UpdateComposite" $dep_from %ImageProcessing
				)
			)
		)
	),
	/ %YDE.ImageBrowser $=
	(
		* $comp "missing response for out-of-bounds host dragging" $effective
			@ $since b578 $dep_from "%Direct event simulation"
			@ "member function %GUIState::ResponseCursor" @ %YGUI;
		/ "class %ImagePanel" @ %ImageControl $=
		(
			* $lib "redundant image update for rotation" $since b578,
				// Unnecessary doubled operations led to performance digression.
			/ "simplified implementation" @ "function %UpdateBrush" ^ $dep_from
				("%DispatchRotatedBrush" @ %YFramework.YSLib.Service.YBrush),
			+ "menu item for recovering to original size"
		)
	),
	/ $dev $repo $re_add(b578) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%ywgtevent.cpp"
		=> "%YWidgetEvent.cpp") @ YFramework.YSLib.UI
),

b579
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service $=
			(
				/ "function %RotateCenter for 'const Size&'" @ %YResource
					>> %Core.YGDIBase;
				+ "2 functions %DispatchTranspose" @ %YBlit;
				+ "function templates %(UpdatePixelsWithRotation; \
					UpdateRotatedBrush)" @ %YBrush,
				/ %Service.ImageProcessing $dep_from %Core.YGDIBase $=
				(
					* $comp "wrong initial image scale calculated"
						@ "class %ImagePages" @ $since b555,
					/ "wrong scaled size when the any size component is too \
						large" $since b554 $=
					(
						* "wrong size caused by invalid mod arithmetic on \
							%ImageScale implementation when the size component \
							is too large" @ "function %Zoom";
						* @ "class %ImagePages"
					)
				)
			),
			/ %Core $=
			(
				/ "function template %CollectNodes with variadic parameters"
					@ %ValueNode ^ "list initialization"
					~ "%ystdex::seq_insert",
				* "wrong implementation" @ "function template %ScaleMin"
					@ %YGDIBase $since b555
				+ "log with level 'Informative'" @ "function %PostQuitMessage"
					@ %YApplication
			),
			/ "log level" @ "function %ParseRect" @ %UI.Loader -> 'Debug'
				~ 'Informative',
		),
		/ %YCLib.Debug $=
		(
			+ "cast to level type for 1st argument" @ "macro %YCL_Log",
			/ @ "class %Logger" $=
			(
				/ "default value initializing data member %FilterLevel"
					@ '!defined(NDEBUG)' -> 'Descriptions::Debug'
					~ 'Descriptions::Informative',
				+ "output thread id" @ 'YF_Multithread'
					@ "static function %DefaultSendLog"
			)
		),
		/ %Helper $=
		(
			/ @ "destructor %WindowThread" @ %Helper.HostRenderer $=
			(
				/ @ "log before closing window" $=
				(
					* $build "missing 'ystdex::' before 'pvoid'" @ "logging",
					/ "level" -> 'Debug' ~ 'Informative'
				),
				+ "log before joining thread with level 'Informative'",
				+ "log after joining thread with level 'Debug'"
			),
			/ "all log with level 'Notice'" -> "level 'Informative'" $effective
				@ ("member functions" \
				("%Window::UpdateCandidateWindowLocationUnlocked"
				@ %HostWindow, "WindowThread::WindowLoop" @ %HostRenderer)),
			/ %ShellHelper $=
			(
				* DLD "ignored size parameter" @ "time printing implementation"
					$since b307 @ !"platform %DS"
					$= (/ "implemented" ^ "%std::snprintf or %::snprintf"
						~ "%std::printf"),
						// No %std::snprintf is declared on platforms \
							%(Android, DS) that 'defined(__GLIBCXX__) && \
							!defined(_GLIBCXX_USE_C99)', this is a workaround. \
							No '%::snprintf' found on %DS.
				/ "log level of debug timer" -> '0xF0' ~ "Debug"
			),
			+ "log with level 'Debug' after leaving window thread"
				@ "member function %Environment::LeaveWindowThread"
				@ 'YF_Multithread' @ %Environment,
			/ "broke down lock granularity only on directly accessing queue"
				@ "member function %GUIApplication::DealMessage"
				@ %GUIApplication;
				// This allowed concurrently pushing messages to the queue \
					when a message is being processed, turning out slightly \
					better performance in multithreaded implementation. It \
					also allowed accessing queue in processing a message \
					(e.g. %SM_Task) to reduce potentionally deadlock (e.g. \
					'join()' for a thread performing %PostQuitMessage and thus \
					waiting). It would still cause undefined behavior to \
					remove a message being processed elsewhere, however now \
					there are multiple threads could to do so without being \
					checked.
			/ @ "%WM_DESTROY handler" @ "platform %Win32"
				@ "function %PrepareTopLevelPopupMenu" @ %HostedUI $=
			(
				* "non safety on accessing widget across threads" $dep_from
					%GUIApplication $since b575,
				+ "log with level 'Debug' before perform the operation"
			)
		),
		- "log filter level setting" @ '!defined(NDEBUG)' @ "function \
			%ANativeActivity_onCreate" @ %'Helper_(Android)'.AndroidHost
			// After modification of class %Logger, now all platforms are \
				the same: filter level 'Debug' as default in debug \
				configurations, otherwise 'Informative'.
	),
	/ %YDE.ImageBrowser.ImageControl $=
	(
		/ DLDI "simplified" @ $dep_from %YFramework.YSLib.Service.YBrush,
		* $comp "probable wrong initial image scale calculated when size \
			component is too large and scale enabled" $dep_from
			%YFramework.YSLib.Service.ImageProcessing $since b554,
		* "deadlock after directly closing window" $dep_from 575
			// For example, click "close window" on Windows task bar.
	),
	/ %Tools.Scripts $=
	(
		* "missing creating build directory" @ "SHBuild-YSLib-common.sh" $since
			b567,
			// This would not be a problem if 'build' directory is retained, \
				however currently it is not.
		/ "quoted path when changing directory $YSLib_BuildDir"
			@ ("%SHBuild-YSLib.sh", "%SHBuild-YSLib-debug.sh")
	),
	* $build "missing build directory" $since b478 $=
	(
		// This should fixes missing creating build directory for sysroot \
			build, also for Code::Blocks and makefile output. The former is \
			also resolved by the modification of scripts of current commit.
		* $repo "build directory ignored" @ "file '.hgignore'" $since b478
			$= ("glob pattern 'build/'" -> 'build/*/*/');
		+ "file %Readme.en-US.txt"
			// This file was created in time, but missed to commit and pushed.
	)
),

b578
(
	/ %YBase.YStandardEx $=
	(
		/ "functors %(plus, multiply)" @ %Functional -> "WG21 N4296 compliant \
			binary functors except for no %is_transparent support %(plus, \
			minus, multiplies, divides, modulus, equal_to, not_equal_to, \
			greater, less, greater_equal, less_equal)",
		/ @ %Algorithm $=
		(
			+ "2 function templates %(min, max)" @ "namespace %ystdex" $dep_from
				("%ystdex::less" @ %Functional),
				// They should be used as %std::(min, max) with 'constexpr' \
					in ISO C++14.
			* "strict ISO C++ code conformance" $since b532
				$= (* "missing including <functional>")
		),
		/ @ "function templates %unique_raw" %Memory $=
		(
			/ "merged pointer overloadings",
			+ 'ynothrow' @ "all overloadings"
		),
		/ %TypeOperation $=
		(
			+ "logical metafunctions %(and_, or_, not_)";
			/ "simplified inheritance of traits";
			* "wrong base class" @ "traits %is_lvalue_class_reference" $since
				b333
		)
	),
	/ %YFramework $=
	(
		/ @ %YSLib $=
		(
			/ ('using std::min;', 'using std::max;') @ '!__cplusplus >= 201402L'
				-> ('using ystdex::min;', 'using ystdex::max;') @ %Adaptor
				$dep_from
				("%ystdex::(min, max)" @ %YBase.YStandardEx.Algorithm),
			- DLD "all name qualification before %(min, max) for values of \
				types without ADL" $effective @ %UI.(YGUI, TextBox),
			/ %Service $=
			(
				/ %YBlit $=
				(
					/ DLDI "simplified function template %BlitScaleComponent"
						^ ("%max" $dep_from %Adaptor.YAdaptor)
						~ "%BlitScaleRestricted";
					- "function %BlitScaleRestricted",
				),
				+ "2 functions %RotateCenter" @ %YResource
			),
			/ @ %Core.YGDIBase $=
			(
				/ DLDI "simplified 'yconstfn' functions"
					^ ("%(min, max)" $dep_from %Adaptor.YAdaptor),
				+ 'ScaleMin' @ "function template %ScaleMin"
			),
			/ %UI $=
			(
				+ "virtual member function %AView::HitChildren" @ %YWidgetView;
				+ "support for non-YSLib widget hit test"
					@ "member function %GUIState::ResponseCursor" @ %YGUI
					// If non-YSLib widget detected, Call %(ClearFocusingOf, \
						RequestFocusCascade) on %TouchDown for container and \
						return.
			)
		),
		/ %Helper $=
		(
			+ "support non-YSLib widget hit test overrider \
				%ControlView::HitChildren" @ %Win32Control $dep_from
				%YSLib.UI.YWidgetView;
			* $comp "hit accepted even if there exist controls over tested \
				hosted widgets on non-root mode" @ "platform %Win32" $dep_from
				%YSLib.UI.YGUI $since b571,
			+ "log before closing window" @ "destructor %WindowThread"
				@ %Hostrenderer;
		)
	),
	+ "4 test cases for %ystdex::(min, max)" @ %Test.YBase $dep_from
		%YBase.YStandardEx.Algorithm,
	/ @ "class %ImagePanel" @ %YDE.ImageBrowser $=
	(
		/ DLD "extracted and reused routine to adjust close button",
		(
		+ "rotation state";
		+ "functions %(RotateCCW, RotateCW, Flip)";
		+ "3 menu items to support flip and rotation"
		)
	),
	/ $dev $repo $re_add(b577) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ (("%ygdibase.cpp"
		=> "%YGDIBase.cpp", "%ymsg.cpp" => "%YMessage.cpp")
		@ %Core, ("%ycontrol.cpp" => "%YControl.cpp") @ %UI,
		("%yres.h" => "%YResource.h") @ %Service) @ YFramework.YSLib
),

b577
(
	/ %YBase.YStandardEx.Iterator $=
	(
		/ "function template %operator== for class templates %(pair_iterator, \
			transposed_iterator, prototyped_iterator, subscriptive_iterator)"
			-> ("friend function" @ "class definitions"),
		- "function template %operator!= for %indirect_input_iterator",
		- "function %equals"
			@ "class template %(prototyped_iterator, subscriptive_iterator)"
		/ "function template %operator< for class template \
			%subscriptive_iterator" -> ("friend function" @ "class definition"),
		- "function %less" @ "class template %subscriptive_iterator",
		/ $design "all assertion about %is_undereference" ^ 'yassume'
			~ 'yconstraint'
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service.YBlit $=
			(
				* "strict ISO C++ code conformance"
					$= (* "out-of-bound pointer '+=' operations at end of loop \
						when source iterator instantiated by pointers"
						@ ("%operator()" @ "class template %BlitScannerLoop"
						$since b437, "%operator()#1" @ "class template \
						%RectTransformer" $since b451)),
				+ "yconstfn function %BlitScaleRestricted",
				/ @ "function template %BlitScaleComponent" $=
				(
					/ "merged specialization",
					/ "accepted source offset" ^ $dep_from
						"%BlitScaleRestricted",
					* $comp "wrong value for when parameter is negative"
						@ "function template specialization \
						%BlitScaleComponent<true>" $since b445
						// This would make a flaw between returned value for \
							negative values and zero of 1st parameter.
				),
				/ @ "function template %Blit" $=
				(
					/ DLD "optimized implementation to use less '+' operations \
						on iterators",
					* "wrong left/top source alignment for %(_bSwapLR, \
						_bSwapUD)" $orig (@ %Core.YGDI $since b189)
						// This cause source image shifted unexpectedly when \
							specified %(_bSwapLR, _bSwapUD) for partailly \
							invalidation. Actually this behavior can be \
							reasonale when the destination boundary is fixed \
							and only parts of image is intended to be filpped, \
							however this is not the original design.
				)
			),
			/ %Core $=
			(
				/ %YGDIBase $=
				(
					/ "wrong rotation" @ "functions %(RotateCCW, RotateCW)"
						$since b575,
					+ "function %MakeRect",
					+ "function templates %(TransposeCCW, TransposeCW) for \
						%GBinaryGroup"
					+ "functions %(TransposeCCW, TransposeCW) for %Rect",
					+ "%operator- for %GBinaryGroup<_type> and %Size",
					+ "function %Flip for %Rotation"
				),
				/ DLD "data members initialized" ^ "empty braced-init-list"
					~ "ctor-initializer" @ "class %Application" @ %YApplication
			)
		),
		/ @ "platform %Win32" $=
		(
			/ "returned invalid value immediately" ~ "throwing %Win32Exception"
				@ "member function %Environment::MapCursor" %Helper.Environment;
				// Note this function would be call frequently in a while, so \
					there is no log for failure.
			* $comp "unhandled %Win32Exception when cursor is not existed"
				$since b568
				// The message is "Access is denied" when recovered from \
					screensaver. Seems can also occur on pressing Ctrl+Alt+Del.
		)
	),
	/ $dev $repo $re_add(b573) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ (("%yblit.h"
		=> "%YBlit.h") @ %Service, ("%yapp.h" => "%YApplication.h", "%yapp.cpp"
		=> "%Label.YApplication") @ %Core) @ YFramework.YSLib
),

b576
(
	/ %YBase.YStandardEx $=
	(
		(
		+ %IteratorOperation;
		/ "metafunction %enable_for_iterator_t, function templates \
			%(next_if, next_if_eq, prev_if, prev_if_eq)"
			@ %Iterator >> %IteratorOperation
		)
		(
		+ %DereferenceOperation;
		/ "function templates %is_undereferenceable"
			@ %Iterator >> %DereferenceOperation
		),
		/ $lib @ "namespace %ystdex" @ %Operators $=
		(
			// See https://github.com/d-frey/operators/blob/master/include/df/operators.
			(
			/ "wrapped all implementation within namespace %operators_impl";
			+ 'using namespace operators_impl'
			);
			+ "move support for 2nd parameters"
				@ "binary operations other than comparing",
				// There are 2 differences with df.operatos. Unifying \
					initialization like unifying assignment is used so the \
					1st parameter is the (possibly non-reference) type. \
					The return types are always the same without '&&' \
					qualified, to coordinate with the standard library style.
			+ "noexcept exception specifications",
			/ "implemented function %operator->" @ "struct %dereferenceable"
				^ "%std::addressof" ~ '&',
			/ DLD "class-key for '_type2'" -> 'typename' ~ 'class',
				// This can be a non-class type, e.g. parameter of %operator[].
			/ @ "class templates %(dereferenceable, indexable)" $=
			(
				/ "return type of function specified by template paremter"
					~ 'auto',
					// To avoid some type inferring failure when directly \
						inherited. Now they are also compatible with \
						Boost.Operators.
				+ 'yconstfn' @ "member function"
			),
			+ "2nd template parameter for result of %operator*"
				@ "class templates %(input_iteratable, \
				forward_iteratable, bidirectional_iteratable, \
				random_access_iteratable)"
				// To meet the change of %dereferenceable. Note \
					%random_access_iteratable uses standard library iterator \
					categories which guarantee the return type of '+' is the \
					iterator type itself, so this parameter is omitted. Other \
					templates are now compatible with Boost.Operators.
		),
		* "strict ISO C++ code conformance" $since b532
			$= (* "missing including <iterator>" @ %Array),
		/ "simplified iterator interface" @ %Iterator ^ %Operators $=
		(
			+ "metafunction %iterator_operators_t";
			/ @ "class template %pointer_iterator" $=
			(
				/ "functions (postfix %operator(++, --), %operator(->, []))"
					-> "base class of %iterator_operators_t result";
				+ $comp "assertion implemented by %operator*" @ "%operator->"
			),
			- "function template %operator(+, -, !=) for %pointer_iterator",
			/ @ "class template %pseudo_iterator" $=
			(
				/ "functions (postfix %operator(++, --), %operator(->, []))"
					-> "base class of instance of %random_access_iteratable";
				* $comp "wrong result" @ "%operator->" $since b189,
				* $comp "wrong result" @ "%operator[]" $since b189
			),
			- "function template %operator(+, -, !=) for %pseudo_iterator",
			/ "function %operator[]" -> "base class of %iterator_operators_t \
				result" @ "class template %transformed_iterator",
			- "function template %operator(+, 2 -, !=, <=, >, >=) for \
				%transformed_iterator",
			/ "functions (postfix %operator(++, --), %operator(->, [], +, -))"
				-> "base class of %iterator_operators_t result"
				@ "class template %pair_iterator",
			- "function template %operator!= for %pseudo_iterator",
			/ "functions (postfix %operator++, %operator->)"
				-> "base class of %iterator_operators_t result"
				@ "class template %indirect_input_iterator",
			/ "functions (postfix %operator(++, --), %operator(->, []))"
				-> "base class of %iterator_operators_t result"
				@ "class template %transposed_iterator",
			- "function template %operator(+, -, !=, <=, >, >=) for \
				%transposed_iterator",
			/ @ "class template %prototyped_iterator" $=
			(
				/ "functions (postfix %operator(++, --), %operator(->, []))"
					-> "base class of %iterator_operators_t result",
				- "friend functions %operator(+, -)";
				- $comp "direct boundary check assertion"
					@ "called with function %operator([], +, -)"
			),
			- "function template %operator!= for %prototyped_iterator",
			/ @ "class template %subscriptive_iterator" $=
			(
				/ "functions (postfix %operator(++, --), %operator(->, []))"
					-> "base class of %iterator_operators_t result",
				- "friend functions %operator(+, -)";
				- $comp "direct boundary check assertion"
					@ "called with function %operator([], +, -)"
			),
			- "function template %operator(!=, <=, >, >=) for \
				%transposed_iterator"
		)
	),
	/ %YFramework $=
	(
		+ DLD '{}' @ "array initializer list" @ "function %BindTimedTips"
			@ %Helper.HostedUI,
			// To eliminate Clang++ warning: [-Wmissing-braces]. Note G++ now \
				does not complain it.
		/ "return type" -> 'ImageScale' ~ 'float'
			@ "member function %ImagePages::GetScale"
			@ %YSLib.Service.ImageProcessing,
	),
	/ DLD "simplified noexcept specifications" $effective
		(@ %YBase.YStandardEx.Utilities)
		$= (- "check of %YB_HAS_NOEXCEPT");
		// Since guarded by 'ynoexcept', no further check is needed.
),

b575
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI.Menu $=
			(
				* "menu host referenced menu on destruction" @ "class %MenuHost"
					$since b214 $=
				(
					// This was a design flaw since at first the menu host \
						should have ownership of menus and it would lead to \
						undefined behavior unless lifetime of all of the \
						hosted menus covered the lifetime of menu host, which \
						is simply wrong by design. Since it was stripped away \
						since b537, now no need to add destructor in %Menu.
					- "destructor";
					* $design $comp "nothrow requirements not guaranteed to be \
						safe in destruction" $since b214
				),
				+ "function %BindTopLevelPopupMenu",
			),
			/ %Core.YGDIBase $=
			(
				+ "functions %(RotateCW, RotateCCW)",
				/ "missing 'const'" @ "parameter"
					@ "function template %Transpose" $since b319,
				+ "'yconstfn' function %Transpose with parameter 'const Size&'"
			),
			+ "function template %UpdateTransposedPixels" @ %Service.YBrush
				^ $dep_from %("class template %transposed_iterator"
				@ %YBase.YStandardEx.Iterator,
				"function %Transpose" @ %Core.YGDIBase)
		),
		/ @ %Helper.HostedUI $=
		(
			/ "default extra window style parameter" @ "function template \
				%ActOnHover_ShowTopLevel" @ "platform %Win32"
				-> 'WS_EX_NOACTIVATE | WS_EX_LAYERED | WS_EX_TOPMOST'
				~ 'WS_EX_LAYERED | WS_EX_TOOLWINDOW',
			+ "functions %(PrepareTopLevelPopupMenu, SetupTopLevelContextMenu)"
				// Still only implemented for platform %Win32.
		)
	),
	/ %YDE.ImageBrowser $=
	(
		/ @ "class %ImageControl" @ %ImageControl $=
		(
			+ "protected data members %(mhMain, mnuContext)";
			+ "context menu item to exit",
			+ "function %SetupContextMenu"
		);
		/ "function %::main" @ %Main $=
		(
			- "exit on right button click",
			+ "showing context menu on right button click"
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Iterator $=
		(
			/ "functions %operator(+, -)"
				@ "class templates %(pointer_iterator, pseudo_iterator)"
				-> "non-member function templates",
			/ $dev $lib "simplified base type of %transformed_iterator",
				// There is no change since the condition has already been \
					held by static assertion.
			/ "functions %operator(+, -)"
				@ "class templates %(prototyped_iterator, subscriptive_iterator)"
				-> "friend functions",
			/ $design "assertion" @ "operator*" @ "class template \
				%subscriptive_iterator" ^ 'yconstraint' ~ 'yassume',
			+ "class template %transposed_iterator"
		),
		* "strict ISO C++11 compatibility about non-deduced context used in \
			parameter deduction" @ "function templates %range_size" @ %Container
			$since b546 $=
			// G++ 4.9.1 accepts it wrongly when the argument is of instance \
				of %std::initializer_list, while Clang++ 3.5.1 rejects it \
				correctly.
			(+ "overloaded function template with instances of \
				%std::initializer_list as parameter"),
		+ "metafunctions %(enable_if_convertible_t, \
			(is_interoperable; enable_if_interoperable))" @ %TypeOperation,
		+ "specialization for %std::function instances"
			@ "metafunction %(is_covariant, is_contravariant)" @ %Functional
	),
	+ $repo "glob pattern 'test/stdinc.h*'" @ "file '.hgignore'",
	/ %Test $=
	(
		/ @ "%test.sh" $=
		(
			* "missing link to %YBase.YStandardEx.CStandardIO" $since b564,
				// Unresolved reference to 'ystdex::vfmtlen'.
			(
			/ "applied configuration supports from \
				%Tools/Scripts/SHBuild-BuildApp.sh with parameters \
				'CXXFLAGS_OPT_UseAssert=true', 'SHBuild_Debug=debug', \
				'SHBuild_NoAdjustSubsystem=true'";
			+ $comp "out of directory %test build support",
			+ "precompiled file support"
				// If setting changed, the precompiled file should be delete \
					manually.
			)
		)
		/ %YBase $=
		(
			* "out-of-range access to one past end element of vector"
				@ "test check implementation" @ $since b549,
				// This is definitely undefined and libstdc++ would surely \
					complain about it when %_GLIBCXX_DEBUG is enabled.
			+ "test for %ystdex::transposed_iterator" @ $dep_from
				%YBase.YStandardEx.Iterator
		)
	),
	/ "simplified static conversation SFINAE check" ^ $dep_from
		("%enable_if_convertible_t" @ %YBase.YStandardEx.TypeOperation)
		~ "%(enable_if_t, is_convertible)" $effective
		@ %YBase.YStandardEx.(Functional, Iterator, Memory, Container)
),

b574
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ "handled events %(TouchDown, TouchHeld) only for \
					%RoutedEventArgs::Direct and %KeyCodes::Primary"
					@ "constructor %TextBox" @ %TextBox,
				/ DLD %YFocus $=
				(
					/ "simplified implementation" @ "function %DoRequestFocus"
						^ "while statement" ~ "do-while statement",
					/ "simplified implementation" @ "functions \
						%(RequestFocusCascade, ReleaseFocusCascade)"
						^ "for statement" ~ "do-while statement"
				),
				/ DLDI "simplified function %Invalidate#2" @ %YWidget
					^ "for statement" ~ "do-while statement",
				/ DLDI "simplified"
					@ "functions %(FetchTrace, LocateForTrace)"
					@ %YUIContainer ^ "for statement" ~ "do-while statement",
				/ %Menu $=
				(
					/ @ "class %Menu" $=
					(
						+ "brace-or-equal-initializer '{}'" @ "protected data \
							members %(pHost, pParent, mSubMenus)";
						* $comp "missing initialization"
							@ "protected data member %pHost" $since b214,
						- "Z order parameter" @ "functions %(Show, ShowSub)"
					),
					/ @ "class %MenuHost" $=
					(
						(
						+ "function %Add";
						/ "simplified %operator=" -> "inline function"
							^ "%(PDefHOp, ImplExpr, Add)"
						),
						- "all Z order parameters" @ "methods" $dep_from
							"%Menu::(Show, ShowSub)",
							// Z order would be determined on adding to the \
								host by %Add.
						(
						/ "menu added would be hidden" @ "function %operator+=",
						/ "made menu be shown or hidden" ^ "%UI::(Show, Hide)"
							~ "%Panel::operator(+=, -=)";
							// This means that visible state is used and the \
								user should not set it. The menu should have \
								been added to parent at user code before \
								attempting to show, otherwise it would not be \
								shown at all.
						/ $comp "menu would be always invalidated by call of \
							%UI::Show",
							// Whether the event handler of %GotFocus has call \
								of %Invalidate.
						/ "constructor with parameter %Panel"
							-> "explicitly defaulted default constructor",
						- "data member %Frame"
						)
					)
				),
				* "missing recursively requesting container focus" @ "event \
					%TouchDown" @ "class %DropDownList" @ %ComboList $since b283
					// So the menu would probably not hide.
			)
		),
		/ DLDI "simplified function %FetchCommandOutput"
			@ %Helper.Host ^ "for statement" ~ "do-while statement",
	),
	/ %YReader $=
	(
		/ DLDI "simplified" @ %DSReader ^ "for statement"
			~ "do-while statement",
		* "missing requesting focus" @ "event %TouchDown" @ "class %FrmAbout"
			@ %About $since b390,
			// So the menu would not hide.
		/ DLD @ ("class %ShlExplorer" @ %ShlExplorer,
			"class %ShlReader" @ %ShlReader) $=
		(
			+ "brace-or-equal-initializer '{}'"
				@ "default constructed data members";
			/ "simplified constructor implementation"
		),
		/ DLD "simplified menu list initialization" @ $effective
			@ %(ShlExplorer, ShlReader, ReaderSettingUI) %YReader
			^ "%make_shared" ~ "%share_raw"
	),
	+ "function template %make_unique with %std::initializer_list instance as \
		parameter" @ %YBase.YStandardEx.Memory
),

b573
(
	/ %YFramework $=
	(
		/ $dev @ "platform %Win32" @ %YCLib.NativeAPI $=
		(
			- "macro %NAME_MAX",
			/ "defined macro %S_IFIFO only when undefined"
				// To be compatible with MSys.
		),
		/ %YSLib $=
		(
			/ @ "class template %GEvent" @ %Core.YEvent $=
			(
				/ "alias %SizeType" => "%size_type",
				* "missing parameter" @ "function %count" $since b572,
				+ "aliases %(const_reference, reference, value_type)",
				(
				+ "alias %iterator";
				/ "simplified return type" @ "%(begin, end)",
				),
				(
				+ "aliases %reverse_iterator";
				+ "member functions %(rbegin, rend)"
				),
				(
				+ "alias %const_iterator";
				+ "member functions" @ "%(cbegin, cend)"
				),
				(
				+ "alias %const_reverse_iterator";
				+ "member functions" @ "%(crbegin, crend)"
				),
				/ "function %GetSize" >> "%size"
			),
			/ %UI $=
			(
				+ "function %LocateForTopOffset" @ %YUIContainer,
				/ @ "class %TimedHoverState" @ %Hover $=
				(
					+ $dev "brace-or-equal-initializer '{DefaultLocate}'"
						@ "%Locator",
					/ DLD "all 'Drawing::Point'" -> 'Point',
					/ "parameter" @ "function signature"
						@ "%(Locator, DefaultLocate)"
						-> 'const CursorEventArgs&' ~ 'const Point&',
					+ "static function %LocateForOffset"
				),
				/ %Label $=
				(
					+ "static member function %CalculateBounds"
						@ "class %Label",
					+ "functions %(MakeLabel, SetupContentsOf)"
				),
				/ "class name declaration 'class Window;'" -> 'class Panel;'
					@ "namespace %UI" @ %YComponent,
				/ @ "class %MenuHost" @ %Menu $=
				(
					/ "type" @ "data member %Frame" -> 'Panel&' ~ 'Window&',
					/ "parameter type" @ "constructor" -> 'Panel&' ~ 'Window&'
				)
			)
		),
		/ %Helper.HostedUI $=
		(
			+ "function %BindTimedTips" @ "hosted platforms !%Android",
			/ @ "function template %ActOnHover_ShowTopLevel" $=
			(
				+ "parameter 'int wstyle_ex = WS_EX_LAYERED | WS_EX_TOOLWINDOW";
				/ "extra style" ^ "parameter %wstyle_ex";
				/ $comp "shown without appearance in task bar"
			),
			/ "made defined" @ "hosted platforms !%Android"
				@ "function template %ActOnHover_ShowTopLevelAt",
				// However, only implemented for %Win32, others are with no-op.
			- $revert(b567) "functions %BindHoverControl",
			+ "function %SetupTimedTips"
		)
	),
	/ @ "class ImageControl" @ %YDE.ImageBrowser.ImageControl $=
	(
		+ "protected member 'Label lblCloseTips{};'";
		+ "tool tip for close button"
	),
	/ $dev $repo $re_add(b572) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%yuicont.cpp"
		=> "%YUIContainer.cpp", "%label.h" => "%Label.h", "%label.cpp"
		=> "%Label.cpp", "%menu.h" => "%Menu.h", "%menu.cpp" => "%Menu.cpp")
		@ YFramework.YSLib.UI
),

b572
(
	/ DLD "simplified YSLib dependent implementation" ^ 'to_string'
		~ 'std::to_string' @ %YFramework $effective @ %(Helper.(Environment,
		HostRenderer), NPL.NPLA1, YSLib.Core.ValueNode),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ @ "class %InputTimer" @ %YGUI $=
				(
					/ @ "function %ResetInput" $=
					(
						+ "parameter with default argument \
							'const Duration& = DefaultDuration'",
						/ $dev $lib "implemented as inlined function"
							^ "%(PDefH, ImplExpr)"
					),
					+ DLD 'const' @ "declaration"
						@ "static yconstexpr data member %DefaultDuration"
						// This should be OK after G++ 4.6.
				),
				/ "all event types" %(YWidgetEvent, YControl)
					^ "event member type %FuncType" ~ "%Event",
				+ "class %TimedHoverInfo" @ %Hover,
				* "missing renaming for %yfocus.h" @ %YModules $since b571
			),
			/ %Service $=
			(
				/ %YTimer $=
				(
					/ @ "class %HighResolutionClock" $=
					(
						/ $dev $lib "member type %time_point"
							^ 'std::chrono::nanoseconds' ~ 'duration',
							// The %time_point here is always signed.
						/ "member type %duration" ^ "signed type as %rep"
							~ "unsigned type as %std::chrono::nanoseconds"
					),
					/ @ "friend function %Activate for class %Timer" $=
					(
						- "zero interval check",
						/ $dev $lib "implemented as inlined function"
							^ "%(PDefH, ImplExpr)"
					)
				),
				/ %YGDI $=
				(
					/ @ "class %Padding" $=
					(
						(
						+ DLD "brace-or-equal-initializer ' = 0'"
							@ "all data members";
						/ DLD "simplified default constructor"
							^ "macro %DefDeCtor",
						),
						/ DLD "implemented function %operator+="
							^ "macros %(PDefHOp, ImplRet)",
						+ "function %operator(-=, *=)"
					),
					/ DLD "implemented 'yconstfn' function %operator+"
						^ "macros %(PDefHOp, ImplRet)",
					+ "'yconstfn' functions (unary and binary %operator-, \
						%operator*) for %Padding",
					+ "function %operator- for %Rect and %Padding"
				)
			),
			+ 'ynothrow' @ ("all 2 functions %operator-=, \
				function %ClearContainers" @ "class %FontCache", \
				"member function %FontFamily::operator-=)") @ %Adaptor.Font,
			/ %Core.YEvent $=
			(
				/ @ "class template %GEvent" $=
				(
					(
					+ "2 functions %Insert";
					/ DLD "simplified 2 functions %Add" ^ "%Insert",
					+ "2 function templates %Insert"
					),
					+ 'ynothrow' @ "function %clear",
					+ "2 functions %(begin, end)",
					+ "2 functions %(count, empty)",
					- "public data member %List"
				),
				- "macro %EventT" $dep_from %UI.(YWidgetEvent, YControl)
			)
		),
		/ $dev "all 'const Duration&' parameter" -> 'Duration'
			$effective %(YSLib.Service.YTimer, UI.YGUI),
			// See $2015-01 @ %Documentation::Workflow::Annual2015.
		/ $lib $design "simplified type of data member %Environment::MapPoint"
			@ "platform %Android" @ %Helper.Environment ^ $dep_from \
			("%ystdex::id_func_clr_t" @ %YBase.YStandardEx.Functional)
	),
	* "missing zero interval check on enabling automatic scrolling"
		@ "function %StartAutoScroll" $since b416 $orig (@ "function \
		%OnKeyDown" $since b405) @ "class %ShlReader" @ %YReader.ShlReader,
		// It would cause assertion failed when interval is set to zero after \
			enabling automatic scrolling.
	/ %YBase.YStandardEx $=
	(
		+ "meta operation templates %(sequence_join_n; sequence_join_n_t"
			@%Variadic;
		+ "meta operation specializations %sequence_join_n" @ %Tuple,
		/ %Functional $=
		(
			+ "meta operation templates %(make_function_type; \
				make_function_type_t)";
			+ "meta operation templates %(id_func_t; id_func_clr_t, \
				id_func_rr_t)" $dep_from %Tuple
		)
	),
	/ $dev $repo $re_add(b571) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ (("%ytimer.h"
		=> "%YTimer.h", "%ytimer.cpp" => "%YTimer.cpp") @ %Service, ("%ygui.h"
		=> "%YGUI.h", "%ygui.cpp" => "%YGUI.cpp", "%ycontrol.h"
		=> "%YControl.h", "%ywgtevt.h" => "%YWidgetEvent.h") @ %UI)
		@ YFramework.YSLib
),

b571
(
	* $dev "wrong DS extension file paths" @ "platform %MinGW32"
		@ "Microsoft VC++ project" $since b433,
	/ %YFramework $=
	(
		/ %Helper $=
		(
			+ "function %Wait" @ "class %HostRenderer" @ %HostRenderer;
			/ DLDI "simplified function %WaitForHostWindow"
				^ "%HostRenderer::Wait",
			/ @ "function %InputManager::Update" @ %InputManager $=
			(
				/ DLD "cursor mapping" !^ "window pointer argument",
				/ "record key state even if no foreground window found"
			),
			/ @ "class %Environment" @ %Environment $=
			(
				/ @ "platform %Win32" $=
				(
					+ "data member 'std::function<pair<Host::Window*, \
						Drawing::Point>(const Drawing::Point&)> MapPoint{};'",
					+ "function %MapTopLevelWindowPoint",
					+ "data member 'UI::Panel Desktop{};'"
				),
				/ "function %MapCursor" $=
				(
					- "parameter" $dep_from %InputManager,
					- $revert(b568) "host window pointer selected"
						@ "return type",
					/ "call %MapPoint if it is nonnull before returning"
						$dep_from "%MapPoint"
				),
				+ "root desktop support" $dep_from %Desktop
			),
			/ @ "class %HostRenderer" @ %HostRenderer $=
			(
				// Currently both widget view initialization and destruction \
					are implemented only for platform %Win32.
				+ "view initialization"
					// Set %Windows::UI::ControlView as view for platform \
						%Win32.
				+ "destructor",
				/ "supported resizing only for view of type %UI::View"
					@ "function %Update"
				(
				+ "data member 'bool RootMode{};'";
				+ "initialized %RootMode to true only if determined the view \
					is of the root widget"
					// Currently only %View detected.
				)
			),
			/ %HostedUI $=
			(
				- "set view location to origin" @ "function %ShowTopLevel"
					@ "platform %Win32",
				(
				/ @ "function %DragWindow" $=
				(
					/ "adjust host window bounds" @ "platform %Win32"
						^ "%Host::Window::(MoveClient, GetClientLocation)"
						~ "%Host::Window::(Move, GetLocation)",
					+ "3rd parameter 'bool = {}' to support switching root mode"
				);
				/ "bound root mode" @ "function %ShowTopLevelDraggable"
				)
			)
		),
		+ "initialization of %Environment::MapPoint"
			@ "constructor %DSApplication" @ "platform %Win32"
			@ %'Helper_(DS)'.DSMain $dep_from %Helper.Environment,
		/ %YSLib.UI $=
		(
			/ "data member %BorderResizer::HostMode" => "%RootMode" @ %Border,
			/ @ "function %DoRequestFocus" @ %YFocus $=
			(
				/ $design "unnecessary %IsFocused call function %DoRequestFocus"
					-> "assertion",
				/ DLD "removed unnecessary %DoReleaseFocus call when second \
					parameter is %true"
			),
			/ "swapped data members between new and old views before set view \
				pointer" @ "%Widget::SetView" @ %YWidget,
			+ "member function %AView::swap" @ %YWidgetView,
			/ "function %Caret::Check" @ %TextBox $=
			(
				* "false positive of assertion failure" $since b483
					$= (- "assertion for cascaded focus");
					// Because the indirect parent widget focus can not \
						detected efficiently and use of raw focus API should \
						not be forbidden, the assertion here is not appropriate.
				+ "call %Stop to stop caret when cascaded focus check failed"
			)
		)
	),
	/ @ %YDE.ImageBrowser $=
	(
		/ %ImageControl $=
		(
			/ "turned off border host mode" @ "constructor",
			+ "member function %ImageControl::SetRootMode" $dep_from
				%YFramework.YSLib.UI.Border
		);
		/ "set root mode according to host renderer state" @ %Main $dep_from
			%YFramework.Helper.HostRenderer
	),
	/ $dev $repo $re_add(b570) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%yfocus.h"
		=> "%yfocus.h", "%yfocus.cpp" => "%YFocus.cpp") @ YFramework.YSLib.UI
),

b570
(
	/ DLD "header inclusion" ^ 'YFM_DS_Helper_DSMain' ~ '<Helper/DSMain.h>'
		@ %YReader.DSReader,
	/ %YFramework $=
	(
		+ %Helper_(MinGW32) $=
			(+ %Win32Control $=
				(+ "classes %(ViewSignal; ControlView)")),
		/ %Helper $=
		(
			/ "member function %Window::GetHost" => "%GetEnvrionmentRef"
				@ %HostWindow,
			/ "member function 'Environment& GetEnvironment() ynothrow'"
				-> 'Environment& GetEnvironmentRef() const ynothrow'
				@ "class %GUIApplication" @ %GUIApplication,
			/ @ "function %ShowTopLevel" @ "platform %Win32" @ %HostedUI $=
			(
				/ "set widget location if and only if not %Point::Invalid",
				/ "set widget location for client area" ~ "host window",
				- $revert(b548) "last parameter"
			),
			/ DLD "implemented constructors %HostRenderer by private \
				delegating constructor" @ %HostRenderer
		),
		/ "platform %Win32" @ %YCLib.HostedGUI $=
		(
			(
			+ "member function %WindowReference::(MoveClient, SetBounds)";
			/ $design $comp
				"exception string for %SetWindowPos on move operations",
			+ ('using WindowReference::MoveClient;',
				'using WindowReference::SetBounds;') @ "class %HostWindow"
			),
			/ "no redrawing would be performed" @ "functions %(Resize, \
				ResizeClient, SetClientBounds)" @ "class %WindowReference"
		),
		/ %YSLib.UI $=
		(
			* "wrong offset used when the painted widget is not the child of \
				the widget which owns the buffered renderer"
				@ "member function %BufferedRenderer::Validate" @ %Renderer
				$since b278,
			- $re_ex(b406) '&&' @ "parameter"
				@ "member function %Widget::SetView" @ %YWidget,
				// See $2015-01 @ %Documentation::Workflow::Annual2015.
		)
	),
	/ $dev $repo $re_add(b569) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ ("%yrender.cpp" => "%YRenderer.cpp") @ YFramework.YSLib.UI;
),

b569
(
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ "virtual destructor" @ "class %Renderer" @ %Renderer
				-> "base class %ystdex::cloneable",
			(
			/ %YWidgetView $=
			(
				+ "abstract class %AView with base class %ystdex::cloneable",
				/ @ "class %View"
				(
					/ "all public data members" >> "class %AView",
					(
					+ "implemented base class %AView";
					/ "removed 'const &'" @ "return type"
						@ "functions %(GetLocation, GetSize) as overriders",
					+ "overrider %(GetBounds, SetBounds)",
					/ "functions %(SetX, SetY, SetWidth, SetHeight)"
						-> "overriders"
					),
					/ "functions %(GetLocation, GetSize, GetX, GetY, \
						GetHeight, GetWidget, SetLocation#2, SetSize#2)"
						>> "class %AView"
				),
				+ "functions %(SwapLocationOf, SwapSizeOf)"
			);
			/ %YWidget $=
			(
				/ @ "return type" @ "abstract method %GetView"
					@ "interface %IWidget" -> 'AView&' ~ 'View&',
				- 'const &' @ "return type"
					@ "functions %(GetLocationOf, GetSizeOf)",
				/ @ "class %Widget" $=
				(
					/ DLD "widget pointer type" -> 'unique_ptr<AView>'
						~ 'unique_ptr<View>',
					/ "return type" @ "member function %GetView" -> 'AView&'
						~ 'View&',
					/ "parameter type" @ "member function %SetView"
						-> 'unique_ptr<AView>&&' ~ 'unique_ptr<View>&&'
				)
			)
			)
		),
		/ @ "platform %Win32" @ %YCLib.HostedGUI $=
		(
			+ "function %IsVisible" @ "class %WindowReference";
			+ 'using WindowReference::IsVisible' @ "class %HostWindows"
		),
		/ @ "namespace %YSLib" @ %Helper.YGlobal $=
		(
			+ "namespace %Windows" @ "platforms %Win32",
			/ "namespace %MinGW32" -> "namespace %MinGW" @ "platforms %MinGW"
		)
	),
	/ %YBase.YStandardEx.Utilities $=
	(
		+ "class template %state_guard";
		/ "class template %swap_guard" -> "alias template"
	),
	/ $dev $repo $re_add(b568) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%ywidget.h"
		=> "%YWidget.h", "%ywidget.cpp" => "%YWidget.cpp", "%scroll.cpp"
		=> "%Scroll.cpp") @ %YSLib.UI, ("%yglobal.h" => "%YGlobal.h" @ %Helper)
		@ YFramework
),

b568
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			* "member function %InputManager::Update wrongly ignored key input"
				@ "platform %Android",
			/ @ "platform %Win32" @ %Helper $=
			(
				/ "member function %Environment::MapCursor" @ %Environment $=
				(
					/ "supported non active window when the parameter is null"
						!^ "%WindowReference::GetCursorLocation",
					+ "host window pointer selected" @ "return type"
				),
				/ "supported non active window" @ "%InputManager::Update"
					@ %InputManager
			)
		),
		/ @ "platform %Win32" @ %YCLib.HostedGUI $=
		(
			/ DLD "simplified Win32 API calls",
			/ "all Win32 exceptions now attached with called function names",
			* "missing failure check" @ "member function \
				%WindowReference::GetCursorLocation" $since b518
				// Now throw if Win32 API calls failed.
		),
		- "macros %(ImplBodyBase, ImplBodyMem)" %YBaseMacro,
		/ %YSLib $=
		(
			/ DLD "implemented member function %ValueHolder::operator=="
				@ %Core.YObject ^ "%macros %(PDefHOp, ImplRet)",
			/ %UI $=
			(
				/ %YWidgetView $=
				(
					/ @ "class %Visual" $=
					(
						/ "private data members"
							-> "public data member %(Visible, Bounds)",
						+ "explicitly defaulted constructor",
						- "default argument" @ "user-defined constructor",
						- "functions %(IsVisible, SetVisible, GetX, GetY, \
							GetWidth, GetHeight, GetLocation, GetSize, \
							GetLocationRef, GetSizeRef, SetX, SetY, SetWidth, \
							SetHeight, 2 SetLocation, 2 SetSize)"
					),
					/ DLD "implemented 2 %operator=" @ "class %View"
						^ "macros %(PDefHOp, ImpRet)"
				),
				/ $dev "simplified defaulted special member functions"
					^ "macro %DefDeCopyMoveCtorAssignment"
					~ "%(DefDeCopyCtor, DefDeMovector)"
					@ "classes %(Renderer, PseudoRenderer)" @ %YRenderer
			)
		)
	),
	/ $dev $repo $re_add(b567) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ ("%ystorage.hpp" => "%YStorage.hpp") @ YFramework.YSLib.Core
),

b567
(
	/ %YFramework $=
	(
		/ %YSLib.Core.YStorage $=
		(
			/ "function templates %(FetchStaticRef, FetchPrototype)"
				^ "storage from %parameterize_static_object#2 with empty \
				arguments as parameter pack",
			/ "class templates %GLocalStaticCache"
				^ "storage from %parameterize_static_object#1 with single \
				class type argument as parameter pack",
			/ $dev @ "class templates %(GStaticCache, GLocalStaticCache)" $=
			(
				/ $lib "private default constructor"
					-> "public explicitly deleted default constructor",
				+ "private base class %noncopyable",
				/ "return type" @ "static function" -> 'const PointerType&'
					~ 'PointerType'
					// To allow move-only type as pointer.
			),
			* DLD "redundant static member pointer object"
				@ "class %GLocalStaticCache" $orig (@ %Static $since b195)
		),
		/ %YCLib.Host $=
		(
			(
			* "missing 'const' on 1st parameter type"
				@ "function %FetchCommandOutput" $since b566,
			+ 'yconstexpr size_t DefaultCommandBufferSize(yimpl(4096));';
			/ "default argument" @ "function %FetchCommandOutput"
				^ "%DefaultCommandBufferSize",
			+ "alias %CommandCache; functions %(LockCommandCache, \
				(FetchCachedCommandResult; FetchCachedCommandString))";
			/ "cached terminal calls" @ "platform %Linux" @ %Host
				^ "%FetchCachedCommandString"
			),
			/ @ "class %Terminal" $=
			(
				/ "creating terminal data only when for TTY";
					// See $2015-01 @ %Documentation::Workflow::Annual2015.
				* $comp "escape sequence output even if underlying stream \
					redirected" @ !"platform %Win32" $since b560
			)
		),
		/ %Helper $=
		(
			/ @ "platform %Win32" @ %HostedUI $=
			(
				+ "function templates %(ActOnHover_ShowTopLevel; \
					ActOnHover_ShowTopLevelAt)";
				+ "2 functions BindHoverControl"
			),
			/ "member function %Environment::MapCursor accepte host window \
				pointer as argument with default null pointer argument"
				@ %Environment,
				// Ignored on platform %Android.
			/ "member function %InputManager::Update now would not return when \
				the window is not the foreground window and only process key \
				input when the window is foreground window"
				@ "all hosted platforms" @ InputManager
		)
	),
	/ %YBase.YStandardEx.Container $=
	(
		/ "function template %search_map with function object parameter \
			changed to pass iterator hint",
		+ "2 function templates %trail",
		* "swapped implementations"
			@ "function templates %(pop_back_val, pop_front_val)" @ $since b545
	),
	/ %Tools $=
	(
		/ "%FixUAC.manifest" >> %Data,
		/ @ "%install-sysroot.sh" $=
		(
			+ "install 'share' directory for runtime data";
			+ "%FixUAC.manifest to 'share' directory" $dep_from
				"%FixUAC.manifest";
			* "hard linked directly from 'Tools' directory and set execution \
				bit in installation" $since b565,
				// This is wrong, even if 'chmod +x' has no explicit impact on \
					Windows file system.
			/ "moved library build intermediate directories" -> "%build"
				~ "%Tools/SHBuild" $dep_from %Scripts
		),
		/ "moved library and self host build intermediate directories"
			-> "%build" ~ "%Tools/SHBuild" @ %Scripts $effective @
			"%(SHBuild-YSLib-common.sh, SHBuild-YSLib.sh, \
			SHBuild-YSLib-debug.sh, SHBuild-self-host.sh, \
			SHBuild-self-host-DLL.sh)",
		/ DLD "merged function %PrintUsage" -> "%::main" @ %SHBuild.Main
	),
	* $re_ex(b563) "non-canonical English use" @ "log" ^ 'began'
		~ 'beginned' $effective @ (%YReader.ShlExplorer $since b534,
		%YFramework.(Helper.(Environment $orig (@ %Host $since b381)),
		'Helper_(DS)'.DSMain $orig (@ %Helper.DSMain) $since b383)),
	/ $dev $repo $re_add(b566) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective
		@ ("%ystorage.hpp" => "%YStorage.hpp") @ YFramework.YSLib.Core
),

b566
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Debug $=
			(
				(
				+ "'ynothrow' guarantee" @ "function %LogWithSource";
					// Use calling of %ystdex::ytrace as fallback.
				/ "guaranteed nothrow from call of macro expansion %YCL_Trace"
				),
				(
				+ "function template %CheckIter";
				/ "function template %Deref" ^ "%CheckIter" ~ "%Nonnull"
				)
			),
			+ "trace for catching all exceptions" @ "destructor %WindowClass"
				@ "platform %Win32" @ %HostedGUI,
			(
			+ "function %upclose, 2 functions %upopen" @ %FileSystem;
			+ "function %FetchCommandOutput" @ %Host
			),
			/ "member function %ScreenBuffer::GetContext" @ "platforms \
				%(Android, ^XCB)" @ %HostGUI -> 'YSLib::Drawing::Graphics'
				~ 'const YSLib::Drawing::Graphics&'
		),
		/ @ "destructor %WindowThread" @ %Helper.HostRenderer $=
		(
			* $comp "probable terminated by throwing out of destructor with \
				nothrow exception-specification due to trace calls" $since b498
				$dep_from %YCLib.Debug,
			/ "stated destructor name"
				@ "trace string for catching all exceptions"
		),
		+ "trace for catch-clause" @ (("member function \
			%Win32Exception::FormatMessage" @ %MinGW32,
			"function %FetchDBCSOffset" @ %NLS) @ %'YCLib_(MinGW32)',
			"member function %FontCache::LoadTypefaces" @ %YSLib.Adaptor.Font),
		/ %YSLib $=
		(
			/ %Adaptor.YAdaptor $=
			(
				+ 'using platform::CheckIter;' $dep_from
					("%CheckIter" @ %YCLib.Debug),
				+ 'using platform::upclose', 'using platform::upopen' $dep_from
					%YCLib.FileSystem,

			),
			/ %Core $=
			(
				- DLD "including %YFunc" @ %YShell,
				/ %YGDIBase $=
				(
					/ "explicitly allowed pointer with ownership"
						@ "class template %GGraphics" $=
					(
						/ $dev "static assertion of nothrow copyable check on \
							pointer" -> "nothrow movable check",
						/ $dev "pixel type deduction" ^ '[0]' ~ "indirection",
						/ DLD "operation for pointer type parameter"
							@ "constructors" ^ "moving" ~ "copying"
						/ "return type" @ "function %GetBufferPtr"
							-> 'const PointerType&' ~ 'PointerType'
					),
					/ "return type" @ "abstract method %IImage::GetContext"
						-> 'Graphics' ~ 'const Graphics&' @ %YCLib.HostGUI
						// To allow returning temporary.
				)
			),
			/ "return type" @ "method %GetContext" @ "static interface \
				template %GTextRendererBase and all derived classes"
				@ %Service.TextRenderer -> 'Graphics' ~ 'const Graphics&',
			/ "return type" @ "member function %BufferedRenderer::Context"
				@ %UI.Renderer -> 'Graphics' ~ 'const Graphics&',
				// To allow returning temporary.
			/ %Service.YGDI $=
			(
				/ @ "class %CompactPixmap" $=
				(
					(
					- "base class %BasicImage",
					/ DLD "implemented" ^ "%GGraphics<unique_ptr<Pixel[]>>"
						$dep_from %YGDI;
					+ "implemented interface %IImage",
					/ "user-defined move constructor" -> "explicitly defaulted",
					- "destructor"
					),
					* "spelling error" @ "assertion string" @ "constructor"
						$since b419
				),
				/ @ "class %CompactPixmapEx" $=
				(
					(
					/ 'AlphaType* pBufferAlpha;'
						-> 'unique_ptr<AlphaType[]> pBufferAlpha;';
					/ "user-defined (default, move) constructor"
						-> "explicitly defaulted",
					- "destructor"
					),
					/ $re_ex(b476) "merged (copy, move) %operator= as unifying \
						%operator=" ^ "%macros %(PDefHOp, ImplRet)",
					/ DLD "implemented function %swap"
						^ "%macros %(PDefH, ImplExpr)",
					/ @ "assertion string" @ "constructor" $=
					(
						/ "differentiated alpha buffer and pixel buffer",
						* "spelling error" $since b419
					)
				)
			)
		)
	),
	/ $dev "%DrMemory-YSLib-suppress.txt" @ %Tools $=
	(
		// Now there are 4 kinds of errors in %YSTest. First kind is errors \
			concerned with message member in %std::system_error. It should be \
			safe according to the source of libstdc++. Second is similar \
			string usage. These 2 kinds of bugs may be due to inlining of \
			operator new to %malloc call, etc. Third is leaks from \
			libwinpthread, which is likely of some bugs. Fourth is possible \
			leak from %ystdex::any objects constructed with %holder_tag, which \
			is rechecked and should be safe.
		+ "1 case concerned with %std::operator+ for %std::basic_string",
		+ "1 case concerned with TLS storage read by %std::call_once",
			// Not in %YSTest. Not confirmed but should be false positive.
		/ "restricted some frames"
	),
	/ %YBase.YStandardEx $=
	(
		/ "return type" @ "function %get" @ "class template %nptr" @ %Utilities
			-> 'const pointer&' ~ 'pointer',
			// To allow wrapping move-only types e.g. std::unique_ptr<T>.
		/ %CStandardIO $=
		(
			+ "alias %unique_file_ptr",
			+ "inline function %setnbuf" @ %CStandardIO
		),
		+ "function template %search_map with inserter function object \
			parameter" @ %Container
	),
	/ $dev $repo $re_add(b565) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%yshell.h"
		=> "%YShell.h" @ Core, ("%ygdi.h" => "%YGDI.h", "%ygdi.cpp"
		=> "%YGDI.cpp") @ Service, "%yrender.h"=> "%yrenderer.h" @ %UI)
		@ %YFramework.YSLib
),

b565
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ @ "platform %Win32" @ %HostedGUI $=
			(
				* "strict ISO C++ compatibility" @ "constructor, destructor"
					@ "class %WindowRegionDeviceContext" $since b546,
					// To eliminate warning: [-Wstrict-aliasing] when \
						[-fstrict-aliasing] is used. This option is enabled \
						for release modes by default. Though not oberserved \
						strange behavior for now, it might be dangerous. Also \
						note the current change is not enough to fully avoid \
						the invalid aliased access, but it would be in the \
						Win32 API calls and the layout is always known, thus \
						there should be no portable problems.
				/ @ "class %WindowClass" $=
				(
					+ "functions %(GetInstanceHandle GetName, GetAtom)"
					* "missing noncopyable limitation" $orig
						(@ %'YCLib_(MinGW32)'.Win32GUI $since b432),
					/ @ "1st constructor" $=
					(
						+ "assertion for nonnull name parameter",
						+ "optional %::HINSTANCE parameter at end of parameter \
							list"
					),
					(
					+ "constructor with name, atom and instance handle parameters";
					+ "2 constructors with parameter %(::WNDCLASSW&, \
						::WNDCLASSEXW&)",
					+ "class name and atom trace" @ "constructor, destructor"
					),
					+ 'final',
					* "hard-coded window class name" @ "destructor" $since b432
						// It would probably crash if not %WindowClassName.
				),
				+ DLD "static assertion about aligned storage"
					@ "class %WindowRegionDeviceContext"
					^ "%ystdex::is_aligned_storable"
			),
			/ %XCB $=
			(
				/ "register for atoms limited to reference with %Connection on \
					construction",
					// Other native connections now would be ignored.
				* "crash when object of class %Connection destructed" $since
					b563
					// If static object is constructed in translation unit \
						other than %XCB, it would crash due to unspecified \
						order of destruction.
			),
			/ %FileSystem $=
			(
				/ "class %file_desc_deleter" => "%FileDescriptorDeleter",
				/ "class %file_desc" -> "%FileDescriptor" $=
				(
					+ "function %SetMode" @ "FileDescriptor"
					+ "constructor with parameter %std::FILE*"
				)
			),
			/ "macros" @ "platform %Win32" @ %NativeAPI $=
			(
				// To prevent possible redefinitions.
				/ "defined only when not defined previously %(S_IRWXG, \
					S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, \
					S_IXOTH)"
				/ "defined as non-zero values %(S_IRGRP, S_IWGRP, S_IXGRP, \
					S_IROTH, S_IWOTH, S_IXOTH)"
			),
			+ "function %FixConsoleHandler" @ %'YCLib_(MinGW32)'.MinGW32;
		),
		* "hard-coded buffer length per character"
			@ "function template %GetMBCSOf" @ %CharacterProcessing $since b305
			^ "%FetchMaxCharWidth",
		* "probable crash on console window close (or Ctrl+C handled, etc)"
			@ "platform %Win32" @ %Helper $since b299 $dep_from
			("function %FixConsoleHandler" @ %'YCLib_(MinGW32)'.MinGW32)
			// See $2015-01 @ %Documentation::Workflow::Annual2015.
	),
	/ %YBase.YStandardEx.String $=
	(
		+ "function templates %(extract; 2 extract_line, extract_line_cr)",
		+ "(2 inline functions, 1 function template) %to_wstring",
		+ "function template %cond_prefix"
	),
	/ %Tools $=
	(
		+ %RevisionPatcher
			$= (+ %Main),
		/ %Scripts $=
		(
			+ "%PatchRevision.sh" $dep_from %RevisionPatcher
				// Currently only patches exported by hg are tested.
			/ @ "%SHBuild-common.sh" $=
			(
				/ "function %SHBuild_Pushd accepted one argument for 'pushd'",
				+ "function %SHBuild_CheckedCallSilent"
					// As %SHBuild_CheckedCall, but with redirected stdout to \
						'/dev/null'.
			)
		),
		+ "building and installing %RevisionPatcher when variable \
			%SHBuild_NoDev is empty" ^ "stage 2 %SHBuild"
			@ "%install-sysroot.sh" $dep_from %PatchRevision,
		+ $dev "file %FixUAC.manifest as source to workaround UAC privilege \
			problem",
			// See $2015-01 @ %Documentation::Workflow::Annual2015.
		+ $dev "%DrMemory-YSLib-suppress.txt" @ %Tools,
			// Saved as ANSI/UTF-8 compatible encoding without BOM, because \
				DrMemory would reject BOM.
	),
	/ $repo @ "file '.hgignore'" $=
	(
		/ $re_ex(b564) "pattern 'Tools/SHBuild/stdinc.h.gch'"
			-> 'Tools/SHBuild/stdinc.h*'
			// To ignore %stdinc.h.
		+ "pattern 'bak.patch'"
			// To ignore revision patching backup file.
	),
	* $dev $design "location for %Documentation::Workflow::Annual2015"
		@ "filter of Microsoft VC++ project" $since b564,
	/ $dev $repo $re_add(b564) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%chrproc.h"
		=> "%Character.h" @ %YFramework.CHRLib)
),

b564
(
	/ $revert_ex(b363) ("about text" @ %About $orig (@ Shells)
		!^ "predefined macros %(__DATE__, __TIME__)") @ %YReader,
		// To eliminate unnecessary binary change. Also to eliminate warning: \
			[-Wdate-time], though this option is not enabled now by default.
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %XCB $=
			(
				* "used uninitialized value for connection reference"
					@ "constructor %WindowData#1" $since b563,
				(
				+ @ "underlying error category with messages for XCB \
					connection failure";
				/ "exceptions for connection error" ^ "new error category"
				),
				/ @ "underlying error category for XCB" $=
				(
					* "wrong nothrow exception-specification for message \
						generation"
						 $since b563,
						// Same reason as underlying error category as \
							%Win32Excetpion.
					+ "implemented message for error codes"
				),
				/ @ "constructors %XCBConnection" $=
				(
					/ $lib "simplified connection without authorization \
						information",
					+ "check error"
						// Now no further %IsOnError call is needed.
				),
				* "missing 'public'" @ "base class %Exception"
					@ "class %XCBException" $since b563,
				(
				+ "member function %ConnectionReference::(GetError, Check)";
				+ ('using ConnectionReference::GetError;',
					'using ConnectionReference::Check;') @ "class %Connection"
				)
			),
			/ @ "function %LogWithSource" @ %Debug $=
			(
				- $design "redundant direct nonnull assertion for format string"
					 @ %Debug,
					// Since it would be assert by %ystdex::vsfmt.
				/ $re_ex(b558) "allowed file parameter to be null and treated \
					null file parameter as unknown to avoid nonnull assertion \
					recursively call this function"
					// Like %ystdex::yassert and %platform_ex::LogAssert.
			),
			/ "alias-declarations %(BitmapPtr, ConstBitmap)" @ %Video
				>> %YSLib.Core.YGDIBase,
			/ %HostedGUI $=
			(
				* DD "wrong Doxygen command '\t'"
					@ "member function %WindowReference::Show"
					@ "platform %Win32" $since b548,
				/ @ "platforms ^%XCB" @ "constructor %HostWindow" $=
				(
					/ DLD "implemented invalid connection check"
						^ "%XCB::ConnectionReference::Check";
					/ "%platform_ex::Exception thrown on connection check"
						~ "%GeneralError",
					* $comp "wrong invalid connection check" $since b563
				)
			)
		),
		* "wrong nothrow exception-specification for message generation"
			@ "underlying error category" @ "class %Win32Exception"
			@ %'YCLib_(MinGW32)'.MinGW32 $since b545,
			// At least %std::bad_alloc should be allowed when failed \
				constructing a %std::string.
		/ %YSLib $=
		(
			- "using-declarations %(BitmapPtr, ConstBitmap)"
				@ %Adaptor.YAdaptor,
			+ DLD $build "workaround for G++ bug prior to 4.9.2"
				@ "defined %_GLIBCXX_DEBUG" @ %UI.TreeView,
				// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63500.
		),
		/ @ "platform %Win32" $effective @ %YCLib $=
		(
			/ $dev "all use of '::DWORD'" -> 'unsigned long',
				// FreeImage use of 'DWORD' untouched.
			/ $dev "removed all <Windows.h> dependency non platform extension \
				other than %YCLib.NativeAPI"
		)
	),
	/ %YBase $=
	(
		+ "2 function %vfmtlen" @ %CStandardIO,
		/ %String $=
		(
			/ @ "function template %vsfmt" $=
			(
				(
				/ $design "implemented" ^ $dep_from
					("ystdex::vfmtlen" @ %CStandardIO);
				+ $comp "indirection assertion for nonnull format argument",
				* "missing check failure" $since b488
					// If failed the length would be cast as a big integer, \
						which likely would eventually cause a %std::bad_alloc \
						being thrown.
				),
				* "missing %va_copy call" $since b488,
					// It would cause indeterminate %std::va_list object being \
						used after calculation buffer length, which led to \
						undefined behavior.
				* "wrong redundant %va_end call" $since b488,
					// This would cause undefined behavior no %va_arg matched \
						in the same function.
				+ $design "assertion for initialized string object"
			),
			* "missing $va_end call when exception thrown"
				@ "function template %sfmt" $since b488,
			/ DLD "matched result type for block scope objects"
				@ "function templates %(vsfmt, sfmt)"
		),
		/ %LibDefect.Exception $=
		(
			/ $dev "implemented for CXXABI_1.3 compatibility only when \
				defined(_GLIBCXX_EH_PTR_COMPAT) as header";
			- $impl "header include order requirement";
			/ $comp
				"allowed precompiled header with <exception> included at first"
		),
		+ %StandardInclusion
			// As precompiled header mostly and not used directly in the \
				libraries.
	),
	* $dev $build "missing project dependency on %YBase for %YFramework"
		@ "platform %Android" @ "Code::Blocks workspace" $since b497,
	/ %Tools $=
	(
		/ %Scripts $=
		(
			// Precompiled headers are generated for each configurations only \
				when not existed or not readable. Update should be implemented \
				in future.
			(
			+ "precompiled header path" @ "%SHBuild-bootstrap.sh";
			^ "G++ precompiled header support unless %SHBuild_NoPCH is not \
				empty" @ "%SHBuild-build.sh" $dep_from %YBase.StandardInclusion
			),
			(
			+ "precompiled header path" @ "%SHBuild-YSLib-common.sh";
			^ "G++ precompiled header support unless %SHBuild_NoPCH is not \
				empty" @ "%(SHBuild-YSLib.sh, SHBuild-YSLib.sh)" $dep_from
				%YBase.StandardInclusion
			),
			+ '-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC'
				@ "%CXXFLAGS_OPT_DBG for debug modes"
				@ "%(SHBuild-YSLib-debug.sh, SHBuild-BuildApp.sh, \
				Toolchain.options.mk)",
				// Now '-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC' should be \
					used in the build of debug executable for platforms other \
					than %DS, otherwise it would crash.
			/ "overridden %C_CXXFLAGS_OPT_DBG" !^ '-D_GLIBCXX_DEBUG \
				-D_GLIBCXX_DEBUG_PEDANTIC' @ "%Toolchain.DS.mk",
				// It was too slow even with '-D_GLIBCXX_DEBUG'.
			/ @ "%SHBuild-BuildApp.sh" $=
			(
				* "missing set default value of %SHBuild_YF_Libs_freetype to \
					'-lfreetype'" @ "platform %Win32" @ "%SHBuild-BuildApp.sh"
					$since b563,
					// This would cause FreeType2 not be linked, thus static \
						linking would fail.
				- $revert(b563) '-lxcb-image' @ "default value"
					@ "variable %SHBuild_YF_SystemLibs",
					// Unused.
				* "missing reverting '-Wl,dn' for static builds" $since b556
			),
			+ "function %SHBuild_BuildGCH" @ "%SHBuild-common.sh"
		),
		- $revert(b546) "'export COMSPEC=bash' to allow further use of \
			installation functions" @ "%install-sysroot.sh"
	),
	+ '-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC' @ "compiler flags"
		@ "platforms %(MinGW32, Android)" @ "Code::Blocks projects",
		// Note that for %Android it is not actually effective.
	+ $repo "pattern 'Tools/SHBuild/stdinc.h.gch'" @ "file '.hgignore'",
	/ $dev $repo $re_add(b563) "all edited file with module name not the same \
		as base file name" @ !%YBase ^ 'hg mv' $effective @ ("%yadaptor.h"
		=> "%YAdaptor.h" @ %YFramework.YSLib.Adaptor.YGDIBase)
),

b563
(
	/ $repo @ "file '.hgignore'" $=
	(
		+ "glob patterns ('*/.Debug*/', '*/.Release*/') for Microsoft VC++ default \
			output directories",
		+ "glob patterns ('*/.debug*/', '*/.release*/', '*/.static*/') for \
			%SHBuild-BuildApp configurations",
		+ "postfix '/'" @ "build configuration globs to avoid ignoring files",
		+ "glob pattern 'Tools/SHBuild/SHBuild*' for stage 1 %SHBuild",
		+ "glob pattern 'test/*.exe' for test",
		- "glob patterns '.map', '*.o', '*.d', '*.elf', '*.obj', '*.pdb', \
			'*.idb', '*.ilk', '*.exe'"
			// These files should be ignored by directory paths.
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ 'ynothrow' @ "function template %Nonnull" @ %Debug,
				// Operand of 'noexcept' has trouble with 'yconstfn', so no \
					change to %Deref.
			(
			+ "macros %(YCL_HostedUI, YCL_HostedUI_XCB; YCL_HostedUI)"
				@ %YCLib.Platform;
			+ "check for known platforms with hosted GUI" @ %HostedGUI,
			/ $dev "simplified conditional inclusion" ^ "%YCL_HostedUI",
				// Also reduce risk about missing updating implementations \
					when new hosted UI platform added.
			+ %XCB $=
			(
				+ "classes %((ConnectionReference; Connection), Atom, \
					(Drawable; WindowData, GContext)",
				+ "functions %(UpdatePixmapBuffer, LookupAtom)"
			);
			/ %HostedGUI $=
			(
				(
				+ "XCB support" $=
				(
					/ "alias-declaration %WindoeHandle" @ 'YF_Use_XCB'
						^ "%ystdex::nptr<XCB::WindowData*>";
					/ "class %WindowReference" @ 'YF_Use_XCB'
						^ "%XCB::WindowData",
					/ "extended interface for %Android" @ 'YF_Use_XCB'
				);
				+ "alias-declarations %(MessageID, MessageHandler)"
					@ "platforms %(^XCB, Win32)";
				/ "extended (alias-declaration %MessageMap; data member \
					%HostWindow::MessageMap)" @ "platform ^%XCB"
					^ "%(MessageID, MessageHandler)"
				),
				(
				+ "functions %(Hide, Show)" @ "class %WindowReference";
				+ 'using WindowReference::Show;' @ "class %HostWindow"
				),
				* "occasionally made class not meet %DefaultConstructible \
					requirement" @ "class %WindowReference" $since b560
					$= (+ "explicitly defaulted default constructor"),
				+ 'const XCB::Atom::NativeType WM_PROTOCOLS, WM_DELETE_WINDOW;'
					@ "class %HostWindow"
			)
			),
			* "assertion failed for root path due to wrong invariant on string \
				length" @ !"platforms %(Win32, DS)" @ "class %DirectorySession"
				@ %FileSystem $since b559,
			/ "merged enum %ExtendedSet" -> "enum %NativeSet"
				@ "platform %Linux" @ "namespace %KeyCodes" @ %Keys,
		),
		/ %Helper $=
		(
			/ %HostRenderer $=
			(
				+ "member function %HostRenderer::GetBufferRef",
				+ "XCB support" @ %HostRenderer $dep_from %YCLib.XCB $=
				(
					+ "support for update" @ "%XCB_EXPOSE" @ "platforms ^%XCB"
						@ "constructor %RenderWindow" $dep_from
						%YCLib.(Platform, XCB),
					/ @ "static function %HostLoop merged" -> "static function \
						%WindowLoop" @ "class %WindowThread" $=
					(
						* "non-canonical English use" @ "log" ^ 'began'
							~ 'beginned' $since b523,
						+ "implementation of event loop" @ "platforms ^%XCB"
							$dep_from %YCLib.(Platform, XCB);
					)
				)
			)
		),
		* DLB "freetype internals dependency when they are actually unused"
			@ %YSLib.Adaptor.Font $since b562,
		/ $build @ "Code::Blocks projects" $=
		(
			* $dev "freetype header paths" $since b459;
			* $comp $dev "wrong freetype header paths" @ "Code::Block projects"
				@ %YFramework $since b459
		),
		/ %'Helper_(Android)'.AndroidHost $=
		(
			+ "member function %ResizeScreenBuffer" @ "class %NativeHost",
			- $revert(b502) "function %FetchDefaultDesktop"
		)
	),
	/ %Tools $=
	(
		/ @ "%install-sysroot.sh" $=
		(
			+ "%INCLUDE_freetype with default value \
				'-I../../3rdparty/freetype/include'" @ "platform %Win32",
			+ "exported %INCLUDES_freetype",
			/ "3rd party header installation would skip when $SHBuild_No3rd is \
				not empty",
			/ "freetype headers and libraries would be installed only when \
				$INCLUDES_freetype is not empty",
			/ "determined package %freetype2 including directory"
				@ !"platform %Win32" ^ 'pkg-config --cflags-only-I'
			/ "supported installing %SHBuild executable without extension name"
				^ $dep_from ("%EXESFX" @ "%SHBuild-common-options.sh"
				@ %Scripts),
			/ DLD "simplified installation implementation and other functions",
			* "missing quoting library directory for '-L' on building stage 2 \
				%SHBuild" $since b546,
			/ "exported %LIBS" ^ $dep_from ("%LIBS_RPATH"
				@ "%SHBuild-common-options.sh" @ %Scripts),
			- $revert(b556) '-fno-lto -fwhole-program'
				@ "stage 2 %SHBuild build command"
				// This option might cause problems, e.g. crash on %Linux and \
					not recognized by Clang++.
		),
		/ %Scripts $=
		(
			+ '-lxcb-image' @ "front" @ "%SHBuild_YF_SystemLibs"
				@ "%(SHBuild-BuildApp.sh, SHBuild-YSLib-common.sh)",
			+ '$INCLUDES_freetype' @ "%INCLUDES" @ "%SHBuild-YSLib-common.sh",
			+ '-I../../3rdparty/freetype/include' @ "%INCLUDES"
				@ "%SHBuild-bootstrap.sh"
				// Not accurate but acceptable.
			/ @ "%SHBuild-BuildApp.sh" $=
			(
				/ "determined package %freetype2 cflags and libs"
					@ !"platform %Win32" ^ 'pkg-config',
				* "missing quoting library directory for '-L'" $since b549,
				/ "exported %LIBS" ^ $dep_from ("%LIBS_RPATH"
					@ "%SHBuild-common-options.sh" @ %Scripts),
				/ "disabled '-mwindows' to linker flag" @ !"platform %Win32"
			),
			/ @ "SHBuild-common.sh" $=
			(
				/ "concatenated operations by logical AND to guarantee first \
					operation successful" @ "functions %(SHBuild_Install_Exe, \
					SHBuild_Install_HardLink, SHBuild_Install_HardLink_Exe, \
					SHBuild_Install_Link)",
				/ "hid stderr output (i.e. command not found) of 'cygpath' call"
					@ "functions %(SHBuild_2u, SHBuild_2w)",
				/ DLDI "simplified functions %(SHBuild_Install, \
					SHBuild_InstallDir)" ^ "logical (AND, OR)",
				+ "variable %LIBS_RPATH with default value: \
					-Wl,-rpath,'\$ORIGIN:\$ORIGIN/../lib'" @ !"platform %Win32"
			),
			+ "variable %EXESFX with default variable '.exe'"
				@ "platform %Win32" @ "%SHBuild-common-options.sh",
			* $re_ex(b434) "wrong '-Wl,--dn' option" @ "debug dynamic libraries"
				@ "%SHBuild-YSLib.debug.sh" $since b429,

		),
		/ "normalized bash condition use" $=
		(
			/ DLD "all regex instances 'if \[ (.+) \]'" -> 'if [[ $1 ]]',
			/ DLD "eliminated prefix 'x' comparing for strings",
			^ "single quoting for some literal strings" ~ "double quoting",
			/ "allowed freetype static library to be not exist"
				// Thus ignored to be installed. It is specified to default \
					cases of %Linux, etc.
		),
		/ "ensured '.exe' extension for building mode 2" @ "all platforms"
			@ %SHBuild.Main
			// To avoid the output name being same as directory @ !platform
				%Win32.
	),
	/ $build "separated freetype including directory to allow optional other \
		header location" -> "%3rdparty/freetype/include" ~ "%3rdparty/include",
	/ "handling mouse keys" ^ "%(Secondary, Tertiary)"
		~ "Win32-specific macros %(VK_RBUTTON, VK_MBUTTON)" @ %YDE $effective
		@ %(ImageBrowser.(Main, ImageControl), Clock.Main),
	/ %YBase.YStandardEx $=
	(
		+ 'ynothrow' @ "function templates %pvoid for builtin pointers"
			@ %Cast,
		* "missing nothrow exception-specification"
			@ "function %swap for instances of %nptr" @ %Utilities $since b560
			$= (+ 'ynothrow')
			// This would case ill-formed defaulted move constructor for
				derived classes.
	),
	(
	* "wrong use of 'ynothrow' when construction of thrown exception can throw"
		$effective @ %YFramework.(YSLib.("member funtion %GGraphics::at"
		$since b559 $orig (@ "class %Graphics" @ %YObject $since b176)
		%Core.YGDI, Service.("all functions %EnsureDirectory" @ %FileSystem
		$since b476, "function %CopySliceFrom" @ %TextManager $since b397)
		"all member functions %MLinearUIContainer::at" @ %UI.YUIContainer $since
		b494), "function %TranslateTime#2" @ %Helper.ShellHelper $since b179,
		"static member function %JNIBase::EnsureDetachJNIAtThreadExit"
		@ %YCLib.JNI $since b553, "functions %(CheckHResult, EnsureNonNull),
		member functions and function templates %COMPtr::(As, Copy#2)"
		@ %'YCLib_(MinGW32)'.COM $since b412, "function %FetchNativeLooper"
		@ %'YCLib_(Android)'.Android $since b499)
		$= (- "'ythrow' exception-specification");
	* $comp "mismatched 'ythrow' exception-specification between definition \
		and non-definition declarations" @ "all functions %EnsureDirectory"
		@ %YFramework.YSLib.Service.FileSystem $since b476,
	/ $dev $repo $re_add(b561) "all edited file with module name not the same \
		as base file name" @ !(%YBase, %YFramework.YSBuild) ^ 'hg mv' $effective
		@ (((("%ygdibase.h" => "%YGDIBase.h" @ %Core.YGDIBase, ("%textmgr.h"
		=> "%TextManager.h", "%textmgr.cpp" => "%TextManager.cpp")
		@ %Service.TextManager, "%yuicont.h" => "%YUIContainer.h"
		@ %UI.YUIContainer) @ %YFramework.YSLib,
	)
),

b562
(
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			* "undefined behavior on passing command line arguments"
				@ "platform %Win32" $since b560,
			/ "building mode 2 now would only add .exe/.dll in platform \
				%Win32, otherwise would only add .so for DSO targets"
		),
		/ %Scripts $=
		(
			* "source file not found after renaming on file system with \
				case-sensitive name support" @ "%SHBuil-build.sh" @ %Scripts
				$since b560,
			* $re_ex(b559) "externally set %AR had no effect"
				@ ("SHBuild-YSLib-common.sh" $orig (@ "SHBuild-YSLib.sh"),
				"SHBuild-BuildApp.sh") $since b546,
				// Hard-coded 'gcc-ar'.
			/ @ "SHBuild-common-options.sh" $=
			(
				/ "default value" @ "%LDFLAGS_GC" ^ '-Wl,--dead-strip'
					~ '-Wl,--gc-sections' @ "'Darwin' in 'uname' output",
				(
				+ "variable %LDFLAGS_DYN_BASE with default value \
					'-shared -Wl,--dll' or '-shared' depending on 'uname' \
					result containing 'MINGW'/'MSYS' or not",
				+ "variable %LDFLAGS_DYN_EXTRA with default value";
				+ "variable %LDFLAGS_DYN with default value"
				),
				+ "variables %(LIBPFX, DSOSFX) with default values depending \
					on OS",
				/ "restricted check for %(C_CXXFLAGS_GC, LDFLAGS_GC) only when \
					%CXX is not empty"
			),
			/ @ "%(SHBuild-YSLib.sh, SHBuild-YSLib-debug.sh)" $=
			(
				/ "DLL building" ^ $dep_from "%LDFLAGS_DYN",
					// To simplify and to be precisely equal to Code::Block projects.
				+ DLB '$C_CXXFLAGS_PIC' @ "build command lines",
					// To support DSO.
				/ "system library" ^ "%SHBuild_YF_SystemLibs"
					~ "hard coded values",
				+ '-lxcb -lpthread' @ "%SHBuild_YF_SystemLibs"
					@ !"platform %Win32"
			),
			/ @ "%SHBuild-common.sh" $=
			(
				+ "variable %C_CXXFLAGS_PIC with default value '-fPIC'"
					@ "'uname' result without 'MINGW' or 'MSYS'",
				/ "quoted first default value" @ "%SHBuild_CMD",
				+ "functions %(SHBuild_AssertNonempty, SHBuild_CheckedCall, \
					SHBuild_InitReadonly; SHBuild_CheckUName)",
				+ $dev "early return as guard for scripts to be used by 'source' \
					or '.' command",
				+ 'exit 1' @ "handling signal %SIGINT"
			),
			+ "linked libraries support for non Windows systems"
				@ "%(SHBuild-YSLib-common.sh, SHBuild-BuildApp.sh)"
		),
		/ DLD "simplified all OS specific check" ^ "%SHBuild_CheckOS" ~ 'uname'
			$dep_from ("%SHBuild-common.sh" @ %Scripts),
		/ @ "%install-sysroot.sh" $=
		(
			+ "support for installing on UNIX-like targets",
			+ "variable %$SHBuild_Env_Arch" $dep_from
				("%SHBuild-common.sh" @ %Scripts);
			/ "3rd party library directory now would be determinate by \
				%(SHBuild_YSLib_Platform, $SHBuild_Env_Arch)";
			- "variable %YSLib_Arch"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			* "non-lowercase header file name of %YObject"
				@ %Core.YModules $since b561,
			/ %Adaptor $=
			(
				* "missing including <ext/malloc_allocator.h> for libstdc++ \
					used without G++" @ %YNew $since b561,
				/ %Font $=
				(
					+ "log for successful initialization of FreeType library \
						instance",
					/ $dev $lib "hid all integer types and enumerators as \
						implementation from FreeType",
					/ $dev $build $re_ex(b425) "restricted hack only when \
						'defined(FT_CONFIG_OPTION_OLD_INTERNALS)' to be \
						compatible with unmodified freetype packages which \
						version >= 2.5"
				)
			)
		),
		/ %Helper $=
		(
			/= $dev $lib "parameter %platform_ex::WindowReference"
				@ "constructor %RenderWindow" @ %HostRenderer
				-> "%Host::WindowReference",
			/ $dev "reduce some dependencies" @ %ShellHelper $=
			(
				/ $lib "parameter" @ "function %ResetDesktop" ^ 'UI::Desktop'
					~ 'Desktop',
				/ "function template %ScrDraw, function \
					%CreateSharedScreenImage" >> %'Helper_(DS)'.DSMain
			),
			/ DLD "simplified by including %ScreenBuffer" @ "header"
				@ %HostWindow,
			/ @ "member function %WindowReference::GetParent"
				@ "platform %Win32" @ %HostedGUI $=
			(
				/ "implemented throwing %ystdex::unimplemented";
				* $comp "infinite self recursive call" $since b538
			)
		),
		/ %YCLib $=
		(
			/ %MemoryMapping $=
			(
				- DLB "unsupported platform check",
				+ $lib $build "support for platforms %(Linux, 'OS X')"
					~ "platform %Android";
			),
			- DLB "unsupported platform check" @ %(Video, Timer),
			/ DLD "simplified implementation of %TLSKey" @ %POSIXThread,
				// To eliminate Clang++ warning: [-Wunused-private-field].
			/ %Keys $=
			(
				+ "actual key code support" @ "platform %Linux" $=
				(
					/ "value of %KeyBitsetWidth" -> '0x200' ~ '256',
					+ "enums %(NativeSet, ExtendedSet)" @ "namespace %KeyCodes",
					+ "implementation of key category"
				),
				+ DLD "static assertion for key category table size"
			),
			/ "%YF_API supported DSOs without '__declspec'" @ %Platform
		),
		/ DLD %'Helper_(DS)' $=
		(
			/ $impl "about DS window",
				// To eliminate Clang++ warning: [-Wunused-private-field] !@ \
					platform %Win32.
			/ "allowed build" @ 'YF_XCB' @ "DS screen"
		),
		/ $re_ex(b515) "conditionally compiling only for %Win32 target \
			allowing non-Win32 build environment" @ %'YCLib_(MinGW32)',
		/ DLB @ "Code::Blocks projects" @ "platform %MinGW32" $=
		(
			/ "library directory %lib" >> "%lib-i686"
				// To make it compatible to %Tools.Scripts.
			/ "improved compatibility" ^ '/' ~ "all backslashes" $effective
				@ "library paths"
		),
		/ %YBaseMacro $=
		(
			/ "macro %_yInterface" => "%YInterface",
			/ "macro %_yInterfaceHead" => "%YInterfaceHead"
		)

	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			+ "operator %(<, <=, >, >=) for %nptr based on %operator< for \
				underlying pointer" @ %Utilites,
			+ "libc++ support" @ %Concurrency $=
				(/ "allowed definition '(defined(_LIBCPP_VERSION) && \
					!defined(_LIBCPP_HAS_NO_THREADS)'"),
			/ %Container $=
			(
				/ DLD "implemented member function \
					%container_inserter::operator()" ^ "%yforward";
				/ $comp $build "unsupported G++ 4.7.1"
			),
			/ %Memory $=
			(
				+ "3 function templates %make_unique_with",
				+ "2 function templates %unique_raw for raw pointer and deleter"
			),
			+ "metafunction %common_nonvoid_t" @ %TypeOperation,
			/ %Array $=
			(
				* "missing including <ystdex/utility.hpp>" $since b532,
					// For 'decay_copy'.
				+ "metafunction %common_array_t" $dep_from %TypeOperation;
				/ "function templates %(make_array, forward_as_array)" $=
				(
					/ 'inline' -> 'yconstfn',
					/ "supported omitting first function parameter as \
						[WG21 N4315]"
						// However, %reference_wrapper stuff is not supported \
							to avoid some complexity.
				),
				+ "function template %cast_array"
					// Similar to %make_array but avoid some potential \
						narrowing conversions.
			)
		),
		/ "%YB_API supported DSOs without '__declspec'" @ %YDefinition
	),
	/ DLD "simplified comma separated linker options transferred by compiler \
		driver by using one common prefix (i.e. '-Wl,*')"
		@ "Code::Blocks projects" @ "platform %Win32" $effective %YFramework,
	+ "modified %Makefile.gnu to support i686/x86_64 builds" @ "FreeImage"
		@ "platform %Linux" @ "%3rdparty",
		// Only x86_64 is tested.
),

b561
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %YPixel $=
			(
				* "spelling error" @ %Service.FileSystem $since b540
					$= (/ "%NormalizeDirecoryPathTail"
						=> "%NormalizeDirectoryPathTail"),
				/ %Service.YPixel $=
				(
					- "alpha bit set" @ "function template %BlendCore",
					+ 'yconstfn' @ "function template %Blend for \
						%RGBA<5, 5, 5, 1>",
					+ "function templates %BlendAlpha",
					+ "overloaded function template %Composite optimized for \
						%RGBA<5, 5, 5, 1>",
					/ @ "struct %BlitAlphaPoint" $=
					(
						+ $dev "static assertion"
							@ "%operator() for 2 pixel parameters",
						/ "forbid ADL" @ "all %Blend calls" @ "%operator()#(1, 2)"
							^ "%Shaders::Blend",
						/ "support non 1-bit destination alpha types"
							^ $dep_from "function templates %BlendAlpha"
							~ "%Blend"
					),
					/ "simplified implementation" ^ "%ystdex::make_fixed_t"
						@ %YPixel $dep_from
						("%make_fixed_t" @ %YBase.YStandardEx.Rational),
					/ $forced $dev "simplified implementation" @ %YPixel
						!^ $dep_from ("%ystdex::normalized_max"
						@ %YBase.YStandardEx.Rational)
				),
				/ %YStyle $=
				(
					+ "class %HS";
					/ "struct %hsl_t, functions %(ColorToHSL, HSLToColor, \
						RollColor)" -> "class %HSL",
					+ "class %HSV"
				),
				/ DLD "implemented %ImageScale" ^ "%std::uint32_t"
					~ "%std::size_t"
					// To avoid request to 128-bit fixed-point arithmetic \
						operations which is not supported yet, when \
						%std::size_t is 64-bit
			),
			/ "condition for %MemoryListAllocator" -> 'defined(__GLIBCXX__)'
				~ 'YB_IMPL_GNUCPP' @ %Adaptor.YNew
				// Make better compatibility.
		),
		/ %YCLib $=
		(
			* "wrong assertion" @ "constructor %DirectorySession"
				@ !"platform %Win32" $since b560,
			/ 'inline' @ "function template %Deref" -> 'yconstfn' @ %Debug,
			/ @ "platform %Win32" @ %YCLib.HostedGUI $=
			(
				* "wrong 'ynothrow'" @ "member functions (2 \
					%WindowMemorySurface::UpdatePremultiplied, \
					%ScreenRegionBuffer::UpdatePremultipliedTo)" $orig
					(@ %'YCLib_(MinGW32)'.Win32GUI $since b435),
				/ DLD "implemented member function \
					%ScreenRegionBuffer::UpdatePremultipliedTo#2"
					^ "macros %(PDefH, ImplExpr)"
			),
			/ %Platform $=
			(
				(
				+ "platform %'OS X'" $=
				(
					+ "macros %YF_Platform_OS_X";
					+ "detected %Linux platform with predefined macro \
						%__APPLE__ and %__MACH__",
					+ "#error when defined %__APPLE__ but not %__MACH__"
						// Apple platforms other than OS X is not supported
				);
				(
				+ "conditionally defined macro %YCL_OS_X for \
					%YF_Platform_OS_X",
				+ "%'OS X' features macro definitions"
				)
				),
				+ "macro %YF_Use_XCB if undefined for %Linux platform"
			),
			- DLB "unsupported platform check" @ %YCommon,
			+ "allowed platform %Linux to be built" @ $effective,
				%(Keys, Video, FileSystem) $dep_from ("platform %'OS X'"
				@ %Platform)
				// To allow build only, not necessarily implemented correctly.
			- "macros %(YCL_YCOMMON_H, YSL_YSBUILD_H)" @ %NativeAPI,
				// They were unused long ago.
			/ %FileSystem $=
			(
				/ @ "class %HDirectory" $=
				(
					/ "%operator bool" -> "member functions" ^ "%DefBoolNeg";
					+ $comp "operator!"
				),
				+ "friend function %is_undereferenceable for %HDirectory"
					// Necessary after the bug of \
						%ystdex::indirect_input_iterator fixed.
			)
		),
		/ %Helper $=
		(
			* "wrongly set %UseOpacity for non layered window"
				@ "platform %Win32" @ "function %ShowTopLevel" @ %HostedUI
				$since b560,
		),
		/ "simplified or added assertion" ^ "%Deref" ~ '*static_cast' $effective
			@ %YFramework.('Helper_(Android)'.AndroidHost,
			'YCLib_(Android)'.Android, %YSLib.(Core.YObject, Adaptor.Image)),
		/ "conditionally include only when '(!YCL_Linux || YCL_Android) \
			&& !YCL_OS_X' is met for hosted GUI" @ %YSBuild,
			// Make it convenient to build stage 1 SHBuild on those platforms \
				without hosted GUI implemented yet.
		* "uninitialized value returned by member functions %(GetErrorCode, \
			operator ErrorCode)" @ "class %Win32Exception"
			@ %'YCLib_(MinGW32)'.MinGW32 $since b545
	),
	* "%C_CXXFLAGS not applied for makefiles" @ "%(CFLAGS, CXXFLAGS)"
		@ "projects %(YFramework, YSTest)" @ "platform %Android" $since b558,
		// Misspelled as 'C_CXXFLAGS_ARM9' which is empty for platform \
			%Android. This made many arguments unused. Some like '-NDEBUG' \
			effect the binary size significantly.
	/ %YBase.YStandardEx $=
	(
		/ %Rational $=
		(
			+ "alias template %make_fixed_t" @ %Rational,
			- $revert(b439) "class template %normalized_max" @ %Rational,
				// It is somewhat misleading.
			- "specialization of %is_normailzable for %bool" @ %Rational
		),
		/ DLD "preprocessing condition" ^ 'defined(__GLIBCXX__)'
			~ "raw '__GLIBCXX__'" @ %Concurrency,
			// Just for uniformly using.
		* "strict ISO C++ code conformance" $since b525
			$= (* "missing including <memory>" @ %Utilities),
		* "missing rebinding allocator type for \
			%used_list_cache::(used_list_type, used_cache_type)" @ %Cache $since
			b521 $orig ("%GMRUCache::(UseList, UseCache)"
			@ %YFramework.YSLib.Core.Cache $since b461),
			// G++ accepted but Clang++ in OS X would complain.
		* "%operator bool for %indirect_input_iterator" @ %Iterator $since b412,
		+ "class template %free_delete with non-defined specialization for \
			arrays as template parameter type" @ %Memory
	),
	+ %YDE.Clock,
	/ %Tools $=
	(
		/ %Scripts $=
		(
			+ '-pthread' @ "default value" @ "%CXXFLAGS_IMPL_COMMON"
				@ "'Darwin' in 'uname' output" @ "SHBuild-common-options.sh",
			/ @ "SHBuild-common-options.sh" $=
			(
				+ "detection to ensure non empty $CXX at beginning",
				(
				+ "variables %(CXXFLAGS_GC, LDFLAGS_GC) with default value \
					'-fdata-sections -ffunction-sections' and \
					'-Wl,--gc-sections' respectively";
				+ "test to set to empty for %(CXXFLAGS_GC, LDFLAGS_GC) if not \
					successfully compiled by $CXX to support toolchain without \
					these options (e.g. on OS X)" @ !"platform %Win32"
					// Windows has limitation, see \
						http://sourceforge.net/p/msys2/discussion/general/thread/2d6adff2/?limit=25.
				/ "applied $(CXXFLAGS_GC, LDFLAGS_GC) for default value of variables \
					$(C_CXXFLAGS_COMMON, LDFLAGS_OPT_DBG)"
				)
			)
		),
		/ "all command call with variable as command name now are quoted",
			// To allow blank characters in it, though not a good practice and \
				not necessarily providing the guarantee to success.
		- DLD "all unnecessary curly braces around variable names" $=
			// E.g: "${CXX}" to "$CXX". See \
				http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html \
				2.6.2 for rules.
			(/ "283 regex instances of '\$\{(\w+)\}([^0-9A-Za-z])' -> '$$$1$2' \
				including 106 matches with '$2' is '/'"),
	),
	/ $dev $repo $re_add(b560) "all edited file with module name not the same \
		as base file name" @ !(%YBase, %YFramework.YSBuild) ^ 'hg mv' $effective
		@ (((("%yobject.h" => "%YObject.h" @ %Core.YObject, (("%ystyle.h"
		=> "%YStyle.h", "%ystyle.cpp" => "%YStyle.cpp") @ %YStyle),
		"%button.cpp" => "%Button.cpp" @ %Button) @ %UI, "%ynew.h" => "%YNew.h"
		@ %Adaptor) @ %YSLib), "%ycommon.h" => "%YCommon.h" @ %YCLib.YCommon)
		@ %YFramework
),

b560
(
	/ %YFramework $=
	(
		/ @ "namespace %platform_ex" @ !"platform %Android" @ "hosted platforms"
			@ %YCLib.Host $=
		(
			(
			+ "class name declaration %TerminalData";
			+ "class %Terminal";
				// It calls 'tput' to support colored output for non-Windows \
					platforms currently. This requires no extra libraries to \
					be linked, but may have poor performance and does not work \
					well if error occurred.
			+ $comp "log with level %Informative on console creating failure"
				// This is expected when the console is unavailable, i.e. for \
					a redirected stream.
			),
			+ "function templates %(EncodeArg, DecodeArg) with overloading \
				functions only in platform %Win32"
		),
		+ "macros %(DefDeCopyMoveCtor, DefDeCopyMoveAssignment; \
			DefDeCopyMoveCtorAssignment)" @ %YBaseMacro,
		/ %YSLib.Core $=
		(
			/ DLD "implemented inline member functions %operator()" @ %YFunc
				^ "macros %(PDefHOp, ImplRet)",
			- $revert(b196) 'using Exception = std::exception;' @ %YException,

		),
		/ %YCLib $=
		(
			* "missing move %operator=" @ "class %AndroidLogSender"
				@ "platform %Android" @ %YCLib.Debug $since b498 ^ $dep_from \
				("macro %DefDeCopyMoveCtorAssignment" @ %YBaseMacro),
			/ %FileSystem $=
			(
				/ @ "platform !Win32" $=
				(
					+ "protected member %sDirPath" @ "class %DirectorySession";
					* "unsupported or wrong result when 'DT_*' unusable" $since
						b543,
						// Since it is an BSD extension, not all POSIX \
							platforms support it. Even on a platform with it \
							and the build is successful, it still can turn out \
							wrong result in runtime, e.g. ReiserFS on Linux. \
							See also https://github.com/ggreer/the_silver_searcher/issues/36.
					+ "resolving link target" @ !"platforms %(DS, Win32)"
						@ "member function %HDirectory::GetNodeCategory"
						// %DS has no %::lstat.
				),
				+ "nonnull assertion"
					@ "member function %HDirectory::GetNodeCategory" ^ "%Deref",
				+ 'ynothrow' @ "move constructor %DirectorySession"
			),
			/ $dev "ensured macros %(S_IFMT, S_IFDIR, S_IFCHR, S_IFREG, \
				S_IREAD, S_IWRITE, S_IEXEC) defined properly if not previously \
				defined" @ "platform %Win32" @ %NativeAPI
		),
		/ DLD "simplified constructors" ^ $dep_from ("macro \
			%DefDeCopyMoveCtorAssignment" @ %YBaseMacro) $effective @
			%('YCLib_(MinGW32)'.Win32GUI, 'YCLib_(Android)'.Android,
			NPL.(Configuration, Lexical, SContext), YSLib.(Adaptor.Image,
			Core.(YEvent, YFunc)))
		- DLB "unsupported platform check"
			@ %('Helper_(DS)'.DSMain, Helper.HostedUI),
		/ %Helper $=
		(
			/ $design "initialization macros" %Initialization $=
			(
				/ "simplified platform %Win32"
				+ "default initialization macros" @ "platform %Linux"
			),
			/ "set %Opacity data member as %true for window when extra window \
				style has %WS_EX_LAYERED enabled" @ "platform %Win32"
				@ "function %ShowTopLevel" @ %HostedUI
				// Also has effect on %ShowTopLevelDraggable
		),
		(
		/ "class %WindowReference"
			@ %(YCLib_(MinGW32).Win32GUI, YCLib_(Android).Android) $=
		(
			(
			/ "simplified construction by inherited %nptr<NativeWindowHandle>";
			/ "protected data member %hWindow"
				-> "protected 'using nptr::get_ref;'"
			),
			(
			+ "explicitly defaulted (copy, move) %operator=";
			* $comp "missing move %operator=" $since b492
			)
		);
		/ %'YCLib_(MinGW32)'.Win32GUI -> YCLib.HostedGUI
			$= (/ "all declaration" @ "inline namespace %Windows"
				>> "enclosing namespace %platform_ex" @ "platform %Win32");
		/ "merged classes %(WindowReference, ScreenBuffer, ScreenRegionBuffer, \
			HostWindow)" @ %'YCLib_(Android)'.Android
			>> ("platform %Android" @ YCLib.HostedGUI);
		+ $comp ("member function %WindowReference::GetNaiveHandle";
			'using WindowReference::GetNativeHandle' @ "class %HostWindow")
			@ "platform %Android"
		)
	),
	/ @ %Tools.SHBuild.Main $=
	(
		+ "platform %Linux support"
			$= (/ "implemented terminal output" ^ "%Terminal" ~ "%WConsole"),
		/ "simplified platform-neutral implementation" ^ $deps_from
			("%platform_ex::(EncodeArg, DecodeArg)" @ %YFramework.YCLib.Host)
			~ "%platform_ex::MBCSToMBCS",
		/ "output file timestamp optimized to be fetched only once for \
			comparing",
			// Given the assumption of output file keeping modified during \
				building, it is more efficient.
		* "directory with other file system category not recognized as \
			directory" $since b541 $dep_from %YFramework.YCLib.FileSystem
	),
	/ %YBase.YStandardEx $=
	(
		/ @ %Utilities $=
		(
			+ 'yconstfn' @ "function templates %(decay_copy, decay_forward)",
			+ "class template %nptr"
		),
		+ 'yconstfn' @ "2 function templates %unref" @ %Functional
	),
	/ %YReader.ReadingList $=
	(
		/ DLD "implemented inline functions %operator==" @ %ReadingList
			^ "macros %(PDefHOp, ImplRet)",
		/ @ "class %ReadingList" $=
		(
			/ DLD "simplified class %ReadingList" ^ "base class %nonmovable"
				~ "explicitly deleted move constructor",
			/ "Doxygen comments" @ "using-declaration %ReadingList::Switch"
			(
				- "redundant comment"
				* "wrong comment on parameter" $since b404
			)
		)
	),
	/ %YDE.ImageBrowser $=
	(
		/ @ "class %ImagePanel" @ %ImageControl $=
		(
			/ "parameter 'const wstring&'" @ "function %Load"
				-> 'const ImagePages&&',
			+ "function template %Load"
		),
		/ DLD "simplified main function" %Main @ $dep_from
			%YFramework.Helper.HostedUI;
	),
	/ $dev $repo "all edited file with module name not the same as base \
		file name" @ !%YBase ^ 'hg rename' $effectieve ("%main.cpp"
		=> "%Main.cpp" @ %(Tools.SHBuild, YDE.ImageBrowser).Main, ("%yevt.hpp"
		=> "%YEvent.hpp" @ %YEvent, "%yfunc.hpp" => "%YFunc.hpp" @ %YFunc,
		"%yexcept.h" => "%YException.h" @ %YException) @ %YFramework.YSLib.Core)
),

b559
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ DLDI ^ '{}' ~ '0' @ "constructor %MappedFile" @ %MemoryMapping,
				// To eliminate warning: [-Wzero-as-null-pointer-constant].
			/ "%PixelType" @ "namespace %platform" => "%Pixel" @ %Video,
			/ %Platform $=
			(
				+ "platform %Linux" $=
				(
					+ "macros %(YF_Platform_Linux_x86, YF_Platform_Linux_x64)";
						// Only i686 and x86_64 are supported.
					+ "detected %Linux platform with predefined macro \
						%__linux__",
					(
					+ "conditionally defined macro %YCL_Linux when detected \
						%__linux__";
					+ "%Linux features macro definitions"
					)
				),
				- "redundant %YF_Multithread definition" @ "platform %DS"
			),
			+ "allowed platform %Linux to be built" @ $effective
				%(YCommon, Keys) $dep_from ("platform %Linux" @ %Platform),
				// To allow build only, not necessarily implemented correctly.
			/ %FileSystem $=
			(
				/ "all 'YCL_Android'" -> 'YCL_Linux' $dep_from
					("platform %Linux" @ %Platform),
				+ "explicitly assertion for nonnull parameter"
					@ "functions %GetRootNameLength" ^ "%Nonnull",
				/ @ "function %IsAbsolute for 'const char*'" $=
				(
					/ @ !"platform %Win32" $=
					(
						+ "assertion for nonnull parameter" ^ "%Deref",
						- "null check",
							// Since behavior for null parameter has been \
								undefined.
					),
					/ $dev $lib "implemented" @ "platform %Win32"
						!^ "%::PathIsRelative" $dep_to "getting off Shlwapi"
				),
				+ "function %IsAbsolute for 'const char16_t*'"
			)
		),
		/ %'Helper_(Android)'.AndroidHost $=
		(
			/ DLDI ^ 'nullptr' ~ '{}' @ "member function \
				%NativeHost::ClearSavedStateHandler",
			- $dev $lib "region buffer" @ "Android screen buffer" $dep_from
				%'YCLib_(Android)'.Android
		),
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %YGDIBase $=
				(
					/ "class %Graphics" -> "class template %GGraphics";
					+ "alias-declaration %(ConstGraphics, Graphics)";
					- $comp "static member object %Graphics::Invalid",
					+ $comp "member types %Graphics::(PointerType, SizeType, \
						PixelType)"
				),
				+ 'using Graphics = Drawing::Graphics;' @ "class %GraphicDevice"
					@ %YDevice
			),
			/ %Service $=
			(
				/ DLD "implemented inline functions"
					"%(GetHorizontalOf, GetVerticalOf, Clip, 2 CopyTo, BlitTo)"
					@ %YGDI ^ "macros %(PDefH, ImplRet)",
				* "non-absolute path as result for absolute path when root \
					name length is zero" @ "member function %Path::Parse"
					@ %FileSystem $since b409
					// Most notably, all UNIX absolute paths are broken.
			),
			/ "source parameter type %Graphics" @ "all functions"
				-> "%ConstGraphics" $effective @ %Service.(YGDI, YBlit)
				$dep_from %Core.YGDIBase,
			* "non-lowercase header file name of %(YAdaptor, YNew)"
				@ %Adaptor.YModules $since b462
		),
		/ "namespace %Android" @ %'YCLib_(Android)'.Android $=
		(
			+ "function %UpdateContentTo";
			/ DLDI "simplified member function %ScreenRegionBuffer::UpdateTo"
				^ "%UpdateContentTo"
				// Actually it locked a little more content than before, but \
					can be ignored.
		),
		+ DLB "included %YCLib.Host" @ %Helper.YGlobal,
		/ @ "class %WConsole" @ %'YCLib_(MinGW32)' $=
		(
			+ "constructor for %::HANDLE",
			- "function %GetStandardHandle"
		),
		(
		+ "macros %(DefNeg; DefBoolNeg)" @ %YBaseMacro;
		/ $dev $lib "simplified member function %operator! with negative \
			result of %operator bool" ^ "macros %DefBoolNeg" $effective
			@ %(YSLib.(Adaptor.Image, Core.(ValueNode, YGDIBase, YMessage, \
			YObject), Service.File), 'YCLib_(MinGW32)'.MinGW32)
		)
	),
	/ %Tools $=
	(
		* "externally set %AR had no effect" @ ("SHBuild-bootstrap.sh"
			@ %Scripts $since b542, "install-sysroot.sh" $orig (@ %Scripts
			$since b546)),
			// Hard-coded 'gcc-ar'.
		/ %Scripts $=
		(
			/ @ "%SHBuild-common.sh" $=
			(
				+ "function %SHBuild_EchoEscape to support printing ANSI \
					escape sequence only in terminal";
				* "ANSI color sequence printed out of terminal",
					@ "function %SHBuild_EchoVar" $since b546
					// $TERM is still not checked.
				/ DLD "implemented functions %(SHBuild_Pushd, SHBuild_Popd)"
					^ '2&> 1',
				/ DLD "reserved all spaces between words of redirection"
					// But not redir-op and prefix decimal number denoting \
						file descriptor.
			),
			* "non-lowercase source file name of %YFramework.YCLib.YCommon"
				@ "%SHBuild-bootstrap.sh" $since b540,
			- $dep_from "getting off Shlwapi" '-lShlwapi' @ "%LIBS" $effective
				@ ("SHBuild-bootstrap.sh", "SHBuild-YSLib.sh",
				"SHBuild-YSLib-debug.sh", "SHBuild-BuildApp.sh"),
			/ @ "SHBuild-bootstrap.sh" $=
			(
				/ "added %'YCLib_(MinGW32)' item" @ "%LIBS only when \
					detected 'MINGW' or 'MSYS' in 'uname' output",
				- "workaround '-fno-lto' for path encoding" @ "CXXFLAGS",
					// No need to workaround here. Set $TMP in build \
						environment is preferred. The output binary size by \
						default is also significantly smaller (193 KiB vs. 853 \
						KiB).
				- '-Wl,--dn' @ "LDFLAGS",
					// This does not work on all platforms (e.g. -lgcc_s \
						failed on Linux) and may lead to other problems. \
						Passing arguments form build environment is preferred.
			),
			/ @ "SHBuild-common-options.sh" $=
			(
				/ @ "default value" @ "variable %CXXFLAGS_IMPL_COMMON"
				(
					* "calling G++ failed when no '-mthreads' support" $since
						b540,
					+ '-pthread' @ "'Linux' in 'uname' output"
						// Otherwise the thread call would fail in runtime in \
							Linux.
				),
				/ "disabled %LDFLAGS_IMPL_OPT default value for Clang++",
					// Since currently there is no simple stable interface to \
						automatically call ld.gold, usually the linking would \
						fail.
				/ "default value" @ "%LDFLAGS_OPT_DBG" ^ "%LDFLAGS_IMPL_OPT"
			)
		),
		/ "merged 'msys/make' into necessary installing group"
			@ "%msys2-pacman-update.sh"
			// Otherwise 'g++ -flto' could fail.
	),
	/ %YBase.StandardEx $=
	(
		* "no definition" @ "libstdc++ used without G++ (e.g. in Clang++) or \
			even if %__STDCPP_THREADS__ defined" @ %Concurrency $since b520,
		(
		/ %Container $=
		(
			+ "2 function %get_container" @ "class template %container_adaptor";
			+ 'using base::get_container;'
				@ "class template %sequence_container_adaptor"
		);
		+ 'using base::get_container;' @ "class template %path" @ %Path
		)
	),
	- 'ShlWapi' @ "libraries" @ "platform %Win32" @ "Code::Blocks projects"
		$dep_from "getting off Shlwapi"
),

b558
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ @ "class %ImagePages" @ %YSLib.Service.ImageProcessing $=
			(
				- $revert(b557) "functions %(GetFrameTime, IsAnimated); \
					animating metadata loading",
					// It is difficult to control the frame time and other \
						miscellaneous properties here.
				+ "function %GetBitmaps",
				* $comp "possibly wrong scale value used"
					@ "function %ZoomByRatio" @ %ImageProcessing $since b555
					$dep_from %YBase.YStandardEx.Rational
			),
			/ "1st parameter" @ "function %Zoom" -> 'float' ~ 's16'
				@ %Service.ImageProcessing,
			/ DLD "all integer types names with pattern 'u*', 's*'"
				-> "types from <cstdint>" $effective @ %(Adaptor.(Font, Image),
				Core.(YEvent, YMessage, YCounter, YCoreUtilities), Service.(
				CharRenderer, YPixel, TextBase, TextRenderer, TextLayout, YGDI,
				TextFile, YDraw), UI.(YStyle, YUIContainer, YUIContainer));
			- "alias-declarations %(u8, u16, u32, u64, s8, s16, s32, s64, vu8, \
				vu16, vu32, vu64, vs8, vs16, vs32, vs64)" @ "namespace %YSLib"
				@ %Adaptor.YAdaptor $dep_from %(Helper, 'Helper_(DS)', YReader),
			/ %Core.YDevice $=
			(
				/ @ "class %GraphicDevice" $=
				(
					+ "virtual function %SetSize",
					- "%(GetBufferPtr, GetSizeOfBuffer, GetContext)"
					/ "first 2 parameter" -> 'const Drawing::Size&'
						~ 'SDst, SDst' @ "constructor"
				),
				/ @ "class %Screen" $=
				(
					+ "overrider %SetSize throwing %ystdex::unsupported"
						$dep_from "%GraphicDevice::SetSize"
					/ @ "function %Update" $=
					(
						+ "assertion" ^ "%Nonnull",
						/ "parameter type" -> 'Drawing::ConstBitmapPtr'
							~ 'Drawing::BitmapPtr'
					),
					- "virtual function %GetCheckedBufferPtr"
					- "constructor for 2 components of %Drawing::Size"
				)
			),
			/ %UI $=
			(
				/ "simplified assertion" @ "functions %(MoveToRight, \
					MoveToBottom)" ^ "%Deref" @ %YUIContainer,
				- "member function %Desktop::GetBackgroundPtr" @ %YDesktop;
			)
		),
		/ %YCLib $=
		(
			/ %Debug @ "debug configurations" $=
			(
				* $comp "macro %YAssert not overriden to call \
					%platform::LogAssert" @ "platform %Android" @ $since b548
					$dep_from ("macro %YAssert" @ %YBase.YStandardEx.CAssert),
				(
				+ "function template %AccessRecord" @ "class %Logger",
				/ "function %LogAssert extended to all platforms implemented"
					^ "%ystdex::yassert"
					@ 'YB_Use_YAssert && YF_Multithread == 1';
				* $comp "probable interleaved assertion output with common log"
					$since b498,
					// No further guarantee for other loggers.
				+ "message box for %LogAssert before further call to \
					%ystdex::yassert" @ "platform %Win32"
				)
			),
			/ DLDI ^ '{}' ~ '0' @ "platform %DS" @ %Video
				// To eliminate warning: [-Wzero-as-null-pointer-constant].
		),
		/ DLD "all integer types names with pattern 'u*', 's*'"
			-> "types from <cstdint>" $effective
			@ %Helper.(ShellHelper, Environment), %'Helper_(DS)'.DSMain,
		/ DLD "explicitly allowed buffer size passed"
			@ "Android screen buffer implementation" @ %'Helper_(Android)',
		/ "parameter type" -> "%Drawing::ConstBitmapPtr" ~ "%Drawing::BitmapPtr"
			@ ("member function %HostRenderer::Update" @ %Helper.HostedUI,
			"member function %Window::UpdateFrom" @ %Helper.HostWindow,
			"member functions %((ScreenBuffer, \
			ScreenRegionBuffer)::UpdateFrom, ScreenBuffer::Premultiply)"
			@ %('YCLib_(MinGW32)'.Win32GUI, 'YCLib_(Android)'.Android))
	),
	/ @ "membef function %ImagePanel::Load" @ %YDE.ImageBrowser.ImageControl $=
	(
		+ "animating metadata loading",
		* "crash when zero frame time loaded for animation" $since b557;
		* $comp $build "failed to build" $since b557
	),
	/ %YBase.YStandardEx $=
	(
		/ %CAssert $=
		(
			* "strict ISO C/C++ code conformance" $since b432 $orig
				(@ "function %platform::yassert" @ %YFramework.YCLib.YCommon
				$since b175),
				// To avoid undefined behavior.
				$= (/ "explicitly used string literal when received null \
					pointer value argument" @ "function %yassert"),
			/ "defined macros %(YAssert, YAssertNonnull, YTrace) only when \
				undefined",
			* "<cassert> not excluded by header guard" $since b548,
				// This would cause multiple inclusion ignoring %NDBUG.
			/ $dev "made functions %(yassert, ytrace) only declared when \
				macros %(YB_Use_YAssert, YB_Use_YTrace) respectively"
				// These functions are not defined in this case. This makes \
					it easier to detect wrong use of macros.
		),
		/ %Rational $=
		(
			+ "2 std::common_type specializations for %ystdex::fixed_point \
				instances and other types";
			/ @ "binary operations on %ystdex::fixed_point" $=
			(
				(
				+ "overloadings for one of parameter as floating point types";
				* $comp "wrong result of instances and floating types" $since
					b260 $dep_from "%common_type specializations"
				),
				* $dev $lib "asymmetric parameter types" $since b439
			),
			/ DLDI "simplified" ^ "more macros"
		),
		/ "constructor template" -> "inheriting constructor"
			@ "classes %(unsupported, unimplemented)" @ %Exception,
	),
	/ DLD "all integer types names with pattern 'u*', 's*'"
		-> "types from <cstdint>" $effective @ %YReader.(DSReader,
		ReaderSettingUI, HexBrowser, ShlExplorer),
	/ %Tools $=
	(
		/ @ "%msys2-pacman-update.sh" $=
		(
			- "'set -e' to allow skipping and continuing",
			- 'mingw32/mingw-w64-i686-make' @ "command line",
			/ "made 'msys/make' as installed in separate group for non-hosted \
				platforms"
		),
		* "echo for stage 1 %SHBuild path" @ "%install-sysroot.sh" $since b546,
		* $re_ex(b541) "missing quoting source file path" @ %SHBuild.Main $since
			b474
		/ @ "%SHBuild-common-options.sh" $=
		(
			(
			+ "variable %C_CXXFLAGS_COMMON with default value";
			+ "variables %(CFLAGS_STD, CFLAGS_COMMON, CFLAGS) with default \
				values",
			/ "simplified %CXXFLAGS_COMMON" ^ "%C_CXXFLAGS_COMMON"
			),
			(
			+ "variable %C_CXXFLAGS_OPT_LV with default value '-O3'";
			/ '-O3' @ "default value" -> '${CXXFLAGS_OPT_DBG}'
			),
			+ "variable %LDFLAGS_IMPL_OPT depending on compiler driver",
				// Note that '-flto=jobserver' cause warning on linker command \
					line of G++, so raw '-flto' should be used instead.
			/ "made all variables depending on compiler driver assigned only \
				when empty",
				// To allow being overridden.
			(
			+ "variable %LDFLAGS_OPT_DBG with default value";
			/ "default value" @ "%LDFLAGS" ^ "%LDFLAGS_OPT_DBG"
			),
			+ "variable %ASFLAGS_OPT_DBG with default value"
		),
		+ "%Toolchain.options.mk" $dep_from "%SHBuild-common-options.sh" $=
		(
			+ "variables %(C_CXXFLAGS_COMMON, CFLAGS_STD, CFLAGS_WARNING, \
				CFLAGS_COMMON, CXXFLAGS_IMPL_WARNING, CXXFLAGS_IMPL_OPT, \
				CXXFLAGS_STD, CXXFLAGS_WARNING, CXXFLAGS_COMMON, \
				LDFLAGS_IMPL_OPT, C_CXXFLAGS_OPT_LV, LDFLAGS_OPT_DBG) as \
				%SHBuild-common-options.sh"
			+ "variable %ASFLAGS_OPT_DBG with default value depending on %CONF"
		);
		+ "%Toolchain.DS.mk" $=
		(
			(
			+ "suppressed %C_CXXFLAGS_OPT_LV as '-O3' for non-debug \
				configurations",
			/ "removed LTO option for %(CXXFLAGS_IMPL_OPT, LDFLAGS_IMPL_OPT)";
			/ "included %Toolchain.options.mk";
			/ $comp "%CXXFLAGS for release configuration" ^ '-Os' ~ '-O3'
				// With G++ 4.9.2, '-O3' makes code bloat significantly \
					serious than using G++ 4.8.2 (~1050 KiB vs. 986 KiB). With \
					LTO it would be more serious (1280 KiB even with '-Os'). \
					So '-Os' without LTO (920 KiB) is now used instead by \
					default.
			),
			(
			/ "included devkitARM makefile";
			+ "overridden exported %AR as '$(PREFIX)gcc-ar'" ~ '$(PREFIX)ar'
				// To avoid LTO failed for G++ 4.9.
			),
			+ "variables %(ASFLAGS_OPT_DBG, C_CXXFLAGS_OPT_DBG) depending on \
				value of %CONF as DS makefiles",
			(
			+ "variables %(ARCH_AS_ARM9, ARCH_ARM9) as DS ARM9 makefiles";
			+ "variables %CFLAGS_ARM9"
			),
			(
			+ "variables %(ARCH_AS_ARM7, ARCH_ARM7) as DS ARM7 makefile";
			+ "variables %CFLAGS_ARM7"
			);
			+ "variable %C_CXXFLAGS"
		),
		+ "%Toolchain.Android.mk" $=
		(
			+ "toolchain setting as Andriod makefiles",
			+ "variables %(ARCH_AS; ARCH; ASFLAGS, C_CXXFLAGS)
		)
	),
	/ DLP "toolchain and library using" @ "platform %DS" $=
	(
		^ $re_ex(b321) "updated devkitARM release 43" ~ "devkitARM release 42",
		^ $re_ex(b308) "updated libnds 1.5.9" ~ "libnds 1.5.8",
		^ $re_ex(b308) "updated libfat 1.0.13" ~ "libfat 1.0.12"
	),
	/ DLD "simplified implementation by inclusion" @ "all 5 makefiles"
		@ "platform %DS" $dep_from ("%Toolchain.DS.mk" @ %Tools) $=
	(
		+ 'SHBuild_ToolDir := \
			$(dir $(lastword $(MAKEFILE_LIST)))/../../Tools/Scripts';
		+ 'include $(SHBuild_ToolDir)/Toolchain.DS.mk';
		/ $comp ^ "-Wzero-as-null-pointer-constant" @ "all %DS projects",
		+ '$(LDFLAGS_IMPL_OPT)' @ "%LDFLAGS"
			// Optimization option like '-flto' should be in both compiler and \
				linker command lines.
	),
	/ DLD "updated header search paths" @ "Microsoft VC++ projects" $=
	(
		/ @ "platform %DS",
		* @ "platform %Android" $since b554
	),
	/ DLB "cleanup pre-libstdc++-4.9 dependencies on %(cbegin, cend) members \
		for standard containers" $effective @ %(YFramework.YSLib.UI.TreeView,
		YReader.BookmarkUI) $dep_from ("toolchain and library using"
		@ "platform %DS")
		// See WG21 N1913.
),

b557
(
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			* $build "missing updating header name" @ $since b556
				$= ('<ystdex/exception.hpp>' -> '<ystdex/exception.h>'),
			* "undefined behavior when .d file not exist" $since b546,
				// Actually crashed on Windows XP when assertion disabled, but \
					not Windows 7 or above.
		),
		* $build "missing %ystdex/exception.cpp" @ "%LIBS"
			@ "%SHBuild-bootstrap.sh" $since b556,
		/ %Scripts $=
		(
			+ "support checking for %(SHBuild_NoStatic, SHBuild_NoDynamic) to \
				skip static or dynamic libraries building"
				@ "%(SHBuild-YSLib.sh, SHBuild-YSLib-debug.sh)",
			+ "variable %CXXFLAGS_OPT_UseAssert to allow omitting '-DNDEBUG' \
				when %CXXFLAGS_OPT_DBG is empty" @ "%SHBuild-common-options.sh";
				// To support release with assertion builds.
			+ "'CXXFLAGS_OPT_UseAssert=true' before configure %CXXFLAGS"
				@ "%SHBuild-build.sh"
				// Stage 1 %SHBuild should be not so optimized for robustness.
		),
		/ "%install-sysroot.sh" $=
		(
			+ "variable %SHBuild_UseRelease with default value 'true'",
			/ "exported %(SHBuild_NoStatic, SHBuild_NoDynamic)"
				@ "configuration stage",
			+ "optional building and installing libraries controlled by \
				variables %(SHBuild_NoStatic, SHBuild_NoDynamic)",
			+ "optional building and installing release libraries controlled \
				by variable %SHBuild_UseRelease",
			+ "skipping installing 3rd party libraries controlled by variable \
				%SHBuild_No3rd"
		)
	),
	/ %YFamework $=
	(
		/ %YSLib $=
		(
			/ @ "function %EnsureDirectory" @ %Service.FileSystem $=
			(
				+ "logging just before throwing when making directory failed",
				- "assertion for post condition"
					// Since the operations are actually not guaranteed to be \
						synchronized.
			),
			/ %Adaptor.Image $=
			(
				/ @ "class %ImageTag" $=
				(
					+ "optional ownership",
					+ "2 constructor function; constructor template with \
						parameter of bitmap, model and tag name",
					/ "enum %ImageTag::Model"
						-> "enum class %Drawing::ImageMetadataModel",
					/ "function %GetValue" => "%GetValuePtr",
					+ "function template %TryGetValue",
					+ "function %GetDataPtr"
				),
				(
				+ "classes %ImageMetadataFindData; HImageMetadata";
				+ "alias-declaration %HImageMetadataIterator"
				),
				+ "function %to_string for %ImageTag",
				+ "functions %(GetFrameTimeOf, GetLogicalSizeOf) for %HBitmap"
				* $comp $dev "constructor with %DataPtr unusable"
					@ "class %HImage" $since b483 $dep_from
					%YBase.YStandardEx.String
			),
			/ %Core.YCoreUtilities $=
			(
				+ "empty string as default argument for 2nd parameter"
					@ "function templates %(CheckScalar, \
					CheckNonnegativeScalar, CheckPositiveScalar)",
				/ $dev "implemented comparison" @ "function template \
					%CheckScalar" ^ "cast by %ystdex::common_type_t"
					// To eliminate warning: [-Wsign-compare] when one of \
						template argument is signed integer type.
			),
			/ @ "class %ImagePages" @ %Service.ImageProcessing $=
			(
				(
				$dep_from %Adaptor.Image;
				/ "base size stored for nonempty sequence" ^ "%GetLogicalSizeOf"
					~ "first frame",
				/ "frame time sequence stored" ^ "%GetFrameTimeOf";
				+ "function %GetFrameTime"
				),
				/ "function %GetPageIndex" => "%GetIndex",
				/ "function %GetPagesNum" => "%GetCount"
			),
			+ 'ynothrow' @ "function %ResetState" @ %UI.Animation
		)
		* "crash for invalid file" @ "constructor %Session" @ %NPL.SContext
			$since b335
			// It would cause assertion failed on debug builds.
	),
	/ %YBase.YStandardEx $=
	(
		/ DLD ^ 'override' ~ 'virtual'
			@ "destructors %(unsupported, unimplemented)" @ %Exception,
		/ @ "class %thread_pool" @ %Concurrency $=
		(
			/ @ "function template %wait_to_enqueue" $=
			(
				/ DD "explicitly stated precondition",
				+ "assertion for postcondition after %wait called"
			),
			+ "assertion for no %std::future_error thrown out of task"
				@ "working thread"
		),
		/ %String $=
		(
			+ "metafunction %is_string_class";
			* "argument of pointer to incomplete class caused ill-formed"
				@ "%enable_for_string_class_t" @ $since b483
				^ "%is_string_class"
		)
	),
	+ "frame time support for animated GIF" @ %YDE.ImageBrowser.ImageControl
		$dep_from %YFramework.Service.ImageProcessing
),

b556
(
	/ %YBase $=
	(
		+ $resolve(#3) %CMath @ %LibDefect,
			// To make as many as possible ISO C++11 math functions work with \
				libstdc++ even if no %_GLIBCXX_USE_C99_MATH_TR1 is defined.
		/ DLD ^ "%std::llround" ~ "%::round" @ %Rational $dep_from
			%LibDefect.CMath,
		/ DLD "swapped order of definition of macros %(YPP_Concat, YPP_Join)"
			@ %YDefinition,
			// To be intuitive and to prevent (unlikely) misuse between the \
				two definitions.
		/ %YStandardEx $=
		(
			/ %Iterator $=
			(
				/ @ "class template %subscriptive_iterator" $=
				(
					+ "3 parameters with default argument for member type"
						@ "template parameter list";
					/ "alias-declarations %(difference_type, pointer, \
						reference)" ^ "template parameter",
					(
					+ "friend function %is_undereferenceable";
					+ "assertion of not %is_undereferenceable"
						@ "function %operator*",
					+ "friend function %less"
					),
					+ DLD 'ynothrowv' @ "all member functions without \
						exception-specification",
					+ "brace-initializer for data members",
						// To make default initialized iterator compatible \
							with 'constexpr'.
					+ "explicitly defaulted default constructor",
					/ @ "function %equals" $=
					(
						/ "always treats iterators with null container are \
							same",
						+ "assertion for same container"
					),
					(
					/ "function %index" => "%get_index";
					/ DLD "renamed data member",
					+ 'yconstfn' @ "functions %(container, get_index)"
					)
				),
				+ "function templates binary %operator(<, >, <=, >=, -) for \
					%subscriptive_iterator"
			),
			/ DLD "simplified constructor %fixed_point" @ %Rational,
			(
			+ %Base
				$= (+ "class template %deref_self"),
			/ DLD "class template %guard_impl" @ %Utilities !^ "%noncopyable",
			/ $dev "class template %lref" @ %Functional ^ "explicitly \
				defaulted copy (constructor, %operator=)" ~ "%nonmoveable";
			/ "classes (noncopyable, nonmoveable, cloneable)" @ %Utilities
				>> %Base;
			/ $dev "defined virtual out-of-line destructor" @ "class %cloneable"
				@ "non-header file" ~ ("class definition" @ "header")
				// To eliminate Clang++ warning: [-Wweak-vtables].
			),
			(
				/ $dev %Exception $=
				(
					/ "header %exception.hpp" >> "%exception.h",
					+ "source file %exception.cpp"
				);
				/ "classes (unsupported, unimplemented)" @ %Utilities
					>> %Exception;
				+ $dev "defined virtual out-of-line destructor"
					@ "classes %(unsupported, unimplemented)"
					@ "non-header file" ~ ("class definition" @ "header")
					// To eliminate Clang++ warning: [-Wweak-vtables].
			)
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adatpor $=
			(
				/ 'using ::round' -> 'using std::round' @ %YAdaptor $dep_from
					%LibDefect.CMath,
				/ %Image $=
				(
					/ @ "class %HMultiBitmap" $=
					(
						(
						// These modification provide a default constructed \
							null handle.
						+ DLD "'{}' as initializer for pointer data member";
						+ "explicitly defaulted default constructor"
						),
						/ @ "function %Lock" $=
						(
							+ DLD 'ynothrowv',
							+ "locked page index and count" @ "indirect assertion"
						),
						(
						+ "function %operator[]";
						/ "class %iterator" -> "alias-declaration"
							^ "%ystdex::subscriptive_iterator" $dep_from
							%YBase.YStandardEx.Iterator
						),
						* "%std::terminate called when image plugin not found"
							@ "constructor" $since b456,
							// This is caused by improper 'ynothrow'. This \
								would cause crash by default instead of \
								propagating the exception.
					),
					- "all 2 functions for %HMultiBitmap::iterator",
					* "wrong call for list initialization of sequence \
						container of iterator type" @ "static member function \
						template %ImageCodec::LoadSequence" $since b461,
					/ "base class %LoggedEvent" -> "GeneralEvent"
						@ "%UnsupportedImageFormat",
					/ "constructor %UnknownImageFormat" -> 'using \
						UnsupportedImageFormat::UnsupportedImageFormat",
					/ "constructors %HMultiBitmap explicitly allowed to \
						propagate exception types %std::(bad_cast, \
						invalid_argument)",
					/ @ "class %HBitmap" $=
					(
						/ "constructors opened from file would throw \
							%std::invalid_argument if \
							file open failed",
						/ "functions and function template %SaveTo would throw \
							%std::invalid_argument if the bitmap is null or \
							%GeneralEvent if failed otherwise"
							~ "return %bool value",
						/ $dev "constructor with %DataPtr parameter and \
							default argument" -> "brace-initialized data \
							member, explicitly defaulted constructor and \
							constructor without default argument",
						/ @ "function %operator[]" $=
						(
							/ 'ynothrow' -> 'ynothrowv',
							* "missing assertion for nonnull bitmap pointer as \
								documentation" $since b
						),
						+ "function %Release"
					),
					+ "class name declaration %::(FIMETADATA, FITAG); \
						class %ImageTag"
				)
			),
			* "uninitialized read of scale value caused by wrong data member \
				initialization order" @ "constructor" @ "class %ImagePages"
				@ Service.ImageProcessing $since b555,
			* "missing level value when throwing %LoggedEvent object"
				@ "function templates %(CheckNonnegativeScalar, \
				CheckPositiveScalar)" @ %Core.YCoreUtilities $since b502
		),
		+ ('#include YFM_Helper_HostedUI', 'YFM_YSLib_Service_ImageProcessing')
			@ %YSBuild,
		/ %'YCLib_(MinGW32)' $=
		(
			+ %NLS;
			/ "functions %(FetchNLSItemFromRegistry, \
				FetchCPFileNameFromRegistry, FetchDBCSOffset)" @ %MinGW32
				>> %NLS
		),
		/ "all throwing %LoggedEvent without level" -> "throwing %GeneralEvent"
			$effective @ %(YSLib.Adaptor.Image, Helper.(GUIApplication,
			Initialization), 'YCLib_(MinGW32)'.Win32GUI),
		+ "member functions %operator(!, bool)" @ "class %DirectorySession"
			@ %'YCLib_(MinGW32)'.MinGW32,
			/ DLD "simplified class %HDirectory" @ %YCLib.FileSystem
				^ $dep_from ("%ystdex::deref_self" @ %YBase.YStandardEx.Base)
	),
	+ %YDE $=
	(
		+ $doc "Readme.en-US.txt",
		+ %ImageBrowser
			$= (+ %(ImageControl; Main)),
		+ "%build-all.sh"
	),
	/ %Tools $=
	(
		/ %Scripts $=
		(
			* $comp $build "missing %YCLib/MemoryMapping.cpp" @ "%LIBS"
				@ "%SHBuild-bootstrap.sh" $since b552 $dep_from
				%YFramework.'YCLib_(MinGW32)',
				// Otherwise linking failed. It is needed as a side effect of \
					%FetchDBCSOffset in %'YCLib_(MinGW32)'.
			+ "%SHBuild-self-host-DLL.sh"
				// XXX: Depends on DLLs in '/usr/lib'.,
			(
			/ @ "%install-sysroot.sh" $=
			(
				* "missing exported %LDFLAGS after loading default options \
					before building stage 2 %SHBuild" $since b546,
					// This made the binary larger than expected and necessary.
				+ '-fno-lto -fwhole-program' @ "command line for stage 2 \
					%SHBuild",
					// Since the bootstrap build a single execution file, the \
						'-fno-lto -fwhole-program' makes it better. Seems no \
						bug like static linking (see %SHBuild-bootstrap.sh).
				/ "default value" @ "%SHBuild_LogOpt" -> '-xlogfl,128'
					~ '-xlogfl,192'
					// To decrease verbosity and increase performance by \
						default.
				/ "default value" @ "%SHBuild_BuildOpt" -> '-xj,6' ~ '-xlogfl,8'
					// To decrease probability to hang.
				+ "deploying static libraries %(libfreetype.a, libFreeImage.a)"
			);
			/ "%install-sysroot.sh" @ %Scripts >> %Tools
			),
			(
			+ "%(SHBuild-YSLib-common.sh; SHBuild-YSLib-debug.sh)";
			+ "support for building and installing debug libraries if non \
				empty %SHBuild_UseDebug is set" @ "%install-sysroot.sh"
			),
			/ @ "%SHBuild-YSLib.sh" $=
			(
				/ "simplified" ^ $dep_from "%SHBuild-YSLib-common.sh",
				* "wrong command line" @ "building %YFramework.dll" $since b546
					$= (/ '-DYB_BUILD_DLL' -> '-DYB_DLL')
			),
			/ "all 'source' shell builtin" -> '.',
				// To be not verbose and compatible with other shells.
			/ @ "%SHBuild-BuildApp.sh" $=
			(
				/ "auto-detecting debug modes by prefix 'debug'"
					~ "identical match",
				+ "static build support with variable %SHBuild_Static and \
					auto-detecting configure name postfix 'static'",
				+ "variable %SHBuild_NoAdjustSubsystem to allow suppressing \
					adding '-mwindows' in release modes"
			)
		),
		+ "target base name overriding option '-xn'" @ %SHBuild.Main,
	),
	* $dev "missing %source/ytest/test.cpp" @ "YBase.cbp" $since b519
),

b555
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				+ 'ynothrow' @ "static member function %Caret::Stop" @ %TextBox,
				- $dev "class name declarations %(SolidBrush, ImageBrush)"
					@ %YComponent,
				/ %YBrush $=
				(
					/ "all declarations" @ "namespace %UI"
						>> "namespace YDrawing",
					/ "member functions %operator()"
						@ "classes %(SolidBrush, ImageBrush)" $=
					(
						/ "parameter 'PaintEventArgs&&'"
							-> 'const PaintContext&' $dep_to
							"removal of event argument type from brushes",
						+ 'const'
					)
				),
				/ %YBrush @ %UI >> %Service $dep_from
					"removal of event argument type from brushes",
				/ %YStyle $=
				(
					+ DLD 'ynothrowv' @ "member function %Palette::operator[]",
					- "assertion for rotation value"
						@ "function %RectDrawCornerArrowOutline"
						// To eliminate Clang++ warning \
							[-Wtautological-constant-out-of-range-compare].
				),
				/ "alias %ZOrderType" @ %YUIContainer => "%ZOrder",
				/ %GUI $=
				(
					/ @ "class %InputTimer" $=
					(
						+ "static %yconstexpr data member %DefaultDuration";
						+ "ensured %noexcept guarantee"
							@ "default constructor %InputTimer" $=
						(
							/ "default argument" ^ "%DefaultDuration";
							// This is not the same as default constructor of \
								duration type, see http://stackoverflow.com/questions/22701617/should-constructors-on-stdchrono-time-point-be-noexcept-or-why-arent.
							+ 'ynothrow'
						)
					),
					+ "class %GUIConfiguration; function \
						%FetchGUIConfiguration",
					/ @ "class %YGUI" $=
					(
						- "data member %(Colors, Styles)";
						/ $comp "made %GUIState really with %noexcept guarantee"
					),
					* $comp $dev $build "static assertion failure" @ "function \
						%FetchGUIState" $since b554 $dep_from "class %YGUI",
						// G++ wronly accepted it. Clang++ correctly rejected \
							it.
					+ 'ynothrow' @ "function %IsFocusedByShell"
				)
			),
			/ %Service $=
			(
				/ %YTimer $=
				(
					/ @ "class %Timer" $=
					(
						+ 'ynothrow' @ "default constructor",
						/ "base class %noncopyable" -> "explicitly defaulted \
							copy (constructor, %operator=)"
							// This makes it also satisfying %MoveConstrctible \
								and allows it to be forward as a tuple element.
					),
					/ DLD "implemented static member function \
						%HighResolutionClock::now" ^ "macros %(PDefH, ImplRet)"
					+ 'ynothrow' @ "function %Activate"
				),
				/ %ImageProcessing $=
				(
					(
					+ "alias-declaration %ImageScale of fixed point type";
					* $comp "missing handling invalid input ratio" $since b554,
						// Like negative values or NaN. No it is not needed.
					/ "all %ScaleType and 'float'" -> "%ImageScale"
					),
					/ @ "class %ZoomedImageCache" $=
					(
						/ "constructor function" -> "constructor template for \
							any path tpyes",
						+ "explicitly defaulted move (constructor, %operator=)"
							// This makes it to be a move-only type.
					),
					+ "class %ImagePages"
				)
			),
			/ %Core $=
			(
				/ %YGDIBase $=
				(
					+ "member functions %operator(&=, |=)" @ "class %Size",
					+ "functions %operator(&, |) for %Size",
					/ DLD "implemented functions %operator(==, !=, +, -) for \
						%Rect" ^ "macros %(PDefHOp, ImplRet)",
					/ $dev "functions %operator(&, |) for %Rect"
						-> "inline functions",
					+ "function %ScaleMin",
				),
				/ %YObject $=
				(
					/ DLD "implemented member functions %(get, type)"
						@ "class templates %(ValueHolder, PointerHolder)"
						^ "macros %(PDefH, ImplRet)",
					/ @ "class template %PointerHolder" $=
					(
						(
						+ "template parameter \
							'typename _tPointer = std::unique_ptr<_type>'";
						+ "alias-declaration %holder_pointer";
						+ "alias-declaration %pointer_holder",
						/ "implemented member pointer" ^ "%holder_pointer"
							~ '_type*',
						/ "user-defined move constructor"
							-> "explicitly defaulted move constructor",
						- "user-defined destructor"
						),
						/ DLD "implemented member function %operator=="
							^ "macros %(PDefHOp, ImplRet)",
						+ "explicitly defaulted move %operator="
					),
					+ "explicitly defaulted move %operator="
						@ "class template %ValueHolder"
				)
			)
		),
		* "missing added files into filter for" %YSLib.Service.ImageProcessing
			@ "Microsoft VC++ project",
		/ %YCLib $=
		(
			/ $dev %Video $=
			(
				/ $lib "implemented %FetchPixel" ^ "cast",
					// To eliminate Clang++ warning [-Wsign-conversion].
				* "signed shifted value"
					@ "class templates %(XYZAMaskTrait, AXYZMaskTrait)" $since
					b507 $orig (@ "class template %XYZATrait" $since b441),
					// To eliminate Clang++ warning [-Wshift-sign-overflow], \
						[-Wsign-conversion]
				/ $lib @ "class templates %(BGRA, RGBA)" $=
				(
					+ 'using ArrayType = typename Trait::ArrayType',
						'using IntegerType = typename Trait::IntegerType';
					/ "simplified member declarations"
						^ "%(ArrayType, IntegerType)",
					/ "implemented constructor for components"
						^ "cast to %Integer"
						// To eliminate Clang++ warning [-Wsign-conversion].
				)
			),
			/ "no longer performed 'defined(_MT)' check for %YF_Multithread"
				@ %Platform,
				// Note MinGW-G++ would define '_MT' in specs if '-mthreads' \
					used, however <_mingw.h> would ensure it defined anyway. \
					It is depending on different headers included, thus lead \
					to confusion when not predefined, e.g. for Clang++.
			+ 'ynothrow' @ "functions %(GetTicks, GetHighResolutionTicks)"
				@ %Timer
		),
		/ DLDI 'HWND_DESKTOP' -> '{}' @ "function %CreateNativeWindow"
			@ %'YCLib_(MinGW32)'.Win32GUI
			// To eliminate [-Wzero-as-null-pointer-constant].
	),
	/ %YBase.YStandardEx $=
	(
		- $revert(b304) "function template %initializer_cast" @ %Cast,
			// This function template is useless and harmful because it would \
				only return a value with dangling reference to temporary array \
				of initializers thus any direct use of the value would lead to \
				undefined behavior.
		/ $dev $lib "implemented functions %(iscntrl_C1, iscntrl_ISO8859_1, \
			iscntrl_ISO8859_11)" @ %CCType ^ "cast to %unsigned",
			// To eliminate Clang++ warning [-Wsign-conversion].
		/ %Rational $=
		(
			* $impl "member function %epsilon" @ "class template \
				specialization %numeric_limits for instances of \
				%ystdex::fixed_point" $since b439
			+ 'yconstfn' @ "friend function %fabs for %ystdex::fixed_point",
			+ "'yconstfn' friend function %abs for %ystdex::fixed_point"
				// Same as %fabs, but might be preferred as uniformed C++ use, \
					with no ambiguity.
		),
		/ %Any $=
		(
			/ @ "class template %pointer_holder" $=
			(
				+ "template parameter \
					'typename _tPointer = std::unique_ptr<_type>'";
				+ "alias-declaration %holder_pointer";
				+ "alias-declaration %pointer_holder",
				/ "implemented member pointer" ^ "%holder_pointer" ~ '_type*',
				/ "user-defined move constructor"
					-> "explicitly defaulted move constructor",
				- "user-defined destructor",
				+ "explicitly defaulted (copy, move) %operator="
			),
			+ "explicitly defaulted (copy, move) (constructor, %operator=)"
				@ "class template %value_holder"
		)
	),
	- "-D_MT" @ "%CFLAGS" @ "makefiles" @ "platform %Android" $dep_from
		%YFramework.YCLib.Platform,
	/ $dev $build @ "%SHBuild-common-options.sh" @ %Tools.Scripts $=
	(
		(
		+ "%CXXFLAGS_IMPL_COMMON with default values for G++ and Clang++";
		/ "-mthreads" @ "default value" @ "%CXXFLAGS_COMMON"
			>> "%CXXFLAGS_IMPL_COMMON for G++",
			// To eliminate Clang++ warning.
		^ "%CXXFLAGS_IMPL_COMMON" @ "default value" @ "%CXXFLAGS_COMMON"
		),
		/ "-s" @ "default value" @ "%CXXFLAGS_DBG_OPT"
			>> "%CXXFLAGS_IMPL_OPT for G++"
			// To eliminate Clang++ warning.
	)
),

b554
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ "class %JNIBase" @ %JNI $=
			(
				* "wrongly detaching from thread even without ownership" $since
					b553,
					// This would get wrong behavior if the VM is already \
						attached to current thread. On android, this would \
						cause log like \
						'ERROR: detaching thread with interp frames \
						(count=12)', and then the VM would be aborted and crash.
				/ "explicitly specified throwing %JNIException on failure"
					~ "%std::runtime_error" @ "constructor"
			),
			* "member name shadowed" @ "class %file_des" @ %FileSystem $since
				b553,
				// To eliminate Clang++ warning: warning: declaration shadows \
					a field [-Wshadow].
			* DD "wrong Doxygen command '\t'" ~ '\c'
				@ "function %usystem" @ %YCommon $since b539,
				// To eliminate Clang++ warning: unknown command tag name \
					[-Wdocumentation-unknown-command].
			* DD "wrong Doxygen command '\note'" ~ '\return'
				@ "function %ToggleLockState" @ %Keys $since b490
				// To eliminate Clang++ warning: '\return' command used in a \
					comment that is attached to a function returning void \
					[-Wdocumentation].
		),
		/ $dev $build "wrong Microsoft VC++ project include directory settings"
			@ "all configurations" @ "platform %Win32" $since b544,
			// Instead of Microsoft VC++ toolchain, MinGW headers would be used.
		/ DLB $impl "explicitly truncated value" %CHRLib $=
		(
			@ "function %UCS4ToUCS2" @ %CharacterProcessing,
				// To eliminate warning C4244 on Microsoft VC++ 2015 Preview with \
					warning level /W3.
			@ "constructor %ConversionState" @ %CharacterMapping
				// To eliminate warning C4267 on Microsoft VC++ 2015 Preview with \
					warning level /W3.
		),
		/ @ %YSLib.Adaptor.YReference $dep_from %YBase.YStandardEx.Functional $=
		(
			// See $2014-11 @ %Documentation::Workflow::Annual2014.
			+ 'using ystdex::reference_wrapper;'
		),
		/ DLD "implemented %operator()" @ "class %ChildPainter"
			@ %Helper.ShellHelper ^ "macros %(PDefHOp, ImplExpr)",
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %YGDIBase $=
				(
					/ DLD "implemented inline functions %(UpdateClipArea, \
						UpdateClipSize, Diminish, GetAreaOf)"
						^ "macros %(PDefH, ImplExpr)",
					/ DLD "implemented %yconstfn functions %operator(==, !=) \
						for %Size" ^ "macros %(PDefHOp, ImplRet)",
					/ $lib @ "class template %GBinaryGroup" $=
					(
						/ "specified conversion explicitly for scalar \
							conversion" @ "constructor template for 2 scalar \
								types",
							// To eliminate Clang++ warning: \
								[-Wsign-conversion].
						+ "explicitly defaulted copy %operator= to avoid ISO \
							C++11 deprecation"
							// To eliminate Clang++ warning [-Wdeprecated].
					),
					/ @ "class %Size" $=
					(
						/ $dev $design "simplified copy constructor"
							^ "%DefDeCopyCtor" ~ "non-trivial user-defined \
							copy constructor",
						+ "explicitly defaulted copy %operator= to avoid ISO \
							C++11 deprecation"
							// To eliminate Clang++ warning [-Wdeprecated].
					),
					+ "2 function templates %get for (class template \
						%GBinaryGroup, classes %(Size, Rect))"
				),
				/ %YCoreUtilities $=
				(
					+ "function templates %(HalfDifference; \
						HalfDifferenceIfGreater)",
					/ DLD "guard macro %YSL_INC_Core_ycutil_h_"
						=> "%YSL_INC_Core_YCoreUtilities_h_"
				),
			),
			+ %ImageProcessing @ %Service $=
			(
				+ "function %Zoom";
				+ "class %ZoomedImageCache"
			);
			/ @ "function %FetchGUIState" @ %UI.YGUI $=
			(
				^ $design "statically initialization of object"
					~ "statically initialized pointer with new-expression";
				* "missing destruction at end of program" $since b287,
				+ 'ynothrow'
			)
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ @ "namespace %ystdex" @ %Functional $=
		(
			// See $2014-11 @ %Documentation::Workflow::Annual2014.
			+ "class template %lref";
			+ "class template specialization %wrapped_traits for %lref",
			+ "function templates %(ref, cref)",
			/ "metafunction %is_equal"
				^ "%wrapped_traits to support %ystdex::lref"
		),
		^ 'lref' ~ 'std::reference_wrapper' @ "function parameters"
			@ "namespace %ystdex" $dep_from ("%reference_wrapper" @ %Functional)
			$effective @ %(Any, Functional),
			// See $2014-11 @ %Documentation::Workflow::Annual2014.
		* "all 2 redundant ';' in class definitions" @ %Container $since b408,
			// To eliminate Clang++ warning: extra ';' after member function \
				definition [-Wextra-semi].
		/ $dev "avoided lambda parameter declaration name shadowing variable"
			@ "function template %hash_combine" @ %YFunctional $since b531,
			// To eliminate Clang++ warning: declaration shadows a local \
				variable [-Wshadow].
		* DD "wrong name for '\tparam'" @ "comment"
			@ "function template %transform_n" $since b517
			// To eliminate Clang++ warning [-Wdocumentation].
	),
	(
	// See $2014-11 @ %Documentation::Workflow::Annual2014.
	/ $dev "simplified reference wrapper with namespace %YSLib used"
		^ 'lref' ~ 'std::reference_wrapper' @ "data members"
		$effective @ %YFramework.(Helper.(HostRenderer, HostWindow, \
		InputManager, ShellHelper), YSLib.(UI.(Hover, Border, Loader, Menu), \
		Adaptor.(Font, Image), Core.YEvent), 'Helper_(Android)'.(AndroidHost, \
		AndroidScreen)), YReader.(BookmarkUI, ShlExplorer);
	* $comp $build "strict ISO C++11 code conformance" $since b380
		$= (/ "wrongly used incomplete type %Environment as argument of \
			%std::reference_wrapper" @ %YFramework.Helper.(HostWindow,
			InputManager))
	),
	/ DLD "precisely adapted reference wrapper operations without \
		%std::reference_wrapper concerned" ^ "%ystdex::(ref, cref)"
		~ "%std::(ref, cref)" $effective "%std::ref" @ %YFramework.YSLib.(
		Core.ValueNode, Adaptor.Font, UI.(Menu, YGUI, YPanel, YUIContainer)),
	/ "updated toolchain version for NDK r10c %make-clang-android.sh" @ %Tools
		$=
	(
		/ '--toolchain=arm-linux-androideabi-4.8'
			-> '--toolchain=arm-linux-androideabi-4.9',
		/ '--llvm-version=3.4' -> '--llvm-version=3.5'
	),
	/ $build "makefile" @ "platform %Android" @ %YReader $=
	(
		/ 'ANDROID_SDKVER := 21.0.0' -> 'ANDROID_SDKVER := 21.1.1',
		- DLD "redundant '-shared'" @ "%LDFLAGS"
	),
	/ $build @ "all 3 makefiles" @ "platform %Android" $=
	(
		/ '$(PREFIX)ar' -> '$(PREFIX)gcc-ar' @ "%AR",
		* "-flto=jobserver" @ "%CFLAGS even on %debug configuration" $since b497
	),
	* $build "-flto=jobserver" @ "%CFLAGS even on %debug configuration"
		@ "all 4 (ARM7, ARM9) makefiles" @ "platform %DS" $since b353
	/ $dev $build "removed use of 'typename' when unnecessary" $effecitive
		@ ("macro %DefBitmaskOperations" @ %YFramework.YBaseMacro)
		// To eliminate some [-Wc++98-compat] by Clang++ even if allowed by \
			C++11, see [CWG 382].
),

b553
(
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %Debug $=
			(
				* "missing including <ystdex/string.hpp>"
					@ "header file" $since b499,
					// Thus 'ystdex::sfmt' would be not necessarily declared.
				+ "function templates %(Nonnull; Deref)"
					@ "namespace %platform",
				+ 'ynothrow' @ "function %platform_ex::LogAssert)"
					@ "platform %Android"
			),
			+ "macro %YF_Use_JNI if undefined"
				@ "platforms %(MinGW32, MinGW64, Android)" @ %Platform,
				// Currently, only "posix" thread model G++ is supported.
			+ %POSIXThread
				$= (+ "class %TLSKey" @ 'YF_Use_JNI')
			/ @ %JNI $=
			(
				+ "namespace %platform_ex::JNI";
				/ @ "namespace %JNI" $=
				(
					+ "class %JNIException; macro %YF_Raise_JNIExceptionOnNull",
					(
					/ "function %FetchJNIEnvRef" -> "class %JNIBase" $=
					(
						+ "functions %(GetEnvRef, GetVMRef)",
						(
						/ "allowing select JNI version in constructor";
						* $comp "fixed JNI 1.6" $since b552,
						),
						+ "function templates %Nonnull; Deref" $dep_from
							"%YF_Raise_JNIExceptionOnNull",
						+ "function %ThrowOnException",
						(
						+ "function %EnsureDetachJNIAtThreadExit"
							$= (+ "explicitly specified platforms without TLS \
								or POSIX thread is not supported explicitly by \
								throwing %ystdex::unsupported exception");
						* $comp "missing detaching on thread exit for \
							platforms with this capability" $since b552
						)
					),
					+ @ "class %JNI" $dep_from "base class %JNIBase"
						$= (+ "28 alias-declarations for JNI types")
				)
			),
			/ $dev %Platform $=
			(
				+ DD "Doxygen group %PlatformAPIs",
				/ "macro %YCL_API_FILESYSTEM_POSIX"
					-> "%YCL_API_POSIXFileSystem with token '1'",
				/ "macro %YCL_API_USE_UNISTD" -> "%YCL_API_Have_unistd_h of \
					token '1'",
				/ "macro %YCL_API_USE_SYS_DIR" -> "%YCL_API_Have_dirent_h of \
					token '1'",
				+ ('#	define YCL_API_Have_dirent_h 1',
					'#	define YCL_API_Have_unistd_h 1') @ "platform %Android"
			),
			/ %FileSystem $=
			(
				+ "class %platform::file_desc";
				+ "struct %file_desc_deleter";
				/ DLDI "simplified"
			),
			/ %Host $=
			(
				+ "support" @ '!YCL_Win32 && YCL_API_Has_unistd_h'
					@ "%HandleDeleter"
					$= (/ "class %HandleDeleter"
						-> 'using HandleDeleter = platform::file_desc_deleter'
						$dep_from ("%file_desc_deleter" @ %FileSystem));
				+ "support" @ 'YCL_API_Has_unistd_h' @ $dep_from
					"function %MakePipe"
			)
		),
		/ %YSLib $=
		(
			+ ('using platform::Nonnull;', 'using platform::Deref;')
				@ %Adaptor.YAdaptor,
				// Though it makes more difficult to locate wrong code by \
					line, debugger is not effected because the control in \
					terminate hanlder can be broke.
			/ %Core $=
			(
				/ @ "constructor template %GEventPointerWrapper" @ %YEvent $=
				(
					* "missing overloaded selection excluding for cv-qualified \
						copy/move candidate parameter" $since b242,
					* "wrong assertion of moved after state of argument" $since
						b242
				),
				/ DLD "implemented inline function %Activate" @ %YApplication
					^ "macros %(PDefH, ImplRet)"
			)
		),
		/ $lib "simplified direct assertion to indirect assertion"
			^ "%Nonnull, Deref" $dep_from %YCLib.Debug $effective @ %(YCLib.(
			Debug, FileSystem, Input), YCLib_(MinGW32).(COM, MinGW32, Win32GUI),
			YCLib_(Android).Android),
		+ "assertions for nonnull string arguments" @ "functions %(MBCSToMBCS, \
			WCSToMBCS, MBCSToWCS)" @ %'YCLib_(MinGW32)'.MinGW32
		/ DLD "implemented inline functions" ("%ResetDesktop"
			@ %Helper.ShellHelper, "%(2 PutPixel, PlotPixel, DrawPoint, \
			DrawHLineSeg, DrawVLineSeg, DrawLineSeg, DrawRect)"
			@ %YSLib.Service.YDraw) ^ "macros %(PDefH, ImplExpr)",
		/ DLD "implemented inline functions %(IsNowShell, NowShellTo, \
			SetShellTo, GenerateRandomColor, CreateSharedScreenImage)"
			@ %Helper.ShellHelper ^ "macros %(PDefH, ImplRet)",
		+ "assertion for swapped pointer" @ "argument"
			"member function %ScreenBuffer::swap" @ %'YCLib_(Android)'.Android,
		/ "function %MakePipe" @ "namespace %Windows" @ 'YCLib_(MinGW32)'
			>> ("namespace %platform_ex" @ %Host),
		/ @ "class %NativeHost" @ %Helper_(Android).AndroidHost $=
		(
			+ DLD "cross thread communication state";
			+ $design "cross thread log",
			+ "function %RunOnUIThread"
			* $revert(b551) "program not exited after posting quit message \
				until press back button"
		)
	),
	/ %YBase $=
	(
		/ "required non-zero %_GLIBCXX_HAVE_TLS when G++ used"
			@ "macro %YB_HAS_THREAD_LOCAL" @ %YDefinition,
		/ %YStandardEx $=
		(
			+ 'ynothrow' @ "functions %(yassert, ytrace)" @ %CAssert,
			* "missing overloaded selection excluding for cv-qualified \
				copy/move candidate parameter" @ "classes %(unimplemented, \
				unsupported)" @ %Utilities $since b475
		)
	),
	/ $lib "simplified direct assertion to indirect assertion"
		^ "%Nonnull, Deref" $dep_from YFramework.YSLib.Adaptor.YAdaptor
		$effective @ %(YFramework.(Helper.(ShellHelper, GUIApplication,
		HostRenderer, HostWindow, InputManager), YSLib.(Adaptor.(Image, Font),
		Core.(YApplication, YCoreUtilities, YEvent, YObject, YDevice, YGDIBase),
		Service.(YDraw, TextManager, YBlit), UI.(Animation, ComboList, Scroll,
		TabControl, YWidget, ListControl)), Helper_(DS).(DSScreen, DSMain,
		Shell_DS), Helper_(Android).AndroidHost), YReader.DSReader);
	- $lib "some unnecessary duplicate assertions" $effective @ %YFramework.(
		YCLib.FileSystem, CHRLib.CharacterProcessing),
),

b552
(
	/ %YBase.YStandardEx $=
	(
		+ "function templates (2 %pvoid, %pvoid_ref)" @ %YBase.YStandardEx.Cast,
		/ @ "class %thread_pool" @ %Concurrency $=
		(
			/ @ "destructor" $=
			(
				+ "assertion for no %std::system_error thrown for lock mutex",
				/ "ignored %std::system_error thrown for joining each thread",
				+ "assertion for no excepton thrown";
				+ 'ynothrow'
			)
			+ 'ynothrow' @ "function %size_unlocked"
		),
		+ "overloadings for character type and string type"
			@ "function templates %(ltrim, rtrim; trim)" @ %String
			// To allow null characters to be trimmed.
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Adaptor.YNew $=
			(
				* "strict ISO C/C++ compatibility" @ $since b173
					$= (/ "cast to 'void*' for argument for '%p' of \
						'std::fprintf' call" ^ "%ystdex::pvoid" $dep_from
						%YBase.YStandardEx.Cast),
						// The type 'const void*' is also not allowed.
				* $comp "undefined behavior caused by duplicate locking a \
					non-recursive lock" @ "function %GetDebugMemoryList" $since
					b496
			),
			/ %UI $=
			(
				/ @ "function %AMUnitList::AdjustViewLengthForHeight" $=
				(
					/ "set length to 0 when height is 0",
					* "wrong result" $since b529 @ %Viewer $orig
						("function %MTextList::AdjustViewLengthForHeight"
						@ %ListControl $since b527) $orig
						(@ %TextList $since b523) $orig
						("function %TextList::AdjustViewLength" $since b262)
						// Triggered if the top offset is not 0 and the bottom \
							item is also partially shown by a small offset. \
							The old implementation always assumed that it \
							would be only 1 greater than the minimal (when the \
							height is dividable by the item height) value, but \
							actually it should be 2 (1 top partial item and 1 \
							bottom partial item).
				),
				* $comp "missing rendering partial bottom item and being not \
					selectable for control when the widget height not \
					dividable by item height" @ "text list" @ %YReader $since
					b404
					// This was not detected before b404 because there was no \
						text list widget with height not dividable by item \
						height.
			),
			/ %Service.TextManager $=
			(
				/ DLD "assertion string"
					@ "function %operator== for %TextFileBuffer::iterator",
				/ @ "class %TextFileBuffer" $=
				(
					/ "protected member %Map" $=
					(
						/ "initialized" ^ "empty braced-init-list"
							~ "ctor-initializer",
						=> "mBuffer"
					),
					/ DLD "simplified implementation of conversions",
					+ "log warning for failed character conversions"
				)
			)
		),
		/ %CHRLib $=
		(
			/ %MapingEx $=
			(
				(
				+ "object %CHRLib::cp113_lkp";
				/ "implemented GBK to UCS-2LE conversion" ^ "%cp113_lkp"
					~ "%cp113"
					// This allows client code providing other implementation \
						to bypass character map if not capable.
				),
				+ "UTF-32 supports" @ "function template %FetchMapperPtr"
					$dep_from "UTF-32 mapping"
			),
			+ 'using ystdex::octet;' @ %CHRDefinition,
			/ %StaticMapping $dep_from %CHRDefinition $=
			(
				(
				+ "yconstfn functions %(IsSurrogateHead, IsValidSurrogateHead, \
					IsValidSurrogateTail)";
				* "missing surrogate support" @ "function template %Map"
					@ "class template specializations \
					%GUCS2Mapper(<CharSet::UTF_16BE>, <CharSet::UTF_16LE>)"
					$orig (@ %CharacterMapping $since b245)
				),
				/ DLD "static member function \
					%GUCS2Mapper<CharSet::UTF_8>::IsInvalid" ^ 'octet'
					~ "%byte as parameter",
				+ "class template specializations %GUCS2Mapper(
					<CharSet::UTF_32BE>, <CharSet::UTF_32LE>)" $dep_to
					"UTF-32 mapping"
			)
		),
		/ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			+ "2 member functions %RegistryKey::GetRawValue",
			+ "2 functions %FetchRegistryString",
			+ "functions %(FetchNLSItemFromRegistry; \
				FetchCPFileNameFromRegistry)",
			+ "functions %(FetchSystemPath, FetchDBCSOffset)"
		),
		/ %Helper $=
		(
			/ %Initialization $=
			(
				+ "support NLS CP936 as fallback when %cp113.bin loading failed"
					@ "platform %Win32" @ '!CHRLIB_NODYNAMIC_MAPPING',
				/ $design "exception string for failed loading %cp113.bin"
			),
			* "wrong description for %CharSet::UTF_32LE" @ "%Text::Encodings"
				@ %ShellHelper $since b307 $orig
				(%YReader.ShlReader $since b290),
			- $revert(b175) "function %ShowFatalError" @ %DSMain $dep_from %Main
		),
		/ %YCLib $=
		(
			/ "class %HDirectory" @ %FileSyatem $=
			(
				* "missing initialization of member %p_dirent"
					@ "constructor with path parameter" $since b411,
				/ DLD "initialized member %utf8_name" ^ "empty braced-init-list"
			),
			/ "call %YConsoleInit for message with level less than \
				%Descriptions::Alert" @ "platform %DS"
				@ "static member function %Logger::DefaultSendLog" @ %Debug,
				// The program is not expected to continue after fatal error \
					occurred.
			/ %Platform $=
			(
				+ DD "Doxygen group %PlatformOptionalFeatures",
				+ "macro %YF_Use_JNI if undefined" @ "platform %Android"
			),
			+ %JNI
				$= (+ "function %FetchJNIEnvRef" @ 'YF_Use_JNI')
		)
	),
	/ DLD "simplified arguments for '%p' of '*printf' function calls"
		^ "%ystdex::pvoid" $dep_from %YBase.YStandardEx.Cast $effective
		@ %YFramework.(YSLib.Service.File, 'Helper_(Android)'.AndroidHost),
	/ %YReader $=
	(
		* $comp "abnormal exit on multithreading environment"
			@ "%debug configurations" $since b551 $dep_from
			%YFramework.YSLib.Adaptor.YNew,
			// MinGW implementation would crash on exit by closing console \
				window, because the underlying locking operation would throw \
				an exception of %std::system_error with %invalid_operation \
				condition.
		* "assertion failed at line 99 of 'textmgr.cpp' when forced UTF-32 \
			encodings for text file" $since b292 $dep_from
			%YFramework.CHRLib.MappingEx,
		/ $dev %Main $=
		(
			/ "logging for exception function %::main" ^ "%YTraceDe"
				~ "custom log class";
			- DLD "custom log class"
		)
	)
),

b551
(
	/ %YBase.YStandardEx $=
	(
		/ %PseudoMutex $=
		(
			* $dev $build "ill-formed code" $since b550 $=
			(
				* "missing including <chrono>",
				* "order of alias-declaration"
					@ "class templates %(lock_guard, unique_lock)",
				* "constructing %std::system_error" $=
				(
					* "missing qualified 'std::' before 'errc'",
					* "missing category argument"
				),
				* "constructors" @ "class templates %(lock_guard, unique_lock) \
					with 1 mutex parameter"
			),
			/ DLDI "simplified function %lock" @ "class template %unique_lock",
			+ "namespace %threading" %PseudoMutex $=
				(+ "class template %unlock_deleter; alias template \
					%locked_ptr"),
			/ @ "class template %unique_lock" $=
			(
				* "%system_error of dead lock conditiona wrongly thrown when \
					lock owns the mutex" $since b550,
				^ DLD "%ystdex::noncopyable" ~ "explicitly defaulted as \
					deleted (constructor, %operator=)"
			),
			/ "assumed locks with empty operations and always owning mutex"
				@ "defined %NDEBUG",
			/ DLD "simplified classes %(mutex, timed_mutex, recursive_mutex,
				recursive_timed_mutex), class template %lock_guard"
				^ "%ystdex::(noncopyable, nonmovable)"
				~ "explicitly defaulted as deleted (constructor, %operator=)"
		),
		/ %Concurrency $=
		(
			(
			/ "class template %unlock_deleter" -> "alias template",
			* "missing mutex parameter" @ "alias template %unlock_deleter"
			) ^ $dep_from ("%threading::unlock_deleter" @ %PseudoMutex),
			/ DLD "simplified class %thread_pool" ^ "%ystdex::noncopyable"
				~ "explicitly defaulted as deleted (constructor, %operator=)"
		),
		/ %Cast $=
		(
			+ "function templates %polymorphic_downcast for \
				%std::(unique_ptr, shared_ptr)",
			/ "static assertions" -> "explicitly returned with SFINAE check \
				for overloaded function templates with reference parameter",
			+ 'ynothrow' @ "all function templates %polymorphic_downcast"
		),
		+ "using-declarations %std::(is_default_constructible, \
			is_copy_constructible, is_move_constructible, is_assignable, \
			is_copy_assignable, is_move_assignable, is_destructible, \
			is_nothrow_constructible, is_nothrow_default_constructible, \
			is_nothrow_copy_constructible, is_nothrow_move_constructible, \
			is_nothrow_assignable, is_nothrow_copy_assignable, \
			is_nothrow_move_assignable, is_nothrow_destructible)"
			@ "namespace %ystdex" @ %TypeOperation,
			// Now only 'is_trivially_copyable' and 8 'is_trivially_*' which \
				libstdc++-4.8 has not implemented yet are commented out.
		* "wrong 'yconstfn'" @ "all 2 defaulted %operator="
			@ "class template %bound_deleter" @ %Memory $since b550,
			// The 'const' typed member functions cannot be defaulted.
		/ %Utilities $=
		(
			* "missing explictly defaulted move (constructor, %operator=)"
				@ "class %noncopyable" $since b230,
			/ @ "class %nonmoveable" $=
			(
				* "wrongly defaulted as deleted copy (constructor, %operator=)"
					$since b373,
				* "missing explictly deleted move (constructor, %operator=)"
					$since b373
			)
		)
	),
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			+ %Mutex $dep_from %YBase.YStandardEx.PseudoMutex $=
			(
				+ "namespace %platform::Concurrency"
					// No %(timed_mutex, recursive_timed_mutex) as workaround \
						of platform with libstdc++ configured without \
						%_GTHREAD_USE_MUTEX_TIMEDLOCK defined, e.g. Android r9d.
					$= (+ "mutex and using aliases %(mutex, recursive_mutex, \
						 lock_guard, unique_lock, lock, try_lock) from \
						 %ystdex::single_thread or %std depending \
						 on %YF_Multithread value is zero or nonzero"),
				+ "namespace %Threading" @ "namespace %platform" $=
				(
					+ "using-declarations %(unlock_deleter, locked_ptr) from \
						%ystdex or %ystdex::threading depending on \
						%YF_Multithread value is zero or nonzero"
				)
			);
			/ $dev "simplified locking" ^ $dep_from ("namespace \
				%platform::Concurrency" @ %Mutex) $effective @ %(Debug, Input)
		),
		/ %YSLib $=
		(
			/ %Adaptor $=
			(
				+ 'using namespace platform::Concurrency;' @ "namespace %YSLib"
					@ %YAdaptor,
				+ "using-declarations %(unlock_deleter, locked_ptr) from \
					%ystdex or %ystdex::threading depending on %YF_Multithread \
					value is zero or nonzero" @ "namespace %YSLib"
					@ %YReference
					// Like %YCLib::Mutex but without the %unique_ptr \
						necessarily in %std;
			),
			(
			/ $dev "simplified locking" ^ "mutex names" ~ "names with 'std::'"
				$effective @ %('YCLib_(Android)'.Android,
				'Helper_(Android)'.AndroidHost, 'Helper_(DS)'.DSScreen,
				Helper.(Environment, HostWindow, ScreenBuffer, GUIApplication),
				YSLib.(Core.YApplication, Adaptor.YNew),
				'YCLib_(MinGW32)'.Win32GUI) ^ $dep_from %YSLib.Adaptor.YAdaptor,
			/ DLD "simplified locking" ^ "%lock_guard" ~ "%unique_lock"
				$effective @ %YFramework.Helper.(GUIApplication, Environment);
				// If lock in GUIApplication is not modified, the linker on \
					platform %DS would crash: 'assertion fail \
					../../../binutils-2.24/bfd/elf32-arm.c:12387'.
					See https://sourceware.org/bugzilla/show_bug.cgi?id=16698.
			* $comp DLD "invalid conditional inclusion"
				@ %'Helper_(DS)'.DSScreen $since b458
			),
			* $dev "wrong unnecessary file dependent on" @ %YNew $since b462
				$= (DLD / 'YFM_YSLib_Adaptor_YAdaptor'
					-> 'YFM_YSLib_Adaptor_YNew' @ '#include')
		),
		* "platform dependent files included"
			@ "platform neutral Code::Blocks project" $since b525,
		/ %Helper $=
		(
			- $design "redundant %joinable check" @ "destructor %WindowThread"
				@ %HHostRenderer,
				// Since the %std::system_error would be caught whether it \
					could be join. And it should be joinable, because there is \
					no detaching operations reachable via public interface.
			+ "function %LockInstance" @ %GUIApplication,
			(
			* "crash" @ "calling again any of functions \
				%(FetchDefaultFontCache, FetchRoot) after uninitialized"
				@ %Initialization $since 425 $=
				(/ $design "implemented" ^ "%unique_ptr"
					~ "raw pointer and %(ynew, ydelete)");
			* $comp "crash for reentered program with root node (including \
				font cache) used" @ "platform %Android" $since b498
			)
		),
		/ @ "class %NativeHost"
			@ %'Helper_(Android)'.AndroidHost @ "platform %Android" $=
		(
			/ @ "callback for %onNativeWindowDestroyed" $=
			(
				/ $design "%joinable check"
					-> "catch clause for %std::system_error",
					// Like in %WindowThread.
				* "possible crash when posting quit message" $since b502
					// This would cause %SIGSEGV on normal exit if native main \
						thread has finished.
					$= (/ "lock global instance to ensure it in lifetime \
						before posting message" $dep_from
						("%LockInstance" @ %Helper.GUIApplication)),
				- $design "redundant screen pointer check and sleep"
			),
			(
			$dep_from "%AndroidManifest.xml" @ "platform %Android",
			- "%ANativeActivity_finish call" @ "native main thread";
			* $comp "LogCat warning 'Duplicate finish request'" $since b
			),
			+ "atomic pause state handling"
				@ "callbacks for %(onPause, onRessume)",
			+ "function %IsPaused"
		)
	),
	+ 'android:noHistory="true"' @ "%Activity tag" @ "%AndroidManifest.xml"
		@ "platform %Android"
),

b550
(
	/ $doc "updated Doxygen file" $=
	(
		+ "ignored path 'sysroot'",
		(
		/ "value of %HTML_FILE_EXTENSION" -> '.xhtml' ~ "default '.html'";
			// For compatibility with IE 9+.
		/ "value of %DOT_IMAGE_FORMAT" -> 'svg' ~ "default 'png'";
			// Explicitly dropped compatibility with IE previous than IE 9.
		/ "value of %INTERACTIVE_SVG" -> 'YES' ~ "default 'NO'"
		),
		/ "value of %DOT_GRAPH_MAX_NODES" -> '1024' ~ "default '50'"
			// To eliminate warnings about too many nodes in 'YModules.h'.
	),
	* DD "missing escaping backslash for boundary of header names \
		between '<tt>' and '</tt>'" $effective @ %YBase.(LibDefect.String,
		YStandardEx.Utilities) $since b366,
	// To eliminate warning for mismatched HTML tags.
	/ %YBase $=
	(
		+ %Exception @ %LibDefect $=
		(
			+ "experimental fix for missing %std::(get_terminate,
				get_unexpected)" @ "libstdc++ earlier than 4.9";
				// It might still buggy with multithreading. The \
					implementation of %std::rethrow_exception is still known \
					to be broken now. However, %std::(current_exception, \
					throw_with_nested) should be OK.
			+ "workaround for missing %std::(exception_ptr; current_exception, \
				rethrow_exception, nested_exception) with GCC 5.0 trunk code"
				@ "libstdc++ when 'ATOMIC_INT_LOCK_FREE < 2'"
				// See comments in the header file.
		),
		/ %YStandardEx $=
		(
			/ $dev ^ $dep_from %LibDefect.Exception @ %Exception
				~ '<exception>',
			/ %Memory $=
			(
				+ "deleter template parameter support"
					@ "function template %get_raw for %std::unique_ptr",
				+ "class template %bound_deleter"
			),
			/ %Concurrency $=
			(
				+ "class template %unlock_deleter" $dep_from
					("class template %bound_deleter" %Memory);
				+ "alias template %locked_ptr"
			),
			+ %PseudoMutex
				$= (+ "namespace %ystdex::single_thread"
					$= (
					(
					+ "structs %(defer_lock_t, try_to_lock_t, adopt_lock_t)";
					+ "yconstexpr objects %(defer_lock, try_to_lock, \
						adopt_lock)"
					),
					+ "classes %(mutex, recursive_mutex, timed_mutex, \
						recursive_timed_mutex)",
					+ "class templates %(lock_guard, unique_lock)",
					+ "function templates %(lock, try_lock)"
				))
		)
	),
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ %Initialization $=
			(
				+ DLD "assertion for unreachable control" $since b549,
					// To eliminate [-Wreturn-type] for G++ 4.8.
				+ DLD "simplified exception handling across platforms" $=
				(
					^ %YBase.StandardEx.Exception @ "all platforms";
					^ "std::throw_with_nested" @ "all platforms"
				),
				/ DLD "simplified construction of %FatalError",
				/ $design "some error message"
			),
			/ %GUIApplication $=
			(
				/ @ "inline function %FetchEnvironment" $=
				(
					/ DLD "implemented" ^ "macros %(PDefH, ImplRet)",
					- 'ynothrow'
				),
				/ @ "function %FetchGlobalInstance; \
					function template %FetchGlobalInstance, function \
					definition %FetchAppInstance" $=
				(
					/ "explicitly guaranteed thread safety",
					/ "allowed throw exception when application inexisted"
				)
			)
		),
		+ "log messages" @ "hosted main thread"
			@ %'Helper_(Android)'.AndroidHost,
		/ %YSLib.Core.YApplication $=
		(
			/ @ "function %FetchAppInstance" $dep_from
				("function definition %FetchAppInstance"
				@ %Helper.GUIApplication),
			/ @ "functions %PostMessage" $=
			(
				/ "explicitly guaranteed thread safety" $dep_from
					"function %FetchAppInstance",
				* "wrong 'ynothrow'" @ $since b297 $orig
					(@ "functions %SendMessage" $since b272),
				/ DLD "implemented inline functions"
					^ "macros %(PDefH, ImplRet)"
			)
		),
		/ "macro %YF_Multithread" %YCLib.Platform $=
		(
			/ "defined if '__STDCPP_THREADS__' at first",
			/ "unconditionally defined as '0' if not defined previously"
		)
	),
	/ @ "platform %Android" @ %Main $=
	(
		/ "output using logger" ~ "standard I/O",
		* "blocked on memory debug output with %Warning level"
			@ "defined %YSL_USE_MEMORY_DEBUG" $since b498
		// This mostly occurs on the %debug configuration. The main function \
			should not wait for input when switching an Android GUI program, \
			otherwise there would be an ANR.
	)
),

b549
(
	/ %Tools $=
	(
		* "missing 'msys/make'" @ "necessary tools update command line"
			@ "%msys2-pacman-update.sh" $since b548,
		/ %Scripts $=
		(
			/ "%common.sh" -> "%SHBuild-common.sh"
				$= (+ "functions %(SHBuild_Install_HardLink, \
					SHBuild_Install_HardLink_Exe)"),
			/ "%common-options.sh" => "%SHBuild-common-options.sh",
			/ "%common-toolchain.sh" => "%SHBuild-common-toolchain.sh",
			/ "%SHBuild-appconf.sh" -> "%SHBuild-BuildApp.sh" $=
			(
				(
				+ "variable %SHBuild_Bin";
				/ "scripts location" ^ "%SHBuild_Bin" ~ "%SHBuild_ToolDir";
				- "variable %(SHBuild_ToolDir, SHBuild_BaseDir)"
				),
				(
				+ "variable %SHBuild_AppBaseDir",
				+ "exported variables %(SHBuild_YSLib_Flags, LIBS)";
				+ "function %SHBuild_BuildApp"
				)
			);
			/ $install @ "%install-sysroot.sh" $=
			(
				+ "tried hard link for installing files from build directory \
					at first",
					// For files from non-build directory, copy is preferred.
				+ "installing scripts to 'sysroot/usr/bin'"
			)
		)
	),
	+ "hosted build script %SHBuild-YSTest.sh" @ %YReader,
	/ %YFramework $=
	(
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				// They were intended to be %MoveConstructible and \
					%MoveAssignable.
				* "missing declaration of defaulted move %operator="
					@ ("class %DirectorySession" $since b411,
					"class %HDirectory" $since b543),
				/ DLD "simplified directory iteration" @ "platform %Win32"
					^ $dep_from ("classes %DirectoryFindData"
					@ %YCLib_(MinGW32).MinGW32),
				+ "2 functions %uaccess" @ %YCLib.FileSystem
			),
			/ DLD "simplified memory mapping implementation" @ "platform %Win32"
				@ %MemoryMapping
		),
		/ %'YCLib_(MinGW32)'.MinGW32 $=
		(
			+ "macro %YF_Raise_Win32Exception_On_Failure",
			/ "class %RegisterKey" -> "%RegistryKey" $=
			(
				// It should be just like %platform::DirectorySession.
				* "missing copy/move" $since b435 $=
				(
					+ "move constructor";
					+ "defaulted move %operator="
				),
				/ @ "constructor" $=
				(
					+ "parameters '::DWORD = 0, ::REGSAM = KEY_READ' at end of \
						parameter list",
					* "wrong error handling when open registry key" $since b435
				),
				+ "functions %(GetSubKeyCount, GetSubKeyNames, GetValueCount, \
					GetValueNames, Flush)"
			),
			+ "class %DirectoryFindData"
		),
		/ %YSLib $=
		(
			/ %Adaptor.YAdaptor $=
			(
				+ 'using platform::uaccess' $dep_from ("%uaccess"
					@ %YCLib.FileSystem),
				+ 'using platform::uopen'
			),
			/ @ "class %FatalError" @ %Core.YException $=
			(
				/ "type of parameters 'const char*'" -> 'const std::string&'
					@ "constructor",
				/ "copied and stored string on construction",
				/ "return type" @ "function %GetContent" -> 'const std::string&'
					~ 'const char*'
			)
		),
		/ %Helper.Initialization $=
		(
			/ DLD "implemented initialization directory check"
				@ "platform %Android" ^ "%uaccess" ~ "%::access" $dep_from
				%Adaptor.YAdaptor,
			+ "message box notification after printing log" @ "platform %Win32"
				@ "function %HandleFatalError",
				// To prevent error message ignored in %release configurations.
			/ "character mapping initialization" $=
			(
				/ DLD "implemented" ^ "%unique_ptr" ~ "raw pointer",
				/ "exception message"
			),
			/ "handled exceptions" ^ "nested exceptions" @ "platform %Win32"
				// It is not supported well by libstdc++ without specific \
					atomic operations support. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58938.
		)
	),
	/ %YBase.YStandardEx.BitSegment $=
	(
		/ @ "class template %bitseg_iterator" $=
		(
			/ $dev "1st template parameter type" -> 'size_t' ~ 'unsigned char'
				$dep_to "template parameter type",
			/ "2nd parameter" @ "constructor" -> 'size_t' ~ 'unsigned char',
			+ "static constexpr data member %lsb" @ "class template %Bit",
			* DD "wrong comment about meaning of 2nd parameter" $since b414,
			* "wrong result returned" @ "member function %operator* when \
				%_bEndian is %false or %_vN is not %CHAR_BIT" $since b414
		),
		* $re_ex(b428) $comp "unavailable comparing operations" $since b414
			$dep_from "template parameter type"
			// No operator would be found because of the mismatched template \
				parameter.
	),
	/ DD $design "compressed meta code of '$dep_to', '$dep_from' \
		statements" @ %Documentation $effective
		%Documentation::ChangeLog::(PreAlpha2, PreAlpha3, PreAlpha4, PreAlpha5),
	+ "3 test cases for %ystdex::bitseg_iterator" @ %Test.YBase
),

b548
(
	/ %YFramework $=
	(
		+ $revert_ex(b547) "parameter %int with default argument %SW_SHOWNORMAL"
			@ "member function %WindowReference::Show"
			@ %'YCLib_(MinGW32)'.Win32GUI,
		/ %YSLib.UI $=
		(
			+ "2 function templates %WrapRenderer" @ %Widget,
			+ "function templates %(ActOnHover; SetRendererOnHover); functions \
				%(SetRendererOnHover; OnHover_SetRenderer)" @ %Hover,
			* DLB "ill-formed code due to different types of arguments"
				@ "functions (IncreaseHead, IncreaseSelected)"
				@ "class %SequenceViewer" @ %Viewer $since b525
				// It would fail to compile for Win64.
		),
		/ %Helper $=
		(
			/ @ "class %WindowThread" @ %HostRenderer $=
			(
				- "showing window call" @ "function %WindowLoop",
					// Now window should be shown by user on creating if \
						necessary.
				+ "function %ThreadLoop for %WindowReference parameter",
				+ "constructor for %platform_ex::WindowReference as 2nd \
					parameter" @ "class %RenderWindow"
			),
			/ @ "platform %Win32" @ %HostedUI $=
			(
				- $revert(b430) "function template %MakeHostRenderer",
					// This was useful when %HostRenderer is not public \
						interface. However now it is public.
				- $revert(b401) "all 2 function templates %WrapRenderer",
					// Ditto.
				/ @ "function %ShowTopLevel" $=
				(
					+ "parameter %int with default argument %SW_SHOWNORMAL \
						after 3rd parameter" $dep_to "showing command",
					+ "parameter %bool with default argument %true to \
						determine whether window location is set as widget \
						location",
					/ "reset widget location to origin before showing",
						// To keep invalidation and rendering available.
					/ "returned reference of wrapped renderer" ~ "%void"
				),
				* $comp "window shown without activated via call of \
					%(ShowTopLevel, ShowTopLevelDraggable)" $since b547
					$dep_from "showing command"
			)
			* "missing showing main DS window with activation" @ %DSWindow
				$since b547
		)
	),
	/ %YBase.YStandardEx $=
	(
		(
		+ "function template %underlying" @ %Utilities;
		/ DLD "implemented function %to_string" @ %String $=
		(
			^ $dep_from "%ystdex::underlying" ~ "%underlying_type_t",
			^ "%enable_if_t at return type" ~ "parameter"
		)
		),
		/ "explicitly allowed multiple inclusion for assertion macros"
			@ %CAssert $=
			// Like <cassert>.
		(
			/ "made macro inclusion guard no effect on macro definitions",
			+ "'#undef' macros %(yconstraint, yassume, YAssert, YTrace, \
				YAssertNonnull) before definitions"
		)
	),
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			* "iterator access out of range when colon is not found" @ ".d file"
				$since b546,
			/ DLD "simplified directory search implementation"
		),
		/ %Scripts $=
		(
			* "symbolic linking targets for DLLs" @ "%install-sysroot.sh"
				$since b546
				$= (^ "target '/bin'" ~ "intermediate build directory"),
			/ @ "%common.sh" @ %Scripts $=
			(
				^ DLD 'hash' ~ 'command -v' @ "function %SHBuild_InstallDir",
				/ "hid 'hash' error output"
					@ "functions %(SHBuild_Install, SHBuild_InstallDir)"
			)
		)
		/ @ "%msys2-pacman-update.sh" $=
		(
			/ @ "necessary update command line" $=
			(
				+ '--needed',
				+ 'mingw32/mingw-w64-i686-binutils-git',
				- 'make'
			),
			+ "echo for update command line",
			+ 'pacman -S --needed mingw32/mingw-w64-i686-gdb \
				mingw32/mingw-w64-i686-nasm msys/rsync'
		)
	)
),

b547
(
	/ %YBase $=
	(
		/ %YStandardEx.Functional $=
		(
			/ @ "class template %call_projection" $=
			(
				/ DLD "class-key" @ "first template parameter"
					@ "declaration" -> 'class' ~ 'template',
					// Since there has existed specialization for class types \
						like instances of %std::function.
				/ @ "static function %call"
					@ "specialization for function types" $=
				(
					/ "explicitly marked last parameter with %yimpl",
					^ "%yforward for passed function arguments" ~ "%std::move",
					* "missing returning value" $since b447
						// It is wrong for non-void return value.
				),
				+ "specialization for std::tuple instances" $dep_to "apply_impl"
			),
			+ "function template %apply" $dep_from "apply_impl"
				// Implementated of %std::experimental::apply in WG21 N4023.
		),
		* "missing '&'" @ "1st parameter" @ "function template %expect"
			@ %YTest.Test,
			// It caused failure for result value which cannot be \
				copy-initialized or redundant copy for others.
	),
	/ @ %Test.YBase $=
	(
		/ @ "group %YStandard.Functional" $=
		(
			+ "1 test case for %ystdex::apply" $dep_from
				("%ystdex::apply" @ %YBase.StandardEx.Functional),
			+ "1 test case for %ystdex::make_expanded",
		),
		+ "group %YStandardEx.Mixin"
			$= (+ "1 test case for mixin interface"),
		+ "group %YStandardEx.Container"
			$= (+ "4 test cases for %ystdex::range_size"),
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ "function templates %(FetchEpoch; FetchElapsed)"
				@ %Service.YTimer,
			+ "using %platform::(usystem, GetFileModificationTimeOf,
				GetFileSizeOf)" @ %Adaptor.YAdaptor,
			/ %UI $=
			(
				/ DLD "implemented inline function %CheckChildName" @ %Loader
					^ "macros %(PDefH, ImplRet)",
				+ "class %PseudoRenderer" @ %Renderer
			)
		),
		/ %YCLib_(MinGW32) $=
		(
			* DLB "strict ISO C++ code conformance" @ %MinGW32 $since b545
				// G++ accepted but Clang++ complained. See also \
					http://stackoverflow.com/questions/7411515/why-does-c-require-a-user-provided-default-constructor-to-default-construct-a.
				$= (* "missing user-provided default constructor for default \
					initialized const object"
					@ "static member function %Win32Exception::GetErrorCategory"
					$= (/ $design ^ "value initialization"
						~ "default initialization")),
			/ "specified showing window without activation"
				@ "function %WindowReference::Show" @ %Win32GUI
				$= (^ DLD "%SW_SHOWNOACTIVATE" ~ "%SW_SHOWNORMAL");
		),
		/ @ "class %Logger" @ %YCLib.Debug $=
		(
			* DLD DD "wrong note" @ "comment" @ "private function %DoLogRaw"
				$since b510,
			/ @ "function %DoLogException" $=
			(
				/ DD "explicitly specified sequential and continuation \
					logging guarantee" @ "comment",
				/ "merged exception handling and logging thrown when \
					processing input exception",
					// Simplified implementation.
				/ "removed ending period" @ "format string"
					// To avoid double period.
			)
		),
		/ %YBaseMacro $=
		(
			/ DD "all interface comments" ^ "Doxygen notation"
			+ "macros %(TryExpr, TryRet, CatchExpr, CatchIgnore, CatchRet, \
				CatchThrow)"
		),
		/ DLD "simplified exception handling" ^ $dep_from ("macros %(TryExpr, \
			TryRet, CatchExpr, CatchIgnore, CatchThrow)" @ %YBaseMacro)
	),
	/ %Tools $=
	(
		/ %SHBuild.Main $=
		(
			/ DLD "simplified time printing" ^ "%FetchElapsed" $dep_from
				%YFramework.Service.YTimer,
			(
			^ "independent logger" ~ "common logger";
			+ "message group support";
			/ $comp $revert(b546) "shown log from"
				%YFramework.YSLib.Service.File,
			+ "group filtering options ('-xloggd', '-xlogge')"
			),
			/ DLD $revert(b545) "merged function %Wait" -> "%Build"
				@ "class %BuildContext",
			/ DLD "simplified exception handling" @ %Tools.SHBuild.Main
				^ $dep_from ("macros %(TryExpr, CatchExpr, CatchIgnore, \
				CatchRet)" @ %YBaseMacro),
			(
			/ DLD "simplified options and environment variables handling";
			/ DLDI "simplified function %PrintUsage",
			* $comp "wrong description for %LIBS" $since b546,
			- $dev "option macros"
			)
		),
		/ %Scripts $=
		(
			+ "extra arguments passed to %SHBuild command"
				@ "%SHBuild-self-host.sh",
			/ "%common-options.sh" $=
			(
				* "wrong '-Wnon-virtual-dtor' and \
					'-Wzero-as-null-pointer-constant'" @ "default value"
					@ "%CFLAGS_WARNING" $since b540,
					// They are for C++/ObjC++ but not for C.
				(
				+ "implementation-specific options support variables \
					%(CXXFLAGS_IMPL_WARNING, CXXFLAGS_IMPL_OPT)";
				+ "Clang++ support"
				)
			),
			/ @ "install-header.sh" $=
			(
				(
				- "redundant 'pushd' call";
				* $comp "strict POSIX shell compatibility" $since b515
				),
				* "behavior when the script is not at current working directory"
					$since b515
			)
		)
	),
	/ DLD "simplified exception handling" @ %ShlReader ^ $dep_from
		("macros %(TryExpr, TryRet, CatchExpr, CatchIgnore)" @ %YBaseMacro)
),

b546
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ ('using std::begin;', 'using std::end;') @ %Adaptor.YContainer,
			/ "level" @ "all traces" -> "%Debug" ~ "%Informative"
				@ %Service.File,
			/ %Core.YCoreUtilities $=
			(
				* DLB "missing updating Microsoft VC++ project for renaming" $since
					b539,
				/ "function %WriteEnvironmentVariable"
					=> "%FetchEnvironmentVariable"
			),
			/ %Service $=
			(
				/ @ %Service.YFileSystem $=
				(
					* "failed calling for absolute paths"
						@ "function %EnsureDirectory" $since b476,
						// Missing check for directory existence so permission \
							denied error occurred when try to create the root \
							directory.
					* "wrongly ignored 2nd parameter"
						@ "function %NormalizeDirecoryPathTail" $since b540
				),
				* "failed calling for absolute paths"
					@ "function %EnsureDirectory" @ %YFileSystem $since b476,
					// Missing check for directory existence so permission \
						denied error occurred when try to create the root \
						directory.
				/ DLD "implemented 2 inline functions %operator<<" @ %File
					^ "macros %(PDefHOp, ImplRet)"
			)
		),
		/ %NPL $=
		(
			/ %Lexical $=
			(
				+ "function %HandleBackslashPrefix",
				/ @ "class %LexicalAnalyzer" $=
				(
					(
					+ "alias-declaration %PrefixHandler";
					+ "parameter %PrefixHandler with default argument \
						%HandleBackslashPrefix"
						@ "functions %(ParseByte, ParseQuoted)"
					),
					/ DLD "extracted implementation of unescaping and prefix \
						handling" @ "functions %(ParseByte, ParseQuoted)",
					+ "explicitly defaulted (copy, move) (constructor, \
						%operator=)"
				),
				+ ('using YSLib::begin;', 'using YSLib::end;')
					$dep_from %YSLib.Adaptor.YContainer
			),
			/ @ "class %Session" @ %SContext $=
			(
				+ "alias-declaration %CharParser",
				+ "functions %(DefaultParseByte, DefaultParseQuoted)";
				/ "constructor for %string" -> "2 constructor template with \
					%CharParser parameter and %DefaultParseByte default \
					argument",
				+ "%CharParser parameter and %DefaultParseByte default argument"
					@ "constructor for %TextFile",
				+ "explicitly defaulted (copy, move) (constructor, %operator=)",
				+ "function %GetBuffer"
			)
		),
		/ DLB "removed definition %(cp17, cp2026)" @ %CHRLib.MapEx
			^ "conditional inclusion",
			// To eliminate [-Wunused-variables] when [-fwhole-program] is \
				turned on.
		- "redundant locking" @ "function %FetchCommonLogger" @ %YCib.Debug
			// Static object is guaranteed to be thread-safety on \
				initialization by ISO C++11.
	),
	/ %Tools $=
	(
		- "all .cmd files",
			// No actual commands other than calling corresponding .sh files \
				here.
		+ %Scripts $=
		(
			+ "%install-sysroot.sh",
			+ "%SHBuild-appconf.sh"
		)
	),
	/ %SHBuild $=
	(
		/ %Main $=
		(
			+ "global uptime" @ "message output",
			+ "dependencies tracking for '.d' files generated by the compiler",
			+ "%(ARFLAGS, LD, LDFLAGS) support",
			/ DLD "simplified environment variable printing",
			(
			/ "directly generated final target without intermediate '.a' \
				targets";
				// See $2014-10 @ %Documentation::Workflow::Annual2014.
			+ "mode support to select %AR or %LD to be used for final target"
			),
			/ "added 8 to message output level" @ "timestamp check",
				// The output level of command line is still %Debug.
			* DLB "redundant ';' after declaration with %ImplRet" $since b522,
				// To eliminate [-Wpedantic].
			/ DLD @ "function %PrintUsage" $=
			(
				+ $build "declaration",
					// To eliminate [-Wmissing-declarations].
				/ "simplified parameter type"
			)
		),
		/ "build scripts" $=
		(
			/ @ "%SHBuild-YSLib.sh" $=
			(
				/ "exported %AR",
				+ "'export LANG=C' before commands",
					// See $2014-10 @ %Documentation::Workflow::Annual2014.
				+ "dynamic library support" $dep_from %Main,
				+ DLD "variable %SHBuild to simplified call",
				* "missing splitting shell arguments on calling %SHBuild" $since
					b539
					// This made the indirectly passed options would be the \
						single value within space characters (if any).
			),
			* "shebang specifying '/usr/bin/sh' without POSIX shell \
				compatibility" $since b474
				$= (/ "all '/usr/bin/sh'" -> '/usr/bin/bash'),
			+ "functions %(SHBuild_2u, SHBuild_2w, SHBuild_Install, \
				SHBuild_InstallDir, SHBuild_Install_Exe, SHBuild_Install_Link, \
				SHBuild_EchoVar_N" @ "%common.sh",
			/ DLD "simplified variable echo" ^ "function %SHBuild_EchoVar_N"
				$dep_from "%common.sh"
			/ "%SHBuild-options.sh" => "%common-options.sh",
			/ @ "%common-bootstrap.sh" $=
			(
				* "missing check for empty base directory" $since b538
					$= (/ "set %SHBuild_BaseDir default value as '.'"),
				(
				$dep_from "%common-options.sh";
				/ "%CXXFLAGS setting" -> "including %common-options.sh.";
				/ "attached %CXXFLAGS '-fno-lto'"
					// See comments in the file.
				);
				=> "%SHBuild-bootstrap.sh"
			),
			/ DLD "echo commands" $=
			(
				// For simplicity.
				- "all quotes if no substitution and escape sequence needed",
				^ "single quote" ~ "double quote"
					@ "arguments with escape sequence and without substitution"
			),
			/ DLD ^ "POSIX compliant variable substitution and bash specific \
				'.'" ~ "double brackets",
				// For simplicity and avoiding unspecified behavior.
			/ "%build.sh" $=
			(
				+ "build message";
				=> "%SHBuild-build.sh"
			),
			/ "%self-host.sh" => "%SHBuild-self-host.sh";
			/ "all .sh scripts" >> $dep_from %Scripts
		)
	),
	/ %YBase.YStandardEx $=
	(
		/ %Container $=
		(
			+ "2 function templates %range_size",
			+ "2 function templates %concat";
			+ "2 function templates %vector_concat"
		),
		+ "2 function templates %exists_substr" @ %String
	),
	/ DD $term "normalized" $=
	(
		/ "all '标准库头文件'" -> '标准库头' $effective
			@ %Documentation.(LanguageConvention, YBase, YFramework, YSLib),
				// Headers are not guaranteed to be files.
		/ "all '导致未定义行为'" -> '引起未定义行为' $effective
			@ %Documentation.(YBase, YFramework), YBase.YDefinition,
			YFramework.(Helper.Environment, YSLib.(Service.File, UI.TreeView))
	),
	+ $dev $repo "pattern glob 'sysroot/*'" @ "file %.hgignore"
),

b545
(
	/ %YFramework $=
	(
		+ "class template %GRecursiveCallContext" @ %YSLib.Core.YFunc,
		* "wrong 'ynothrow'" @ "all exception classes" $effective
			@ %(YSLib.Core.Exception $revert(b319) $since b319, YCLib.Host
			$since b492, YCLib_(MinGW32).MinGW32 $since b427),
			// Since the underlying string construction could throw (though \
				rarely), no exception guarantee is not hold.
		/ @ "class %Exception" @ %YCLib.Host $=
		(
			/ "base class %YSLib::LoggedEvent" -> "%std::system_error",
			/ "default level argument" ^ "%YSLib::Emergent" ~ '{}',
			+ "%std::error_code parameter" @ "constructor",
			+ "constructor with %int and 'const std::error_category&' \
				parameters",
			+ "function %GetLevel"
		),
		/ @ "class %Win32Exception" @ %YCLib_(MinGW32).MinGW32 $=
		(
			+ "static member function %GetErrorCategory",
			/ "default level argument" ^ "%YSLib::Emergent" ~ '{}',
		),
		/ %NPL.Lexical $=
		(
			* "wrong function name" $since b508 $=
			(
				/ $revert_ex(b508) "%Unescape" => "%Escape",
				/ "%UnescapeLiteral" => "%EscapeLiteral",
			),
			+ 'using YSLib::vector;',
			+ "class %UnescapeContext",
			+ "function %NPLUnescape",
			/ @ "class %LexicalAnalyzer" $=
			(
				/ DLD "implemented intermediate list state of unescaping \
					position" ^ "%vector" ~ "%list",
					// Some performance improved.
				/ "return value" @ "function %GetQuotes"
					-> 'const vector<size_t>&' ~ 'const list<size_t>&'
					$dep_from 'using YSLib::vector;',
				(
				/ DLD "implemented unescaping" ^ $dep_from "%UnescapeContext";
				- "limitation of max character number of escaped sequence; \
					data member %MaxEscapeLength"
				),
				(
				+ "alias-declaration %Unescaper",
				$dep_from "%NPLUnescape";
				+ "unescaper parameter with default argument %NPLUnescape"
					@ "function %ParseByte",
				+ "function %ParseQuoted"
				),
				* "missing concatenating with backslash at end of lines" $since
					b335,
					// Unimplemented previously, but wrongly documented as \
						feature.
				/ DLD "implemented function %Decompose" ^ "range-based \
					%ystdex::split_l" ~ "iterators-based %ystdex::split_l"
			)
		),
		/ "thrown %std::runtime_error" ~ "%Exception" @ %YCLib_(Android).Android
			// Because the constructors are changed, now they can not be \
				directly constructed without error code.
	)
	/ %Tools.SHBuild.Main $=
	(
		/ DLD "implemented by recursive context" $dep_from
			%YFramework.YSLib.YFunc,
		+ "timestamp check for static linking",
		+ "environment variable settings" @ "usage"
	),
	/ DLD $re_ex(b470) "reduced redundant 'return std::move' usage"
		@ "return-statement" $effective @ %(YBase.YStandardEx.Algorithm,
		YFramework.YSLib.(Service.YFileSystem, UI.UIContainer))
	/ %YBase.YStandardEx $=
	(
		+ "function template %(pop_back_val, pop_front_val)" @ %Container,
		+ 2 "function templates %split_if_iter" @ %String
	)
),

b544
(
	/ %YFramework $=
	(
		/ %YCLib.FileSystem $=
		(
			/ @ "class %HDirectory" @ %YCLib.FileSystem $=
			(
				(
				* "wrong invariant" $since b543;
					// The initial state is not correct.
				* $comp "assertion failed" @ "startup" @ "platform %DS" $since
					b543
					// Strangely, though the source code was same, it was not \
						reproduced on platform %Android.
				),
				/ DLD "simplified some assertions for invariant"
					@ "member functions",
				* "wrong file type filtered" @ "function %GetNodeCategory"
					@ !"platform %Win32" $since b543
					// The 'DT_*' is not bitmask.
			),
			/ @ "function template %ufexists" $=
			(
				/ DLD $revert(b413) "implemented" !^ "macros %(PDefH, ImplRet)",
				* "non overloaded non-class argument selected" $orig (@ %YCommon
					$since b305)
			),
			+ "(3 functions; 1 function template) %GetFileModificationTimeOf"
		),
		+ "function %ConvertTime" @ %YCLib_(MinGW32).MinGW32,
		/ DLDI ^ "%ystdex::ntctslen" ~ "%std::char_traits::length" $effective
			@ %(CHRLib::CharacterProcessing, YSLib.Adaptor.Image)
		/ %CHRLib.CharacterProcessing $=
		(
			/ "function template %ucsdup"
				-> "%MakeUCS2LE with non-constructible constraint",
			+ "function template %MakeUCS2LE for direct forwarding with \
				constructible constraint",
			(
			/ "function templates %MakeUCS2LEString" => "%MakeUCS2LE"
			+ "default argument 'std::basic_string<char16_t>'" @ "template \
				parameter %_tDst" @ "all function templates %MakeUCS2LE"
			),
			/ DLD "simplified UCS-2 directly construction implementation",
				// Not to be copy any longer.
			- "all function %ucsdup",
			+ "5 function templates %MakeUTF8",
			- "all functions and function template %strdup"
		)
	),
	/ $dev @ "Microsoft VC++ projects" $=
	(
		/ DLD "united all Microsoft VC++ include directories with NMake include \
			search paths (if any)",
		/ "merged All platforms based on platform %MinGW32 for IntelliSense"
			@ "project %YFramework"
		* "wrong NMake include search paths" @ "project %YBase"
			@ "platform %Android" $since b492,
		/ @ "platform %MinGW32" $=
		(
			/ "updated new version of toolchain",
			* "empty paths" @ "configuration %debug" $since b518
		)
	),
	/ %YBase.YStandardEx.CString $=
	(
		+ "unary type trait %is_char_specialized_in_std",
		/ $lib $design "specified implementation"
			@ "function template %ntctslen to call %std::char_traits::length \
			if the specilization are mendated by ISO C++"
			// This may be better for optimization.
	),
	/ %Tools.SHBuild.Tools $=
	(
		/ @ "class %BuildContext" $=
		(
			+ "timestamp check for direct dependency of object file"
				@ "function %Search",
				// Only one dependency is support, i.e. source file for .o file.
			+ $lib $design "ending dot for 'absolute path recognized' message"
				@ "function %Build"
		),
		- DLD "all 'u8' for string literal"
			// The source file is already guaranteed to be encoded as UTF-8.
	)
),

b543
(
	/ $dev "renewed outdated keystore for signing" @ "platform %Android",
	/ %YFramework $=
	(
		* DLB "wrong %CC exported" @ "Makefile" @ "platform %Android"
			$since b492
			// No C source files are currently compiled so no wrong behavior \
				has been detected.
			$= (/ "value '$(PREFIX)g'" -> '$(PREFIX)gcc'),
		/ %YCLib_(MinGW32) $=
		(
			/ %Win32GUI $=
			(
				+ "function %GetBounds" @ "class %WindowReference";
				+ 'using WindowReference::GetBounds;' @ "class %HostWindow"
			),
			/ "all assertions" ^ ("%(YAssert, YAssertNonnull)"
				@ %YCLib.Debug ~ "%yconstraint" $effective @ %COM,
			/ DLD "implemented inline functions %EnsureNonNull" @ %COM
				^ "macros %(PDefH, ImplExpr)"
		),
		/ DLDI "simplified constructor template %WindowThread"
			@ %HostRenderer !^ "%std::mem_fn" @ %Helper.HostRenderer,
		/ %YCLib $=
		(
			/ %YCLib.FileSystem $=
			(
				/ $dev "all conditional inclusive with %YCL_Win32 as first \
					branch",
					// Regardless of %YCL_API_FILESYSTEM_POSIX defined or not.
				/ DLD "simplified directory data implementation"
					@ "platform %Win32",
				/ @ "class %HDirectory" $=
				(
					+ "move constructor to ensure moved object has a clear \
						state and avoid redundant copy on platform %Win32";
					+ "invariant guarantee for availability of member",
						// Otherwise null pointer could be wrongly used.
					+ "invariant check assertions" @ "member functions",
					/ "supported detecting file category other than regular \
						and directory" @ "function %GetNodeCategory"
				),
				(
				(
				$dep_from %YBase.YStandardEx.Path;
				/ "enum class %NodeCategory" $=
				(
					!^ "%ystdex::path_category for enumerators",
					^ "std::uint_least32_t as underlying type" ~ "%PathCategory",
					(
					/ "made %Special synonymous of 'Directory | Missing'",
					- "%(HardLink, Reparse)",
						// %HardLink is irrelevant to single file system node. \
							%Reparse is too specific to the implementation \
							(i.e. NTFS).
					(
					+ "enumerator %MountPont";
					/ "made %Junction synonymous of %MountPoint",
						// In NTFS, junctions are implemented by reparse \\
							points sharing same tag with mount point. See \
							http://www.codeproject.com/Articles/21202/Reparse-Points-in-Vista.
					/ "made %Link cover %(SymbolinkLink, MountPoint)"
					);
					/ "made enumerators %(Directory, Link, Missing) orthogonal \
						with other categories of values",
					)
				),
				/ %YSLib.Adpator.YAdaptor;
				- "enum class %PathCategory"
				),
				+ "bitmask operations for %NodeCategory"
			),
			/ "all assertions" ^ ("%(YAssert, YAssertNonnull)"
				@ %Debug) ~ "%(yconstraint, yassume)"
				$effective @ %(FileSystem, Keys)
		),
		/ %YSLib $=
		(
			- "function %ClassifyPath" @ %Service.FileSystem;
			- 'using platform::PathCategory;' @ %Adaptor.YAdaptor
		);

	),
	/ %YBase $=
	(
		/ %LibDefect.String $=
		(
			/ "allowed %std::(stof, stod) defined"
				@ '!(defined(__clang__) && defined(__BIONIC__))',
				// OK for G++ 4.8.2 on Android. Though %std::stold is still \
					missing.
			/ @ "namespace %std" @ "defined %__BIONIC__" $=
			(
				+ 'using ::strtoll;',
				+ 'using ::strtoull;';
				/ "allowed %(stoll, stoull) defined"
			)
		),
		/ %YBase.YStandardEx $=
		(
			- $dev $impl $revert(b542) "workaround for platform %Android"
				@ "%ston" @ %String @ "defined %__BIONIC__"
				$dep_from "%std::(stoll, stoull)" @ %LibDefect.String,
			/ %Concurrency $=
			(
				+ "entering and exiting callbacks as parameter"
					@ "constructors %(thread_pool; task_pool)",
				/ @ "class %task_pool" @ $=
				(
					+ "function templates %(poll, poll_for, poll_until)";
					/ DLD "simplified function templates %(wait, wait_for,
						until)" ~ "%(poll, poll_for, poll_until)"
				),
				+ "function %to_string for %std::thread::id"
			),
			+ "enum class %path_category; function template %classify_path"
				@ %Path
		),
	),
	/ $doc %Documentation $=
	(
		+ %LanguageConvention
			$= (+ "interoperability rules");
		/ %CommonRules $=
		(
			/ "language specific rules" >> %LanguageConvention,
			/ "updated references"
		)
	),
	/ %Tools $=
	(
		* "spelling error" @ "comment" @ "%make-clang-android.sh" $since b497,
		* "possible interleave output across threads" @ %Tools.SHBuild.Main
			$since b519
			$= (* "missing '-mthreads'" @ "default value" @ "%CXXFLAGS"
				@ "%common-bootstrap.sh" $since b538 $orig (@ "%CXXFLAGS"
				$since b515 $orig (@ "G++ command" $since b474)) @ "%build.sh"))
	)
),

b542
(
	/ %Tools.SHBuild.Main $=
	(
		/ "only specified archive linked"
			$= (/ "passed path among recursive calls of %BuildContext::Search")
		/ "exception message output" $=
		(
			^ "raw number" ~ "hexadecimal number";
			^ $re_ex(b541) "%to_string" ~ "%ystdex::sfmt"
		),
		/ @ "class %Build Context" $=
		(
			/ @ "function %Search" $=
			(
				/ DLD "ignored directory early in enumerating children nodes \
					at first time",
				/ $dev "parameters" ^ "%Path" ~ "%string"
			),
			/ @ "member function %Build" $dep_from
				%YFramework.YSLib.Service.FileSystem $=
			(
				/ DLDI "simplified" ^ "%MakeNormalizedAbsolute"
				- $comp "check for empty %SRCPATH input"
			)
		),
		/ DLD "simplified parameter type" @ "function %PrintUsage",
		/ DLD "simplified %main" ^ $dep_from ("%MakeWConsole"
			@ %YFramework.YCLib_(MinGW32).Consoles),
		/ DLD "implemented option parsing" ^ $dep_from
			("%ystdex::(ston, filter_prefix)" @ %YBase.YStandardEx.String)
		/ "message output" $=
		(
			+ "%Debug level with %DarkGreen",
			/ "%Informative level color" -> "%Magenta" ~ "%DarkGreen",
			/ "%Notice level color" -> "%Cyan" ~ "%Magenta",
			+ "output for to be currently built",
				// To allow inspect the file built with detail command output \
					disabled.
			/ "level of command output" -> "%Debug" ~ "%Informative",
			/ "level of counting for objects and ignoring files"
				-> "%Informative" ~ "%Notice"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Service.FileSystem $=
			(
				+ 'yconstexpr size_t MaxPathLength(yimpl(1 << 10))';
				/ $dev "default arguments"
					@ "function %FetchCurrentWorkingDirectory"
					^ "%MaxPathLength" ~ '1 << 10',
				+ "function %MakeNormalizedAbsolute"
			),
			/ %UI $=
			(
				/ %YGUI $=
				(
					* "missing activation of timer" $orig (@ "member function \
						%InputTimer::RefreshClick" $since b416),
					/ @ "member function %GUIState::RefreshTap" $=
					(
						/ "swapped 2nd and 3rd parameter",
							// The duration are more likely default value to \
								be simple. This is also good on compatibility \
								after refactor once the duration setting is \
								stored.
						* "missing update of tap location on interruption from \
							timer" $since b541,
						* "returned wrong value when tap area check failed"
							$since b541,
							// Now it specified to be 0, not 1.
						* "missing update of tap counter when tap area check \
							failed" $since b541,
						* "wrong relative tap area origin" $since b541
							// It should be (TapArea.Width / 2, TapArea.Height \
								/ 2) rather than (0, 0).
					)
				),
				/ @ "class %TextBox" @ %TextBox $=
				(
					+ "function %SelectAll",
					/ @ "handling event %TouchDown" $=
					(
						/ "performed no-op if move not detected" @ "%TouchHeld";
							// This is only an optimization previously, \
								however necessary for multiple taps now, \
								otherwise the operation of %TouchDown would be \
								overriden by %TouchHeld unconditionally, \
								eventually.
						+ "selecting all on triple tap",
						+ "selecting one character on double tap"
					)
				)
			)
		),
		+ "function %MakeWConsole" @ %YCLib_(MinGW32).Consoles
	),
	/ @ %YBase $=
	(
		/ DLD "all macros for implementation" @ %YSandardEx
			-> "prefixed with %YB_Impl" $effective @ %(Operators, AnyIterator,
			Rational),
		/ DLD "all macros for implementation" @ %LibDefect
			-> "prefixed with %YB_LibDefect" $effective @ %String,
		+ "function templates %ston, filter_prefix" @ %YStandardEx.String;
	),
	/ "double click to auto scroll" ^ "%TouchDown handler" ~ "%Click handler"
		%YReader.ShlReader
		// This is still slow in debug configurations. So sometimes it would \
			be no effect.
),

b541
(
	/ $dev "differentiate general callable types and function object types"
		@ "template type parameters" $=
	(
		(
		/ "animation updater" ^ "%_fUpdater" ~ "%_fCallable"
			@ %YFramework.YSLib.UI.Animation;
		/ "other types not suited for pointer to members" -> "%_func"
			~ "%_fCallable" $effective @ %(YBase.(YStandardEx.(Algorithm, Cache,
			Container, Exception, Functional, Utilities), YTest.(Test, Timing)),
			YFramework.(Helper.(HostedUI, HostRenderer, HostWindow),
			YSLib.(Adaptor.Image, Core.(Task, YApplication, YEvent, YFunc),
			Service.FileSystem, UI.(Animation, YWidgetEvent))))
		),
		/ "member type %callable_type" @ "class template %thunk"
			@ %YBase.YStandardEx.Functional => "%caller_type"
	),
	* DLD "missing EOL normalization" @ %YTest.Timing $since b538,
	/ %YFramework $=
	(
		/ DLD "implemented inline functions" ("%GetHostRendererPtrOf"
			@ %Helper.HostedUI, ("%is_undereferenceable" @ %Adaptor.Image,
			"%FetchShellHandle" @ %Core.YApplication) @ %YSLib)
			^ "macros %(PDefH, ImplRet)",
		/ %YSLib.UI $=
		(
			/ @ "class %TreeList" @ %TreeView $=
			(
				/ "functions %(CollapseNode, ExpandNode) returned previous \
					node state" ~ "boolean value",
				+ "support for handling left and right key to collapse or \
					expand the node and then switch the selected position if \
					possible",
				+ "support for double tap to collapse or expand item like \
					single indent box tap" $dep_from %YGUI
			),
			/ %YGUI $=
			(
				/ "function %RefreshClick" => "RefreshTap"
					@ "class %InputTimer",
				/ @ "class %GUIState" $=
				(
					* "missing reset tap count" @ "function %Reset" $since b540,
					(
					+ 'Size TapArea{4, 4}',
					(
					+ "tap location state";
					+ "function %TapLocation"
					);
					+ "tap maximum value, location memorization and timeout \
						duration support" @ "function %RefreshTap"
					)
				)
			)
		),
		* "wrong 'ynothrow'" @ "constructor %HDirectory" @ %YCLib.FileSystem
			$since b411
			// The implementation would throw if failed, which violates the \
				exception-specification.
	),
	(
	/ $dep_from %YFramework.YSLib.UI.YGUI;
	/ "restricted double tap area" @ %YReader.ShlReader
	),
	/ %Tools.SHBuild.Main $=
	(
		/ "ensuring output directory implementation" $=
		(
			/ "merged with exception of int \
				value as original top level and message string as original \
				recursive search on error",
			+ "message output"
		),
		/ @ "member function %BuildContext::Search" $=
		(
			- "purging files before compiling",
				// Now the output directory is not guaranteed to be clean for \
					only containing the files built.
			/ DLD "stored list of files to built",
				// To make the correct output after removed purging, the files \
					list for the linker is recorded. This may introduce a \
					command line out of host limit, to be fixed future.
			/ "split search for directories and files",
				// Now recursive search of subdirectories are always previous \
					than the files in the same parent directory.
			+ "message output for count of files to be built",
			/ "created out directory only if there exists file to be built",
			* "non-regular files treated as directories" $since b474,
			* $re_ex(b539) "missing quoting compiler output object paths"
				$since b474
				// If the path contained space, the command was then wrong.
		),
		/ DLD "all message output except for hexadecimal number" ^ "%to_string"
			~ "%ystdex::sfmt"
	)
),

b540
(
	/ %YFramework $=
	(
		/ %YCLib_(MinGW32) $=
		(
			+ "3 inline functions %(WCSToUTF8, UTF8ToWCS)" @ %MinGW32,
			/ @ "class %WConsole" @ %YCLib_(MinGW32).Consoles $=
			(
				* "missing limit 4-bit value for color components"
					@ "function %ComposeAttributes" $since b519,
				- "style component" @ "static functions %(ComposeAttributes, \
					DecomposeAttributes)",
					// The 2 color components are now 4-bit with dark/bright \
						style.
				- "functions %(UpdateStyle; SetStyle)",
				- "function %SetColor"
					// Use %Update with argument instead.
			)
		),
		/ DLD "simplified Unicode conversion" @ "platform %Win32"
			@ %YCLib.FileSystem ^ (("%platform_ex::UCS8ToWCS"
			~ "%CHRLib::ucsdup"), ("%platform_ex::WCSToUTF8"
			~ "%CHRLib::strdup")) $dep_from %YCLib_(MinGW32).MinGW32,
		/ %YSLib $=
		(
			+ "function template %NormalizeDirecoryPathTail"
				@ %Service.FileSystem,
			/ %UI $=
			(
				/ @ "class %GUIState" @ %YGUI $=
				(
					+ 'InputTimer TapTimer{};',
					+ "function %RefreshTap";
					+ "implemented tap state refreshing";
					+ "function %GetTapCount"
				),
				/ @ "class %TreeList" @ %TreeView $=
				(
					/ DLD "split node collapse and expanding implementation";
					+ "functions %(CollapseNode, ExpandNode)"
				)
			)
		)
	),
	/ %Tools.SHBuild $=
	(
		/ %Main $=
		(
			+ "build directory switching support",
			(
			/ DLD "simplified namespace scope using-directives";
			* DLB $comp "ambiguity when %string in %YSLib and %std is not the \
				same" $since b538
				// Default is the same, configured in \
					%YFramework::YSLib::Adaptor::YContainer.
			),
			* "unhandled exception if console object failed to construct" $since
				b520,
				// For example, when the output is redirected.
			/ "message output" $=
			(
				+ "fill '0'" @ "hexadecimal error code output",
				/ DLD "implemented" ^ "C standard I/O" ~ "I/O streams",
					// This make some implementation simpler and leads to \
						significantly smaller binary file.
				/ "executed command echo" ^ "%PrintInfo"
					~ "directly standard I/O",
				/ "reset color attributes for error code output",
				+ "more colored output for different levels"
					// %Magenta for %Notice and %DarkGreen for %Informative.
			),
			/ DLD "simplified command call" ^ "%platform::usystem"
				~ "%::_wsystem",
			+ '-MMD' @ "compiler command"
				// To generate .d file for dependencies.
		),
		/ DLB "build scripts" $=
		(
			(
			+ "%SHBuild-options.sh" $=
			(
				+ "split %(CFLAGS_WARNING, CXXFLAGS_STD, CXXFLAGS_WARNING, \
					CXXFLAGS_COMMON, CXXFLAGS_OPT_DBG) from %COMMON_CFLAGS"
					@ "%SHBuild-YSLib.sh";
				/ "allowing overriding for all variables",
				+ '-Wsign-promo' @ "%CFLAGS_WARNING",
				+ '-Wctor-dtor-privacy' @ "%CFLAGS_WARNING"
					// To make it same as DS Makefile. '-Wnoexcept' is not \
						added now because the lambda to pointer conversion \
						would issue.
			);
			/ DLD "implemented %SHBuild-YSLib.sh" ^ "%SHBuild-options.sh" $=
			(
				- "%COMMON_CFLAGS";
				/ "explicitly unset %(CXXFLAGS_OPT_DBG, CXXFLAGS_COMMON, \
					CXXFLAGS, LDFLAGS) and then specified %LDFLAGS"
					// Use default values in %SHBuild-options.sh for unset \
						variables.
			)
			),
			/ DLD "simplified %SHBuild_BaseDir implemented by one assignment",
			(
			/ "only set value of %SHBuild_BuildDir when not set"
				@ "%(build.sh, self-host.sh, SHBuild-YSLib.sh)";
			/ "set default value of %SHBuild_ToolDir as '${SHBuild_Build_Dir}'"
				@ "%(build.sh, self-host.sh, SHBuild-YSLib.sh)";
				// The default tool is used within build directory.
			/ "differentiate tools directory variable as %SHBuild_ToolDir"
				~ "%SHBuild_BaseDir" @ "%(common-bootstrap.sh; build.sh, \
				self-host.sh, SHBuild-YSLib.sh)",
			/ "%SHBuild calls" ^ '${SHBuild_ToolDir}/SHBuild' ~ './shbuild'
				@ "%SHBuild-YSLib.sh",
			),
			/ DLD $revert_ex(b539) "simplified toolchain setting"
				@ "%SHBuild-YSLib.sh" $=
			(
				+ 'export AR=gcc-ar',
				+ 'source ${SHBuild_ToolDir}/common-toolchain.sh';
				- "'AR=gcc-ar' before commands"
			),
			- "all unused %SHBuild_Me",
			/ @ "%common-bootstrap.sh" $=
			(
				+ 'export AR="gcc-ar"',
				+ 'export' @ "default value setting" @ "%(CXXFLAGS, LDFLAGS)",
				+ "%AR echo"
			)
		)
	),
	+ DLB '-Wsign-promo -Wctor-dtor-privacy' @ "options"
		@ "Code::Blocks projects" @ "platform %MinGW32",
	/ $dev $lib @ "class %ShlTextReader" @ %YReader.ShlReader
		$dep_from %YFramework.YSLib.UI.YGUI $=
	(
		/ "double click implementation" ^ 'FetchGUIState().TapTimer'
			~ "%ShlTextReader::tmrInput",
		- "protected data members %ShlTextReader::(tmrInput, nClick)"
	)
),

b539
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			(
			/ DLD ^ "timer initialization" ^"%GetTicks" ~ "%StartTicks"
				%Service.YTimer;
			- 'using platform::StartTicks;' @ %Adaptor.YAdaptor
			),
			/ %Core.YCoreUtilities $=
			(
				/ DLB "file %ycutil.h" => "%YCoreUtilities.h",
				+ DLB "file %YCoreUtilities.cpp";
				+ "function %WriteEnvironmentVariable"
			)
		),
		/ %YCLib $=
		(
			/ %Timer $=
			(
				- "function %StartTicks",
					// For platform %DS, this is implicit called when \
						necessary. For other platforms this is not needed.
				/ $lib "implemented timer" @ "platform %Win32" $=
				(
					^ "%std::chrono::steady_clock" ~ "multimedia and QPC APIs";
					* $comp "missing call to '::timeEndPeriod' on exit" $orig
						(@ %YCommon $since b298)
				),
				/ $lib "implemented timer" @ "platform %Android"
					^ "%std::chrono::steady_clock" ~ "::clock_gettime"
			),
			+ "function %platform::usystem" @ %YCommon
		),
		- "linked library %winmm" @ "Code::Blocks projects"
			@ "platform %MinGW32" $dep_from "platform %Win32"
			@ %YFramework.YCLib.Timer
	),
	- $doc "issues" @ %Documentation::Meta;
		// Issues are now fully tracked on \
			https://bitbucket.org/FrankHB/yslib/issues.
	/ %YBase.YStandardEx $=
	(
		/ %Concurrency $=
		(
			* "wrong return type"
				@ "function templates %(pack_task, pack_shared_task)"
				$since b358;
			/ @ "class %thread_pool" $dep_from "%pack_shared_task" $=
			(
				/ DLD "implemented function template %wait_to_enqueue"
					 ^ "%pack_shared_task",
				+ "function templates %(wait, wait_until)" @ "class %task_pool"
			)
		),
		/ @ "function template %boxed_value" @ %Utilities $=
		(
			* "missing excluding of 'boxed_value&'"
				@ "constructor template with 1 function parameter"
				$since b477
				$= (/ "constructor template" -> "explicitly defaulted \
					(default, copy, move) constructors and 2 constructor \
					templates"),
			+ "explicitly default (copy, move) %operator="
		),
		/ %Exception $=
		(
			* $revert_ex "function template %raise_exception" @ %Exception
				$since b538,
			/ DLD 'typename' @ "parameter"
				@ "function template %get_nested_exception_ptr" -> 'class',
			+ "function template %handle_nested"
		),
	),
	/ %Tools.SHBuild $=
	(
		/ %Main $=
		(
			/ @ "class %BuildContext" $=
			(
				(
				/ "parallel build" @ "function %Call" $=
				(
					/ "stopped launching new task once non-zero result is met",
					+ "parameter and default argument to allow force \
						serialized build"
				),
				+ "function %CheckResult";
				+ "function %CallWithException"
				),
				+ "function %GetLastResult",
				/ @ "function %Search" $=
				(
					* "broken archive output for parallel build" $since b520 $=
					(
						* "missing check for non-zero result to raising \
							exception after compiling and before linking" $since
							b520 $dep_from
							"functions %(GetLastResult, CheckResult)",
							// Missing objects which failed to compile as the \
								linked result.
						* "missing synchronization after linking with children"
							$since b520,
							// Probable missing to link some linker output of \
								children.
						(
						- $revert_ex(b538)
							"showing number unfinished waiting tasks";
							// The total number of unfinished tasks can not be \
								fetched in general if no counter elsewhere.
						* "missing waiting of unfinished tasks not in queue"
							$since b538
							// The reset operation of task pool should be \
								performed unconditionally.
						)
					),
					/ DLD "simplified exception handling" ^ "%CallWithException"
						~ "%Call" $dep_from "function %CallWithException",
					+ "logged for numbers of scanned .a and .o files"
				)
			),
			/ "all failure exit code" -> 'EXIT_FAILURE' ~ '3',
			/ @ "function %::main" $=
			(
				- "handler with return value other than 'EXIT_FAILURE' or '0'",
					// Now the exit code of the program is 0 on success, \
						otherwise %EXIT_FAILURE.
				- "multilevel try blocks",
				/ "merged %IntException handling" -> "function %PrintException"
			),
			(
			+ "function template %raise_exception";
			(
			/ "explicitly stated command failure" @ "function %raise_exception";
			/ "alias-declaration %IntException" ^ "%std::runtime_error"
				~ "%std::exception";
			),
			/ DLD "some printed information before exception throwing"
				-> "exception messages"
			),
			* "missing set %Err as log argument" @ "function %PrintException"
				$since b538,
			/ @ "function %PrintException" $=
			(
				- "throw clause" @ "handlers";
				/ "nested exception handling" ^ "%ystdex::handle_nested"
					~ "%std::rethrow_if_nested" $dep_from
					"%ystdex::handle_nested" @ %YBase.YStandardEx.Exception
			),
			/ DLD "simplified command line calls",
			- "magic number to make offset of error code",
			(
			+ 'string AR = "ar"' @ "class %BuildContext";
			+ "print value of %(CC, CXX, AR) before build",
			+ "read environment setting for %(CC, CXX, AR) before build"
				$dep_from %YFramework.YSLib.Core.YCoreUtilities $dep_to
				"support overwriting command name"
			),
			* "missing quoting linked object paths" $since b474
				// If the path contained space, the command was then wrong.
		),
		/ DLB @ "%SHBuild-YSLib.sh" $=
		(
			- '-ffat-lto-objects' @ "%COMMON_CXXFLAGS",
			+ "'AR=gcc-ar' before command" $dep_from
				"support overwriting command name",
				// Otherwise further linking using the output would probable \
					fail due to lack of '-ffat-lto-objects'
			+ '-xid,Android' @ "%SHBOPT"
				// Make it same as the Code::Blocks project.
		),
		(
		+ "%common-toolchain.sh"
			$= (+ "setting of %LD");
		/ DLB "merged toolchain setting" @ "%common-bootstrap.sh"
			-> "%common-toolchain.sh",
		/ DLB "build" @ "%self-host.sh" ^ "%LD" ~ "%CXX"
		)
	),
	- DLB "all '-ffat-lto-objects'" @ "all release configurations"
		@ "platform %MinGW32" @ "Code::Blocks projects";
		// 'gcc-ar' with linker plugin support must be used instead of 'ar'. \
			And size of the output static library would be less.
),

b538
(
	+ "2 test cases for %ystdex::compose" @ %Test.YBase,
	/ %Tools.SHBuild $=
	(
		(
		+ $dev "%common.sh" $=
		(
			+ "functions %(SHBuild_Pushd, SHBuild_Popd) for silently \
				restoring directory",
			+ "function %SHBuild_EchoVar to output colored variable value",
		);
		+ "%common-bootstrap.sh" $=
		(
			+ "shell variable definitions for building",
			+ "colored variable value output",
			+ "allowed overriding %(CXX, CXXFLAGS, LDFLAGS)"
		)
		) $dep_to "common build scripts",
		/ @ "%(build.sh, self-host.sh, SHBuild-YSLib.sh)" $=
		(
			* $build "linking failure" $since b535,
			(
			/ "implemented" ^ "common build scripts" $dep_from
				"common build scripts";
			+ $comp "support for variable value output"
			)
		),
		/ %Main $=
		(
			/ DLD "simplified traverse implementation" ^ "%TraverseChildren"
				$dep_from "%TraverseChildren" @ %YFramework.YSLib.FileSystem,
			+ $dev "data members for setting compiler" @ "class %BuildContext",
			+ "printed message when ignored non source files for compiling",
			(
			$dep_from %YBase.YStandardEx.Concurrency;
			/ $dev "simplified implementation of job control"
				^ "%ystdex::task_pool",
			(
			* "missing parallel compiling synchronization with linking" $since
				b520;
				// Thus the 'ar' command might or might not be executed.
			+ "printed message for unfinished tasks"
			)
			),
			- $dev "static assertions for character types",
				// %YFramework.YCLib.FileSystem is already included.
			/ "simplified message printing" $=
			(
				/ @ "function %PrintInfo" $=
				(
					+ DLD "level parameter with default argument 'Notice'",
					^ "implemented" ^ "%FetchCommonLogger" ~ "%YTraceDe"
						// This trace is for users rather than developers, so \
							the source line information is not needed. The \
							source line is now to be not shown regardless of \
							the build configuration.
				),
				- DLD "function %PrintError",
					// Use %PrintInfo instead.
				* "duplicate call of %MBCSToMBCS to perform encoding \
					conversion from UTF-8 to current code page" $=
				(
					@ "function %PrintException" $since b519,
					@ "function %PrintInfo" $since b520
					// Since the logger has taken over the output and \
						converted the output in custom handler, there should \
						be no redundant conversion elsewhere.
				),
				/ DLD "warning message" ^ "logging" ~ "direct use of %cerr",
				/ "logging for warning message" $=
				(
					^ "%cerr" ~ "%cout",
					^ "colored %platform::Consoles::Yellow output"
				)
			),
			* "missing newline at end of some options" @ "function %PrintUsage"
				$since b520,
			/ @ "function %PrintException" $=
			(
				* "wrong %FileOperationFailure handling" $since b477,
					// Probably infinite recursive until stack overflow.
				- "transparent handling %std::bad_cast"
			)
		)
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			/ %Concurrency $=
			(
				/ $dev "improved strict ISO C++ code conformance"
					$= (+ "including <functional>, <memory> and <mutex>"),
					// For %std::make_shared and %std::bind used in \
						implementation in template. The program temporarily is \
						not ill-formed even if these headers are missing when \
						instantiated, for libstdc++'s <thread> and <future> \
						including <functional>, <thread> including <memory>, \
						<condition_variable> and <future> including <mutex>.
				(
				+ "alias template %packed_task_t";
				+ "function templates %(pack_task, pack_shared_task)"
				),
				(
				+ "function template %wait_to_enqueue, function %size_unlocked"
					@ "class %thread_pool";
				+ "class %task_pool"
				)
			),
			* $dev "wrong %yconstfn" @ "function templates %chain_apply"
				@ %Functional $since b537,
			* $dev $build "constructor templates" @ "class %mixin" @ %Mixin
				$since b477 $=
				// G++ 4.9.1 did not detect these errors but Clang++ 3.5 \
					complained.
			(
				* "missing base class pack expansion" @ "ctor-initializer"
					@ "constructor template with 1 argument",
				* "%enable_if depended with no template parameters of 4 \
					constructors"
					$= (+ "'sizeof(tp)' before operand of 'sizeof...(_tBases)'")
			),
			- DLD "redundant second template argument" @ "%enable_if_t"
				$effective @ "%(String, Functional)",
				// Multiple overloading with %enable_if_t are not touched to \
					avoid ambiguity.
			/ "default template argument" @ "alias template
				%exclude_self_ctor_t" @ %TypeOperation -> 'void' ~ 'int',
				// To be as same as %enable_if_t.
			/ %Exception $=
			(
				* "%std::terminate called if there is exception uncaught"
					@ "function template %raise_exception" $since b522,
				+ "function templates %(iterate_exceptions, \
					get_nested_exception_ptr)"
			),
			/ @ "class template %used_list_cache" @ %Cache $orig (@
				"class template %GMRUCache" @ %YFramework.YSLib.Core.Cache) $=
			(
				* "argument ignored" @ "function %set_max_use" $since b521 $orig
					(@ "function %SetMaxUse" $since b461),
				* "missing erasing inserted of cache item when throwing"
					@ "function template %emplace" $since b461
			)
		),
		/ %Test.Timing $=
		(
			* DLD "missing 'std::' for 'clock()' call"
				@ "function templates %once_c, total_c" $since b319,
			+ "function templates %(average_elapsed, average_in_duration)"
		)
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ "default argument '""' for string parameter"
				@ "constructor %LoggedEvent" @ %Core.YException,
			/ "constructor" @ ("class %UnsupportedImageFormat" @ %Adaptor.Image,
				"class %MessageException" @ %Core.YMessage, "class %BadEvent"
				@ %UI.YWidgetEvent)
				-> "inherited constructor %LoggedEvent::LoggedEvent",
				// See revision b471.
			/ %Service.FileSystem $=
			(
				+ "4 function templates %Traverse";
				+ "function template %TraverseChildren",
				/ @ "function %ListDirectory" $=
				(
					/ DLD "implemented" ^ "%Traverse" $dep_from "%Traverse",
					* "missing 'YF_API'" $orig $since b414 @ %YFileSystem
				),
				+ "2 functions %DeleteTree"
			)
		),
		/ %YCLib_(MinGW32).MinGW32GUI $=
		(
			+ "function %GetParent" @ "class %WindowReference";
			+ 'using WindowReference::GetParent;' @ "class %HostWindow"
		),
		/ "selection of string parameters for overloads" @ "function templates \
			%(strdup, ucsdup)" @ %CHRLib.CharacterProcessing $=
		(
			/ "limited selected parameter to be class instance"
				^ DLD 'ystdex::enable_for_string_class_t',
			^ "subscription" ~ "%c_str";
			* $comp "non overloaded non-class argument selected" $since b535
		),
		/ %YCLib $=
		(
			/ %FileSystem $=
			(
				+ $dev "static assertions for character types",
				(
				/ @ "class %FileOperationFailure" $=
				(
					/ "inherited %std::system_error" ~ "%std::runtime_error";
					/ "constructor"
						-> "inherited constructor %system_error::system_error";
					/ $comp "single empty message is not allowed and made the \
						class not meet %DefaultConstructible"
				);
				/ "distinguished error code thrown with exception \
					%FileOperationFailure"
				),
				/ @ "function %u16getcwd_n" $=
				(
					/ "set %errno to %EINVAL when buffer pointer is null or \
					size \
						is zero",
					/ @ !"platform %Win32" $=
					(
						/ "set %errno to %ERANGE when size is too small to \
							contain the converted string",
						/ "set %errno to %ENOMEM when allocation failed",
						* "memory leak" $orig (@ %YCommon $since b304)
					)
				)
			),
			/ "distinguished error code thrown with exception \
				%FileOperationFailure" @ "constructor %MappedFile"
				@ %MemoryMapping $dep_from "%FileOperationFailure" @ %FileSystem
		)
	)
),

b537
(
	/ %YReader $=
	(
		/ "key %X handling" @ "class %ShlExplorer" $=
		(
			(
			/ "responded by %KeyDown" ~ "KeyPress";
			* $comp "no response on key %X when focused in file list" $since
				b531
			),
			/ "explicitly request focus"
				// This would cause the menu to be hidden, distinctive with \
					than previous behavior.
		),
		/ DLD %(ShlExplorer, ShlReader) $dep_from "removal of menu ownership"
			$dep_to "removal of menu access from host" $=
		(
			/ "owned menu objects by data members of %unique_ptr instances";
			/ "menu access" ^ "data members" ~ "%MenuHost member functions"
		)
	),
	/ %YFramework.YSLib $=
	(
		/ @ "class template %GHandlerAdaptor" %Core.YEvent $=
		(
			+ "template specialization for parameter %_type with \
				%void";
			+ $design "simplified main template by inheritance %void \
				specialization",
			+ "explicitly defaulted (copy, move) (constructor, %operator=)"
		),
		/ %UI $=
		(
			/ %YMenu $=
			(
				+ 'yconstexpr' @ "object %DefaultMenuZOrder",
				/ @ "class %MenuHost" $=
				(
					(
					- "%operator+= with %ValueType parameter";
					- "alias-declaration %ValueType"
					),
					(
					- "ownership of menus";
					* $comp "menu object leak" @ "%operator+=" $since b214;
					) $dep_to "removal of menu ownership",
					(
					^ DLD "implemented" ^ "%MLinearUIContainer";
					- "protected data member %mMenus";
					- "using alias %(MenuMap; ItemType)"
					),
					(
					/ "type of data member %Roots"
						-> 'map<IWidget*, Menu*>' ~ 'map<IWidget*, Menu::ID>',
					(
					$dep_from "removal of menu access from host";
					- "function %operator[]",
					/ "parameter %Menu::ID" @ "functions %(operator-=, \
						IsShowing, Contains)" -> 'Menu&',
					- "functions %(Show, Hide) with %Menu::ID parameter"
					) $dep_to "removal %Menu::ID @ %MenuHost";
					),
					/ DLD "initialized %Roots" ^ "brace-initializer"
						~ "ctor-initializer",
					- 'virtual' @ "destructor",
					+ "assertions" @ "functions %(Show, Hide) with 'Menu&' \
						parameter"
				),
				/ @ "class %Menu" $=
				(
					(
					- "member function %GetID",
					- "%ID parameter" @ "constructor",
					- DLD "menu identifier",
					- "using alias %ID" $dep_from
						"removal %Menu::ID @ %MenuHost"
					),
					/ "function %operator[]" -> "%at"
						// To conform the exception handling style of standard \
							library API.
				)
			),
			/ @ "classes %(MLinearUIContainer, MUIContainer)" %YUIContainer $=
			(
				/ "access control of all protected (constructors, \
					member functions)" -> 'public',
				* $lib $design "missing updating assertion strings"
					@ "member function %operator-=",
				+ "member function %clear"
			)
		),
	),
	/ %YBase.YStandardEx.Functional $=
	(
		+ 'const' @ "2 member functions %operator()"
			@ "2 specializations @ class template %xcrease_t",
		+ "2 function templates %chain_apply",
		(
		+ "class template %composed",
		+ "function template %compose"
		),
		+ "class template %(addressof_op, mem_get)"
	)
),

b536
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ %GUI $=
			(
				/ @ "class %GUIState" $=
				(
					* "spelling error" @ "data member" $since b511
						$= (/ "%ExteralTextInputFocusPtr"
							=> "%ExternalTextInputFocusPtr"),
					/ $lib $design @ "member functions %(ResponseCursorBase, \
						ResponseKeyBase)" $=
					(
						^ $dev "%std::ref" ~ "direct use of pointer for \
							iteration",
						- "assertion for null pointer after iteration for \
							%Tunnel routed event"
					)
				)
				/ DLD "implemented inline functions %IsFocusedByShell" @ %YGUI
					^ "macros %(PDefH, ImplRet)",
			),
			/ %YUIContainer $=
			(
				^ DLD "%std::ref" ~ "direct use of pointer for iteration"
					@ "all 2 functions %FetchTopLevel",
				/ @ "classes %(MLinearUIContainer, MUIContainer)" $=
				(
					/ 'using ItemType = IWidget*;'
						-> 'using ItemType = std::reference_wrapper<IWidget>;',
					- $lib $design "assertion for null pointer",
					/ DLD "implemented functions %Contains" ~ "%std::find",
					/ DLD "simplified indirection implementation"
				)
			)
		),
		/ DLD "implemented function %Contains" @ "class template %GEvent"
			@ %Core.YEvent ^ "%std::count" ~ "%std::find",
		/ @ "functions %(OnKey_Bound_TouchUp, \
			OnKey_Bound_TouchDown, OnKey_Bound_Click)" @ %YControl $=
		(
			/ DLD "reused common implementation",
			/ "allowed %std::function and %std::cast propogation out of \
				%Control::BoundControlPtr"
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "3 function %operator()" @ "struct %is_equal" @ %Functional,
		/ %Iterator $=
		(
			+ "function template %get" @ "namespace %iterator_transformation",
			+ 'yconstexpr struct get_tag{} get_get{};';
			+ "function template %operator| for %get_tag"
		)
	)
),

b535
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ DD "explicitly allowing ADL calls"
				@ "function templates %(Blend, Composite)" @ %Service.YPixel,
			/ %UI $=
			(
				* "wrongly reset view when handling %TouchDown"
					@ "class %TreeList" @ %TreeView $since b534
					$= (/ "implemented" ^ "%UpdateView" ~ "%ResetView"),
				/ %ListControl $=
				(
					* "missing committing invalidation of unit control"
						@ "function %UpdateView" @ $since b530;
						// Only effective when buffered renderer is set.
					* $comp "missing invalidating first line when %ResetView \
						called" @ "class %MTextList" @ %ListControl $since b530
						$dep_from %Viewer
						// Because the shared index is buffered, it would be \
							checked to perform iteration only when the new \
							value is not equal to old one. If it was 0 and not \
							reset, the text of line with index 0 would not be \
							updated.
				),
				* "missing reset shared index" @ "member function \
					%AMUnitList::ResetView" @ %Viewer $orig (@ %TextList)
					$since b527
			)
		),
		/ %CHRLib.CharacterProcessing $=
		(
			* "buffer overrun" @ "function %strdup" $since b475,
			/ @ "(functions, function templates) %(strdup, ucsdup)" $=
			(
				+ "functions with %size_t parameter";
				/ "functions without %size_t but %Encoding"
					-> "inline functions",
				/ @ "function templates" $=
				(
					+ "%Encoding parameter",
					/ "implemented" ^ "%length"
				)
			),
			- "function %ucsdup to copy UCS-2 string"
				// This is redundant, just use constructor of \
					%basic_string<ucs2_t> instead.
		)
	)
	/ DD "normalized Doxygen comments by explicitly filtered regular \
		expression '\\(defgroup|ingroup|name|def|fn|author|par|sa|since|version\
) .*[，、：；—“”‘’。]'" $=
		// %Documentation::Designation @6.1.3.
	(
		* "wrong directive '\since' used" ~ '\brief' @ "Doxygen comments"
			@ "member %BorderResizer::Margin" @ %YFramework.YSLib.UI.Border
			$since b444,
		/ "remove '。' at end of the directives" $effective
			@ %(YBase.YStandardEx.(Any, Functional, Iterator),
			YFramework.Helper_(Android, DS))
	),
	/ %YBase $=
	(
		/ %YDefinition $=
		(
			+ "macros %(__has_builtin; YB_ABORT; YB_ASSUME)",
			+ DLD "prefix '_'" @ "macro parameters"
		),
		/ @ "macro definitions %(yconstraint, yassume)" @ % CAssert $=
		(
			/ "explicitly required exactly one macro parameter",
			/ "expanded" ^ "%YB_ASSUME" @ "!defined %NDEBUG" $dep_from
				"%YB_ASSUME"
			/ "macro definition %YAssert" @ "!defined %YB_Use_YAssert" $=
			(
				/ "expanded" ^ "%yassume";
				* $comp "wrong argument of %assert" $since b495
					// This is OK when the macro %assert of C standard library \
						is used because ISO C specified it is not used.
			)
		)
	)
),

b534
(
	/ %YFramework.YSLib.UI $=
	(
		/ %TreeView $=
		(
			/ @ "class %TreeList" $=
			(
				/ $lib "optimized non branch or expanded %CursorOver handling",
					// This reduces unnecessary highlight invalidation on \
						indent boxes.
				+ "default argument '= size_t(-1)'" @ "function %Bind",
				+ "function %BindView"
			),
			+ "class %TreeView"
		),
		+ "nonnull assertion" @ "functions %(GetController, GetRenderer, \
			GetView)" @ "class %Widget" @ %YWidget,
		/ @ "class %ListBox" @ %ComboList $=
		(
			/ "implemented content control data member"
				^ "%unique_ptr<TextList>" ~ "%TextList";
			+ "protected constructor with parameter %unique_ptr<TextList>&&",
			(
			+ "function %GetTextListRef";
			/ "implemented member functions" ^ "%GetTextListRef"
				~ "content control data member"
			- "all 'ynothrow'" @ "member functions calling %GetTextListRef"
			)
		),
		* "missing call of %ResetView after expanding or collapsing branches"
			@ "class %TreeList" $since b531
	),
	/ DD $term "normalized" $=
	(
		/ "all 7 '额外说明', 19 '另有说明', 11 '另行说明', 2 '另外说明'"
			-> '另行约定',
		/ "all 3 '附加说明' exception in Doxygen command" -> '另行约定',
		/ "normalized by explicitly filtered regular expression \
			pattern '[^ （，例形]如[^ 上下何果]', \
			'若无[^法效(歧义)(容器)(父部件)]'" $=
		(
			/ "all 20 '如无'" -> '若无';
			(
			/ "all '若无另行'" -> '除非另行';
			/ "other 3 '若无'" -> '除非',
			),
			/ "other prepositions rewriting performed"
				// E.g. "'如' as prefix of a sentence" -> ('若'|'例如').
		),
		/ "all '特别(说明|指明)'" -> '另行约定',
		/ "all 4 '统一赋值'" -> '合一赋值'
			// To be same as in %Documentation::CommonRules;
	),
	/ %YReader $=
	(
		+ "classes %(TreeList, TreeView) support"
			@ "function %FetchWidgetLoader" @ %Shells $dep_from
			%YFramework.YSLib.UI.TreeView,
		/ @ "constructor %ShlExplorer" @ %ShlExplorer $=
		(
			* $design "spelling error" @ "trace string" $since b512,
			+ "test for class %TreeView" $dep_from %Shells
		)
	)
),

b533
(
	/ %YFramework.YSLib.UI $=
	(
		/ @ "class %GUIState" @ %YGUI $=
		(
			* DD "wrong comment on %WidgetIdentity",
				// Actually not reset after distinguishing shared widgets.
			/ "member function %GetOldWidgetIdentity"
				=> "%GetSharedWidgetIdentity",
			/ @ "handling event %CursorOver"
			(
				/ "implemented" ^ "recording %FetchTopLevel state"
					~ "%LocateForWidget",
				* $comp "wrong %Enter position for shared widget" $since b532
			)
		),
		/ %YUIContainer $=
		(
			/ DLD "implemented inline function %LocateContainerOffset"
				^ "macros %(PDefH, ImplRet)",
			(
			+ "functions %(FetchTrace; LocateForTrace)";
			/ DLD "implemented function %LocateForWidget as inline function"
				^ "%(LocateForTrace, PDefH, ImplRet)"
				// To be generally slightly efficient to use %vector instead \
					of %list.
			)
		),
		/ @ "class %TreeList" @ %TreeView $=
		(
			(
			+ "function %GetIndentBoxSize";
			/ "implemented function %GetIndentBox" ^ "%GetIndentBoxSize",
			+ "function %GetIndentBoxBounds"
			),
			/ $lib "optimized %CursorOver handling"
				// Now the CPU time is not dedicate to invalidating and \
					repainting.
		)
	)
);

b532
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			+ "function template %CollectNodes with parameter \
				'initializer_list<_type>'" @ %Core.ValueNode,
			/ %UI $=
			(
				+ %TreeView $=
					(+ "class %TreeList"),
				+ "macro %YFM_Android_Helper_AndroidHost" @ %YModules,
				/ @ "class %GUIState" @ %YGUI $=
				(
					/ $design "data member order",
						// Now all by alphabetical.
					(
					/ DLD "data members %(KeyHeldState, TouchHeldState, \
						DraggingOffset, HeldTimer, CursorLocation, Colors, \
						Styles) initialization" ^ "brace-or-equal-initializer";
					- "default constructor"
						// Not it is implicitly defaulted. Old 'ynothrow' \
							exception-specification should be also removed.
					),
					(
					+ 'size_t WidgetIdentity = size_t(-1);';
					+ "member function %GetOldWidgetIdentity",
					/ "supported distinguishing shared widget by \
						%WidgetSwitched even if the pointer is equal"
					) $dep_to "distinguishing shared widget"
				),
				+ "set switched widget state" @ "member function \
					%AMUnitControlList::MakeIterator" @ %ListControl
					$dep_from "distinguishing shared widget"
			)
		),
		+ '#include YFM_YSLib_UI_TreeView' @ %YSBuild $dep_from %YSLib.UI
	),
	/ %YBase.YStandardEx $=
	(
		/ %Container $=
		(
			+ "4 function templates %make_container",
			/ "function templates %(make_array, forward_as_array, 4 to_array)"
				@ %Container >> $dep_from %Array
		),
		+ %Array,
		/ @ "class template %transformed_iterator" @ %Iterator $=
		(
			/ DLD $revert(b494) "simplified %transformer_type" !^ "%decay_t"
				// Since b529 it had been already decayed.
			(
			+ "3rd template parameter 'typename _tReference = void'";
			/ "%reference" ^ "%_tReference"
			// See $2014-09 @ %Documentation::Workflow::Annual2014.
			)
		),
		/ $dev $design "trailing-return-type"
			@ "function template %make_move_iterator_pair" @ %Iterator
			^ "member function" ~ "ADL-based function call",
			// This is a workaround to coordinate with %(string_begin, \
				string_end) in %String. Wait for ISO C++14 to eliminate use of \
				trailing-return-type.
		+ "function templates %(insert_ordered, insert_ordered_reversed)"
			@ %Container,
		* "missing predicate binding" @ "function template %stable_unique"
			@ %Algorithm $since b531,
			// Also to eliminate Clang++ warning: unused parameter 'pred' \
				[-Wunused-parameter].
		+ "function template %erase_n for %iterator member" @ %Container
			// Only %iterator rather than %const_iterator is required to be \
				the parameter type of member %erase in container requirement.
	),
	+ "'using std::begin;', 'using std::end'" @ "all ADL-enabled %(begin, end) \
		calls" $effective @ %(YBase.YStandardEx.(Container, Iterator),
		YFramework.YSLib.(Core.ValueNode, UI.YStyle)),
	/ DD $term "normalized by explicitly filtered regular expression \
		pattern '[^大小等同始终多少早晚高低快慢长短先后难易由关用处位置属介适基至限\
过碍便利在(等价)(包含)(相似)(平行)(垂直)(取决)(独立)(特定)(相当)]于[^ ]'" $=
	(
		// All matching '于' as single preposition is also matching '于 '.
		/ "all 238 '对于'" -> '对',
			// Including 60 '相对于' -> '相对'.
		/ "all 3 '起始于'" -> '始于',
		/ "all 1 '终止于'" -> '终于',
		/ "all 1 '相较于'" -> '相较',
		/ "all 1 '鉴于'" -> '由于',
		/ "all 3 '保存于'" -> '保存在',
		/ $re_ex(b527) "all 2 '依赖（(.*)）于'" -> "'依赖（$1）'",
		/ "all 1 '适合于'" -> '适于',
		/ "all 1 '适应于'" -> '适应',
		/ "all 5 '对应于'" -> '对应',
		/ "all 5 '兼容于'" -> '兼容',
		/ "other prepositions rewriting performed"
			// E.g. '于' -> '在'.
	)
),

b531
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ %ListControl $=
			(
				* "%Move wrongly called for switch unit control" @ ("member \
					function %AMUnitControlList::MakeIterator" $orig (@
					"member function template %AMUnitList::MakeIterator"))
					$since b528;
				* $comp "automatically invalidation even no cursor operations \
					performed on %TextList except when the cursor is over the \
					first line" $since b530
					// Thus %InvalidateParent in handler of %Move for %Control \
						would be called and cause serious performance \
						regression.
			),
			* "redundant call for %UpdateView" @ "handling events %(TouchDown, \
				TouchHeld)" @ "class %TextList" $orig (@ "events %(TouchDown, \
				TouchMove)" @ "class %YMenu" @ %Menu $since b203),
				// Also a serious performance problem due to call of \
					%Invalidate the whole control in %UpdateView. And The \
					%ViewChanged would be also called leading to misconception.
			* "handled twice %KeyDown after touch" @ "class %TextBox" @ %TextBox
				$since b530
				$= (/ "set 'e.Handled = true;'"),
			/ $lib "extracted all macro %EventT" @ %ComboList,
			* $comp "missing '&&'" @ "event argument %ScrollEventArgs \
				inherited from %UIEvent" @ "event %ATrack::Scroll" $since b201,
				// This would cause redundant copy of event argument.
			* "line segment 1 pixel than shorter than specified"
				@ "function %RectDrawArrowOutline" @ %YStyle $since b522,
			+ 'const' @ "functions %(IsShowing, Contains)" @ "class %MenuHost"
				@ %Menu
		)
		/ "assertion string" @ "member function %HBitmap::operator[]"
			@ %Adaptor.Image,
		/ %Core $=
		(
			/ %ValueNode $=
			(
				+ "2 functions %at for %ValueNode",
				/ DLD "implemented all 2 functions %UnpackToNode"
					^ "macros %(PDefH, ImplRet)",
				+ "2 function templates %at for range-access of %ValueNode"
			),
			- "macros %(DeclDelegate, DeclEvent)" @ %Core.YEvent $dep_from
				(%UI.(ComboList, Scroll),
				"removal use of %(DeclDelegate, DeclEvent)")
		),
		* DLD "wrong template parameter name %_tIter did not reflecting \
			refined %InputIterator requirements for %std::accumulate",
			@ "function %FetchMaxTextWidth" @ %TextLayout $since b530
		/ "passing dereferenced value" ^ 'decltype(*first)' ~ 'decltype(*first)&'
			$effective @ ("constructor template %MIMEBiMapping" @ %ContentType,
			"member functions" ("%GEvent::operator-=" @ %YEvent,
			"%MessageQueue::Merge" @ %YMessage) @ %Core,
			"function %FetchMaxTextWidth" @ %Service.TextLayout)
	),
	(
	/ $lib "extracted all macros %(DeclDelegate, DeclEvent)" $effective
		@ (%YFramework.YSLib.UI.(ListControl, Scroll, Selector),
		YReader.HexBrowser),
	- "all redundant alias-declaration %'H*Event' not occured elsewhere"
		$effective @ (%YFramework.YSLib.UI.(ComboList.ListControl, Scroll,
		Selector), YReader.HexBrowser);
	) $dep_to "removal use of %(DeclDelegate, DeclEvent)",
	/ DLD "implemented readonly iteration for non-templated containers"
		^ "%(cbegin, cend)" ~ "%(begin, end)" $effective @ (%YFramework.(
		YSLib.((Core.(YEvent, YMessage), Service.(AccessHistory,TextManager)),
		Adaptor.(YNew, Font), UI.(YUIContainer, YPanel)), NPL.SContext,
		'Helper_(Android)'.AndroidHost), YReader.(BookmarkUI, HexBrowser)),
		// See $2014-08 @ %Documentation::Workflow::Annual2014.
	/ %YBase.YStandardEx $=
	(
		+ "function templates %(qualify, unqualify)" @ %Cast,
		/ %Algorithm $=
		(
			(
			+ DD "Doxygen groups %(nonmodifying_algorithms, \
				mutating_algorithms)" @ "group %algorithms";
			/ DD "adjusted all current function templates"
				@ "group %algorithms" >> @ "group %mutating_algorithms",
			),
			/ "function template %stable_range_unique"
				-> "2 function templates %stable_unique",
			+ "function templates %(for_each_equal, for_each_if)"
		),
		+ "function template %make_reverse_iterator" @ %Iterator,
		/ @ "function templates %hash_range" @ %Functional $=
		(
			/ "parameter 'size_t&'" -> 'size_t',
			/ DLD ^ "implemented" ^ "%std::accumulate"
		),
		/ %Container $=
		(
			/ "function template %sort_unique for range" >> %Algorithm,
			* "redundant %sort_unique call and wrong %last call"
				@ "function template %sort_unique for container" $since b286,
			/ DLD "all function parameter %c" => "%con",
			/ DLD "all template parameter %_tRange" => "%_tCon",
				// No real non-container range is appeared here.
			+ "function template %replace_value for associative containers",
			+ "function template %erase_n"
		)
	)
),

b530
(
	/ %YFramework.YSLib $=
	(
		/ "function template %FetchMaxTextWidth" @ %Service.TextLayout $=
		(
			/ $revert_ex(b529) DLD "implemented" ^ "%(std::accumulate, max)"
				~ "%(std::max_element, ystdex::make_transform)";
				// To eliminate redundant evaluation with calls of \
					%FetchStringWidth.
			* $comp "wrong value calculated" $since b529
				// See $2014-08 @ %Documentation::Workflow::Annual2014.
		),
		/ "member function %Clear" => "%clear" @ ("class templates \
			%(GEvent, GDependencyEvent)" @ %Core.YEvent;
			// To necessarily meet associative container requirements.
		/ %UI $=
		(
			/ %YStyle $=
			(
				/ "split rectangle parameter to boundary and bounding box \
					parameters" @ "function %DrawArrow",
				/ "split rectangle parameter to boundary and location \
					parameters" @ "function %DrawCornerArrow"
			),
			* "position of arrow wrongly decided by clip area" @ "member \
				function %InitializeArrowPainters" @ "class %ScrollBar"
				@ %Scroll $orig (@ "class %AScrollBar" $since b453);
			- "function %CheckConfirmed" @ "class %Menu" @ %Menu,
			/ @ "class %TextList" $=
			(
				(
				+ "member functions %(begin, end; GetChildren)";
				/ DLD "implemented control events for items"
					^ "unit control events" ~ "container control events"
				);
				(
				/ DLD "implemented %InvokeConfirmed" !^ "%CheckConfirmed"
					$dep_from %Menu;
				- "function %CheckConfirmed"
				),
				- "functions %(SetSelected; CheckPoint) with 'const Point&' \
					parameter"
			)
		)
	)
),

b529
(
	/ %YBase.YStandardEx $=
	(
		(
		/ "metafunction %is_decayable" @ %TypeOperation -> "%is_decayed";
			// The new one is the opposite of the old one, which meaning is \
				more explicit.
		/ DLDI "simplified static assertion" @ "class template %thunk"
			@ %Functional ^ "%is_decayed"
		),
		/ %Iterator $=
		(
			/ @ "class template %transformed_iterator" $=
			(
				/ "base class",
				+ "2 static assertions to forbid template parameters not \
					decayed" ^ "%is_delayed",
				/ "simplified using aliases %(iterator_type, transformed_type, \
					reference)",
				/ "using alias %difference_type" ^ "%std::iterator_traits",
				+ "explicitly defaulted copy and move constructors"
			),
			/ "return type" @ "function template %make_transforme"
				^ "%decay_t" ~ "%array_type_decay"
		),
		/ %Memory $=
		(
			- $revert(b298) "function template %make_shared as replacement of \
				%std::make_shared",
				// See $2014-08 @ %Documentation::Workflow::Annual2014.
			+ "function template %make_shared for instances of \
				$std::initializer as parameter"
				// For convenience.
		)
	),
	/ %YFramework.YSLib $=
	(
		/ DLD "implemented function template %FetchMaxTextWidth"
			@ %Service.TextLayout
			^ "%(ystdex::make_transform, std::max_element)",
		/ %UI $=
		(
			/ %ListControl $=
			(
				/ $revert_ex(b528) 'using MTextList::GetLabelRef'
					-> 'using MTextList::LabelBrush;' @ "class %TextList",
				/ @ "class %MTextList" $=
				(
					/ "function %GetLabelRef" -> "data member %LabelBrush",
					/ $dev "unit control" -> "%Control" ~ "%Label"
				),
				/ "alias-declaration %IndexEventArgs" ^ "%size_t"
					~ "%MTextList::IndexType" $dep_to
					"eliminating dependency of %IndexEventArgs on %MTextList",
					// At least currently they are compatible.
				/ @ "class %TextList" $=
				(
					/ "access control" @ "base class %MTextList" -> 'public'
						~ 'protected',
					/ "members %(ViewArgs, HViewEvent, ViewChanged, Selected, \
						Confirmed)" >> "class %AMUnitControlList" $dep_from
						"eliminating dependency of %IndexEventArgs on \
						%MTextList",
					- "all using aliases from %MTextList",
				),
				/ @ "class %AMUnitControlList $=
				(
					/ "access control" @ "base class %AMUnitList" -> 'protected'
						~ 'public',
					+ 'using AMUnitList::GetFullViewHeight;',
					+ 'GEvent<void(size_t)> Iterated;'
				),
				(
				- "function template %AMUnitList::MakeIterator"
					@ "class %AMUnitList";
				/ "class %AMUnitList" >> %Viewer
				),
				/ @ "class %MTextList" $dep_from "%AMUnitControlList::Iterated"
					$=
				(
					/ "function %MakeIterator" >> "class %AMUnitControlList",
					+ "assertion for index on unit widget iteration"
				)
			),
			/ @ "class %Menu" @ %Menu $dep_from "%AMUnitControlList::Iterated"
				$=
			(
				+ "enablility setting on iteration";
				/ "unit widget painting accroding to enablility of unit widget"
					// The state of item is set indirectly and client code now \
						has opportunity to modify this default behavior.
			),
			/ DLD %ComboList $=
			(
				^ "%DefGetterMem" @ "class %DropDownList"
					~ "%DefEventGetterMem",
				^ "%DefGetter" @ "class %ListBox" ~ "%DefEventGetter"
			),
			/ DLD @ "class %ATrack" @ %Scroll $=
			(
				/ "access Control" @ "events %(ThumbDrag, Scroll)" -> 'public'
					~ 'private',
				- "member functions %(GetThumbDrag, GetScroll)"
			)
		),
		+ 'using std::make_shared' @ %Adaptor.YReference,
		/ %Core.YEvent $=
		(
			- $revert(b195) "all 3 macros 'DefDepEventGetter*'",
			- $revert(b162) "all 3 macros 'DefEventGetter*'"
				$dep_from %UI.(ComboList, Scroll),
			- $revert(b195) "macros %(DeclEventRef, DeclDepEventRef, \
				DeclIDepEventEntry, DeclDepEvent)",
			- $revert(b162) "macro %DeclIEventEntry"
		)
	),
	/ DLD "all call of 'ystdex::make_shared'" -> "call of 'make_shared'"
),

b528
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ %TextList => %ListControl $=
				(
					(
					- 'using MTextList::GetItemPtr;' @ "class %TextList";
						// Use %GetList and its interface instread.
					- "all 2 member function %MTextList::GetItemPtr"
					),
					(
					+ "function template %MakeIterator" @ "class %MUnitList";
					/ DLD "implemented function %MTextList::MakeIterator"
						^ "%MUnitList::MakeIterator"
					),
					+ "functions %(GetSharedIndex, GetTopOffset, CheckPoint)"
						@ "class %AMUnitList",
					/ @ "class %MTextList" $=
					(
						/ "function %GetLastLabelIndex" >> "class %AMUnitList",
						+ "function %GetLabelRef",
						(
						/ "base class %AMUnitList" -> "%AMUnitControlList"
							$dep_from "class %AMUnitControlList";
						/ "function %GetUnitRef" >> "class %AMUnitControlList",
						/ DLD "text unit implementation",
						- "data member %Unit" $dep_from "%MTextList::Unit"
						),
						- $revert($orig(b282))
							"member function %GetMaxTextWidth" $orig (@ %Label)
							$dep_from "%TextList::GetMaxTextWidth"
					),
					/ @ "class %TextList" $=
					(
						/ "merged 2 functions %CheckPoint"
							^ "%AMUnitList::CheckPoint" $dep_from
							"function %MTextList::CheckPoint",
						/ "merged 2 functions %SetSelected for point as with \
							parameter 'const Point&'",
						/ DLDI "simplified function %Refresh",
						/ 'using MTextList::Unit'
							-> 'using MTextList::GetLabelRef' $dep_from
							"%MTextList::GetLabelRef",
						- 'using MTextList::GetMaxTextWidth;'
					),
					+ "class %AMUnitControlList"
				),
				/ "macro %YFM_YSLib_UI_TextList" @ %UI.YModules
					=> "%YFM_YSLib_UI_ListControl"
			),
			/ %Core.YGDIBase $=
			(
				/ "all parameter type %int" @ "member functions \
					%Rect::(Contains, ContainsStrict)" -> "%SPos",
				/ $re_ex(b509) DLD "implemented all 2 functions %Size::GetRef"
					^ "macros %(PDefH, ImplRet)"
			)
		),
		^ "ADL for %is_undereferenceable" @ %YFramework $effective @ ("3 \
			function templates %(FetchStringOffsets, FetchStringWidth)"
			@ %YSLib.Service.TextLayout, "2nd constructor" @ "class %Session"
			@ %NPL.SContext)
	)
),

b527
(
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ %TextList $=
			(
				+ "class %AMUnitList",
				+ 'using MTextList::Unit;' @ "class %TextList"
					$dep_from "%MTextList::Unit",
				/ @ "class %MTextList" $=
				(
					/ "protected data member %lblShared" -> "public %Unit",
					/ DLDI @ "function %Refresh"
						// Note now the unit widget state is not updated on \
							%Refresh.
					- $revert(b524) "data member %(Font, Margin)",
						// Just use members of 'Unit' instead.
					(
					+ "public base class %AMUnitList" $dep_from
						"class %AMUnitList";
						// With polymorphic methods.
					/ "data member %vwText" => "%vwList";
					/ "protected data members %(CyclicTraverse, vwText, \
						uTopOffset, idxShared), functions %(GetFullViewHeight, \
						GetViewPosition, GetUnitLocation, \
						AdjustOffsetForHeight, AdjustViewForContent, \
						AdjustViewLengthForHeight, ResetView)"
						>> "class %AMUnitList";
					/ "data member %CyclicTraverse" -> "using-declaration",
					/ DLD "simplified implementing functions %'Adjust*'",
					/ "implemented function %GetItemHeight as overrider",
					+ "functions %(GetTotal, GetUnitRef) as overriders",
					- "function %AdjustViewLengthForHeight"
					),
					- "2nd and 3rd parameter" @ "constructor"
				),
				/ $revert(b395) "base class %MHighlight"
					@ "class %MTextList" >> "class %TextList",
				- $revert(b523) "function %ResetView"
			),
			/ %Scroll $=
			(
				+ 'ynothrow' @ "abstract method %GetOrientation"
					@ "class %ATrack",
				(
				/ "merged classes %(AScrollBar, HorizontalScrollBar, \
					VerticalScrollBar)" -> "class %ScrollBar";
				* $comp $dev "wrong 'ImplI(ATrack)'" @ "member function \
					%GetOrientation" @ "classes %(HorizontalScrollBar, \
					VerticalScrollBar)" @ %Scroll $since b205 $orig (@
					"classes %(YHorizontalScrollBar, YVerticlaScrollBar)"
					@ %YGUIComponent $since b171),
				* $comp "non-abstract class %AScrollBar named with prefix 'A'"
					$since b171,
					// The old abrstract class inherited %ATrack before b171.
				/ "swapped 2nd and 3rd parameter" @ "constructor %ScrollBar"
				)
			)
		),
		/ $dev "replacement" @ "macro %ImplI(...)" -> 'override' ~ 'virtual'
			@ %YBaseMacro,
		/ $dev $design / "adjust 'ImplI'" @ "member function declarations"
			!^ 'override'
	),
	/ %YBase.YStandardEx.Functional $=
	(
		+ "constructor with 'std::reference_wrapper<value_type>' parameter"
			@ "class template %thunk";
		* "ambiguity overloading resolution for callable type" $since b526 $=
		(
			/ "constructor for callable type" -> "constructor template",
			+ "constructor template for instances of 'std::reference_wrapper'",
			+ DLD 'explicit' @ "base class constructors"
		)
	),
	/ DD $term $re_add(b462) "all '依赖于'" -> '依赖'
),

b526
(
	/ %YFramework.YSLib $=
	(
		/ %UI $=
		(
			/ "text drawing" @ "class %TextBox" $=
			(
				/ "performed no-op when %Text is empty",
				* "missing check for %Text and %Selection.Range" $since b485
					// Since %Text is public, the selection range can be out \
						of bounds.
			),
			/ DLD "implemented member functions %(TextBox, Button)::Refresh"
				@ %TextBox ^ "lazy evaluated lambda-expression" $dep_from
				%YBase.YStandardEx.Utilities,
			/ %Label $=
			(
				- "base class %noncopyable" @ "class %MLable",
					// Thus it meets to %UIBrush requirement.
				(
				+ "function %GetItemHeight" @ "class %MLabel";
				+ 'using MLabel::GetAlignedPenOffset;' @ "class %Label"
				),
				+ 'using MLabel::GetItemHeight;' @ "class %Label"
			),
			* "probably range out of bounds for drawing routines like \
				%DrawHLineSeg"
				@ "function DrawTrackBackground" @ %Scroll $since b452,
				// The bounds intersection for drawing area is missing.
			/ @ %ComboList $=
			(
				/ DLD "implemented %DropDownList"
					!^ "member function %ListBox::Find";
				- $revert(b316) "member function %ListBox::Find"
			),
			/ %TextList $=
			(
				- $revert(b316) 'using MTextList::Find;' @ "class %TextList"
					$dep_from %ComboList,
				/ @ "class %MTextList" $=
				(
					/ DLDI @ "member function %Refresh"
						// Note now the unit widget state is not updated on \
							%Refresh.
					- $revert(b316) "function %Find" $dep_from
						"%TextList::Find",
						// Just use 'std::find' on 'GetList()' instead.
					- $revert(b523) "function %GetChildrenByIndices",
					+ "assertion for nonzero check" @ "function %GetItemHeight"
				)
			)
		),
		/ DLD "all local variables initialized by %ClipArea" $=
		(
			/ $re_ex(b489) "%r" => "%bounds" $effective @ (("function \
				%DrawRectRoundCorner" @ %YStyle, "member function %Refresh"
				@ ("class %ProgressBar" @ %Progress, "class %BufferedTextArea"
				@ %TextArea, "class %TextList" @ %TextArea), "function \
				template %UpdatePixels, static member function \
				%ImageBrush::DefaultUpdate" @ %YBrush, "member function \
				%BufferedRenderer::UpdateTo" @ %YRenderer) @ %UI, "function \
				templates %(BlitGlyphLines, BlitGlyphPixels)"
				@ %Service.CharRenderer),
				// To eliminate possible misunderstanding.
			/ 'const auto&' -> 'const Rect&'
				// See %Documentation::CommonRules @5.7.9. Note '::RECT' is \
					not the case.
		)
	),
	/ %YBase.YStandardEx $=
	(
		+ "constructor template to support lazy evaluation by callable object \
			as argument" @ "class template %swap_guard and its partial \
			specialization" @ %Utilities,
		+ "function templates %make_unique_default_init" @ %Memory,
		/ %Functional $=
		(
			/ @ "class template %thunk" $=
			(
				- "2nd template parameter",
				/ "fixed %operator() with no parameters",
				+ "%operator return_type"
			),
			+ "2 function template %make_thunk"
		)
	),
	* $comp "assertion failed when dragging color setting box"
		@ %YReader.ReaderSettingUI $since b452 $dep_from
		%YFramework.YSLib.Scroll
		// If there is any %Track moved out of the target bounds (e.g. ones in \
			YReader text color setting box), the assertion failed.
),

b525
(
	/ %YFramework.YSLib.UI $=
	(
		/ %TextList $=
		(
			/ @ "class %TextList" $=
			(
				/ DLD "simplified item background drawing" ^ "%FillRect"
					~ "%FillRectRaw";
				- "protected function %DrawItemBackground"
				- $revert($orig(b205)) 'using MTextList::RefreshTextState;'
					$dep_to "removal of %RefreshTextState call of %TextList",
				- DLD "%MTextList::(GetTotal, SetContainer) calls"
					$dep_to "removal containers of viewer",
				- 'using MTextList::ViewerType;'
			),
			/ @ "class %MTextList" $=
			(
				(
				/ DLD "implemented function %GetItemHeight"
					^ 'GetVerticalOf(Margin)' ~ 'LineGap',
				- "function %RefreshTextState" $dep_from ("removal of \
					%RefreshTextState call of %TextList",
					"removal of %RefreshTextState call of %Menu",
				),
				- $revert(b524) "data member %LineGap",
				- "alias-declaration %ViewerType" @ "class %MTextList"
					$dep_from "%TextList::ViewerType",
				/ "function %CheckSelected" -> ("member function \
					%SequenceViewer::CheckSelected" @ %Viewer) $dep_from %Viewer
			),
			/ DLD "viewer calls"
		),
		- DLD "calls of %MTextList::RefreshTextState" @ "classes %(TextList, \
			Menu)" $dep_to "removal of %RefreshTextState call of %Menu",
		/ %Viewer $=
		(
			/ "class template %GSequenceViewer" -> "class %SequenceViewer" $=
			(
				(
				(
				- "'GetTotal()' calls" @ "functions %(RestrictSelected, \
					RestrictView, Contains)",
				(
					- "all prefix and postfix %operator(++, --)",
					- "functions %(DecreaseHead, DecreaseSelected);
					/ "implemented functions %(SetHeadIndex, \
						MoveViewerToEnd, \
						SetSelectedIndex, AdjustForContent, GetValid, \
						IncreaseHead, IncreaseSelected)"
						^ "extra parameter 'total'" ~ "'GetTotal()' calls"
				);
				- "function %GetTotal"
				),
				- "function %SetContainer" $dep_from
					"removal containers of viewer",
				/ DLD "data member initialization"
					^ "brace-or-equal-initializer";
				/ "explicit constructor" -> "non-explicit explicitly defaulted \
					constructor";
				- DLD "container pointer state"
				),
				(
				$map ($lambda(T, G)(
				- "static assertion for %SizeType";
				/ T -> G;
				- "alias-declaration %SizeType"
				))(("%SizeType", "%size_type"), ("%DifferenceType",
					"%ptrdiff_t"));
				- "alias-declaration %ContainerType"
				),
				/ "functions %(GetLength, SetLength)" -> "data member %Length"
			),
			/ DLD "header names"
			+ DLD ".cpp file for member function implementation"
		),
		/ @ %YBrush $=
		(
			+ DD "Doxygen group %UIBrushes" @ "group %UI",
			/ @ "alias template %GBrushUpdater" $=
			(
				/ "supported variadic template arguments",
				/ "implemented" ^ "%GHEvent" ~ "%std::function"
					// This means now omitting redundant parameters is \
						supported.
			),
			- $revert(b441) "assertion" @ "function %ImageBrush::operator()"
		),
		/ @ "class %MLabel" @ %Label $=
		(
			/ "virtual function %DrawClippedText" -> "static function \
				%DefaultUpdateClippedText; data member %UpdateClippedText",
			- "virtual destructor"
				// Thus %MLabel is not a polymorphic class any longer.
			/ DLD "initialized %(VerticalAlignment, AutoWrapLine, Text, \
				Margin)" ^ "brace-or-equal-initializer" ~ "ctor-initializer",
			/ @ "function %DrawText" $=
			(
				- "color parameter",
					// Member %ForeColor is used instead.
				+ 'const'
			),
			+ "member function %operator()"
		),
		/ %TextBox $=
		(
			/ DLD "initialization" @ "%ForeColor"
				@ "class template %TextPlaceholder"
				@ %TextBox ^ "brace-init-list" ~ "= initializer-clause",
			/ "overrider function %DrawClippedText" @ "class %TextBox"
				-> "function %UpdateTextBoxClippedText"
		),
		/ "explictly supported strong exception guarantee"
			@ "%(TextBox, Button, CheckButton, RadioButton)::Refresh"
			^ "%ystdex::swap_guard" $dep_from %YBase.YStandardEx.Utilities,
			// Thus all GUI rendering meets strong exception safety guarantee.
		(
		(
		+ "data member %ForeColor" @ "class %MLabel";
		+ "color as 2nd parameter" @ "constructors %(MLabel, Button)",
		+ 'using MLabel::ForeColor;'
			@ "classes %(Label, Button, CheckButton, RadioButton, TextBox)",
		/ "foreground color directly initialized for text state rather than \
			data member %ForeColor"
			@ "constructors %(TextArea, BufferedTextArea)" @ %TextArea
		),
		+ "data member %ForeColor"
			@ "classes %(ProgressBar, Thumb, TextList, AScrollBar)",
		- "foreground color parameter" @ "constructors %(Control, Widget)";
		- "data member %ForeColor" @ "class Widget"
		),
		/ DLD "implemented %(TextBox, Label, Button, CheckButton, \
			RadioButton)::Refresh" ^ "%MLabel::operator()"
			~ "%MLabel::DrawText" $dep_from "%MLabel::operator()"
	),
	/ DD $term $lib $design "all 'C++14'" -> 'C++1y'
		!@ %Documentation::CommonRules,
		// The standard is not published yet. Do not modify rules to \
			minimalize future modification.
	/ %YBase.YStandardEx $=
	(
		/ @ %Functional $=
		(
			/ "data member %Caller" @ "template class %expanded_caller"
				=> "%caller",
			(
			+ "metafunction %wrapped_traits_t";
			+ "class template %thunk"
			)
		),
		/ DLDI "simplified" @ %AnyIterator ^ 'wrapped_traits_t<_type>'
			~ 'typename wrapped_traits<_type>::type' $dep_from
			"%wrapped_traits_t" @ %Functional,
		+ "class template %swap_guard and its partial specialization" %Utilities
	)
),

b524
(
	+ DLB '-pipe' @ "compliler and linker options" @ "Code::Blocks projects"
		@ "platform %MinGW32",
		// To get rid of most issues with size limitation of temporary \
			directory (e.g. on RAM disk).
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ $revert_ex(b523) "allowed null container pointer"
					@ "function %GetTotal" @ "class template %GSequenceViewer"
					@ %Viewer,
					// If container pointer is null, the result is zero.
				/ %TextList $=
				(
					/ @ "class %MTextList" $=
					(
						+ "data members %(lblShared, idxShared); functions \
							%(GetChildrenByIndices, GetLastLabelIndexClipped, \
							MakeIterator)" $dep_to
							"text list children iterations",
						(
						+ "data member %LineGap";
						/ DLD "implemented function %RefreshTextState"
							^ "%LineGap" ~ "%tsList.LineGap";
						/ "initialized function %GetItemHeight" ^ "%(Font, \
							LineGap)" ~ '%GetTextLineHeightExOf(tsList)';
						- "data member %tsList",
						),
						/ "base class %MLabel" -> "data members %(Font, Margin)"
							$dep_from "%TextList::(HorizontalAlignment, \
							VerticalAlignment, Text)
					),
					/ @ "class %TextList" $=
					(
						(
						$dep_from "text list children iterations"
						+ "function %GetLastLabelIndex",
						+ 'using MTextList::MakeIterator;',
						/ "implemented function %Refresh" ^ "widget iteration \
							and function %PaintVisibleChildAndCommit" $dep_to
							"text list refresh"
						),
						- "using-declarations %(HorizontalAlignment, \
							VerticalAlignment, Text) from %MTextList"
					)
				),
				(
				/ "shared widget painting event handlers" @ "constructor"
					@ "class %Menu" @ %Menu $dep_from "text list refresh";
				- "member functions %(Menu; TextList)::DrawItem";
				)
			),
			/ %Service $=
			(
				* DD "missing parameter name for directive '\param'"
					@ "Doxygen comments" @ "function %Switch" @ "class \
					template %GAccessList" @ %AccessHistory $since b404,
				* DD "outdated parameter name %blit for directive '\param'"
					~ "%shader" @ "Doxygen comments"
					@ "function template %BlitPixels" @ %YBlit $since b442,
				/ DLD @ "class %TextState" @ %TextBase $=
				(
					/ DLD "initialized data member %LineGap"
						^ "brace-or-equal-initializer '= 0'"
						~ "ctor-initializer",
					/ DLD "initialized data member %Pen"
						^ "braced-init-list '{}'" ~ "ctor-initializer"
				)
			)
		),
		/ %YCLib $=
		(
			+ 'YB_NONNULL(1, 3)' @ "function %LogWithSource" @ %Debug
				$dep_from %YBase.YDefinition,
			* $revert_ex(b501) DD "missing '\def' command" @ "Doxygen \
				comments" @ "macro %YCL_KEYSTATE_DIRECT" @ %Input $since b501
		)
	),
	/ %YBase $=
	(
		+ "macro %YB_NONNULL" @ %YDefinition,
		/ %YStandardEx $=
		(
			+ 'YB_NONNULL(1)' @ "function template specialization %sfmt<char>"
				@ %String $dep_from %YDefinition,
			* DD "wrong directive '\breif' used" ~ '\brief'
				@ "Doxygen comments" @ "function %iswgraph"
				@ %CWideCharacterType $since b513
		)
	),
	* "missing atomic member initialization" $effective %YFramework.Helper
		$= (^ "braced-init-list" ~ "empty ctor-initializer")
		@ ("class %Environment" @ %Environment $orig (@ %Host) $since b399,
		"class %WindowThread" @ %HostRenderer $orig (@ %Helper $impl) b428);
		// See $2014-08 @ %Documentation::Workflow::Annual2014. Similar as fix \
			@ b491.
),

b523
(
	/ DLD "updated header search paths" @ "Microsoft VC++ projects" $=
	(
		/ "order" @ "project %YFramework_Android",
		* "redundant slash" @ "project %YFramework" $since b518,
	),
	/ %YFramework $=
	(
		/ %YSLib.UI $=
		(
			/ %TextList $=
			(
				/ @ "class %MTextList" $=
				(
					+ "alias-declaration %ViewerType; protected data members \
						%(vwText, uTopOffset), functions \
						%(AdjustViewLengthForHeight, AdjustOffsetForHeight, \
						AdjustViewForContent, CheckSelected, ResetView)"
						$dep_to "text list model members",
					/ @ "constructor" $=
					(
						+ "parameter of highlight color pair",
						/ "access control" -> 'public' ~ 'protected'
					),
					+ "function %GetUnitLocation" @ "%MTextList"
				),
				/ @ "class %TextList" $=
				(
					/ "all data members and protected base classes except \
						%MTextList" >> "%MTextList",
					+ 'using MTextList::ViewerType;',
					(
					/ "functions %(GetViewPosition, GetFullViewHeight)"
						>> "class %MTextList";
					+ "using-declarations %MTextList::(GetViewPosition, \
						GetFullViewHeight)"
					),
					/ DLDI "simplified" $dep_from "text list model members" $=
					(
						/ @ "function %AdjustViewForContent"
							^ "macros %(PDefH, ImplExpr), \
							function %MTextList::AdjustViewForContent",
						/ @ "function %AdjustViewLength" ^ "macros %(PDefH, \
							ImplExpr), function %AdjustViewLengthForHeight",
						/ @ "function %CheckConfirmed" ^ "macros %(PDefH, \
							ImplExpr), function %MTextList::CheckSelected",
						/ @ "function %CheckPoint for %Point parameter"
							^ "macros %(PDefH, ImplRet)",
						/ @ "function %ResetView"
							^ "functions %(MTextList::ResetView, UpdateView)",
						/ @ "function %SetSelected for %Point parameter"
							^ "macros %(PDefH, ImplRet)"
					),
					(
					$dep_from "%MTextList::GetUnitLocation";
					/ DLDI "simplified function %GetUnitBounds" ^ "function \
						%MTextList::GetUnitBounds, macros %(PDefH, ImplRet)",
					+ 'using MTextList::GetUnitLocation;'
					)
				)
			),
			+ "assertion for nonnull container pointer" @ "function %GetTotal"
				@ "class template %GSequenceViewer" @ %Viewer
		),
		* "application not exited after global application instance destruction"
			@ "platform %Android" $since b502 $=
			// And when the application reentered, it would failed on \
				assertion for nonnull pointer check for instance on debug \
				configuration or just crash on release configuration.
			$= (+ "%::ANativeActivity_finish call after %::y_android_main call"
				@ "host thread" @ %'Helper_(Android)'.AndroidHost)
	)
),

b522
(
	/ $dev $resolve(#24) "updated MSYS2 GDB",
	/ %YBase.YStandardEx $=
	(
		+ %Exception
			$= (+ "function template %raise_exception");
		/ %Iterator $=
		(
			/ @ "class template %subscriptive_iterator" $=
			(
				/ DLD "simplified type name" @ "member function %equals"
					^ "template-name" ~ "simple-template-id",
				/ "constructor" ^ 'container_type' ~ '_tCon'
			),
			(
			+ "class template %prototyped_iterator";
			+ "function templates %operator(==, !=) for %prototyped_iterator",
			+ "function template %make_prototyped_iterator"
			)
		)
	),
	/ %Tools.SHBuild.Main
		$= (/ DLDI "simplified"
			^ $dep_from %YBase.YStandardEx.Exception),
	/ %YFramework.YSLib $=
	(
		+ "assertions for the boundary argument"
			@ "functions %(DrawCircle, FillCircle)" @ %Service.YDraw,
			// As %(DrawPoint, DrawHLineSeg, DrawVLineSeg).
		/ %UI $=
		(
			/ %YStyle $=
			(
				+ "function %RectDrawArrowOutline",
				+ "last parameter 'bool = {}' to specify drawing outline only"
					@ "function %DrawArrow",
				+ "assertion for rotation value"
					@ "functions %(RectDrawArrow, RectDrawArrowOutline)",
				+ "functions %(RectDrawCornerArrow, \
					RectDrawCornerArrowOutline; DrawCornerArrow)"
			),
			/ DD "explicitly allowed %IWidget::GetChildren to optimize out \
				children out of boundary",
			/ "class %TextList" @ %TextList $=
			(
				/ "function %DrawItems merged to %Refresh",
				/ DLD "member functions order",
				+ "member function %GetUnitBounds"
			),
			/ DLD "implemented member function %Renderer::CommitInvalidation"
				@ %YRenderer ^ "%(PDefH, ImplRet)",
			/ %YWidget $=
			(
				+ "function %PaintChildAndClip";
				/ "function %PaintVisibleChild"
					-> "inline function %PaintVisibleChildAndClip"
			),
			/ "class %MTextList" @ %Label >> %TextList
		),
		/ "explicitly specified unsigned integer type as underlying type"
			@ "enum %Rotation" @ %Core.YGDIBase
	)
),

b521
(
	/ %YFramework $=
	(
		/ @ "platform %Win32" @ %YCLib.NativeAPI $=
		(
			+ "macro definition %NOMINMAX when undefined before including \
				<Windows.h>",
				// To get rid of macros %(min, max) pollution.
			/ "macro definition %mkdir" -> '#undef mkdir',
			/ "function 'int makedir(char const* dir, ::mode_t)'"
				@ "namespace %platform_replace"
				-> "function 'int makedir(char const* dir, ::mode_t = 0777)'"
		);
		/ %Helper $=
		(
			(
			/ %Host => %Environment
				$= (/ "class %Host::Environment" -> "%YSLib::Environment with \
					minimal support for non-hosted platforms");
			/ @ %GUIApplication $=
			(
				/ "call of functions from %Initialization"
					>> "class %Environment"
				/ "function 'Environment& GetHost()'" @ 'YF_Hosted'
					-> "'Environment& GetEnvironment() ynothrow' regardless of \
					%YF_Hosted",
				/ "function %Host::FetchEnvironment" >> "namespace %YSLib",
			)
			),
			+ $dev "declaration of class %Environment" @ '!YF_Hosted'
				@ %YGlobal,
			+ DLD "environment support" @ "class %InputManager"
				@ %InputManager,
			/ "macro %YFM_Helper_Host" @ %YModules => "%YFM_Helper_Environment",
			/ "class %Environment" @ %Environment $=
			(
				/ "static function %HostLoop"
					>> ("class %WindowThread" @ %HostRenderer);
					// Hosted environment only.
				/ DLD "implemented function %EnterWindowThread"
					^ "macros %(PDefH, ImplExpr)"
			),
			* "DS implementation hack" @ "platform %Android" $since b385 $=
				// The screen mapping is specific for platform %DS. Though \
					since b385 it is a 'FIXME', but there is even no support \
					for earlier version.
			(
				/ "class %Environment" @ %Environment $=
				(
					+ "data member %MapPoint";
					/ "implemented %MapCursor" ^ "%MapPoint"
				);
				/ DLD "set environment %MapPoint handler"
					@ "class %DSApplication" @ %DSMain
			)
		)
	),
	(
	/ %YFramework.YSLib.Core.Cache
		-> %YBase.YStandardEx.Cache $=
	(
		/ "name of header %Cache.hpp" => "cache.hpp",
		/ "class template %YSLib::GMRUCache" -> "%ystdex::used_list_cache" $=
		(
			// Note the MRU is not clear enough. Actually the substitution of \
				old entry is governed by LRU, although the reserved entries \
				are sorted as MRU order, as same as described by FreeType2 \
				cache subsystem documentation.
			/ "type alias %UseList" => "%used_list",
			/ "type alias %UseCache" => "%used_cache",
			/ "type alias %Map" => "%map_type",
			DLD !^ "%DefDeMoveCtor",
			/ "function %GetMaxUse" => "%get_max_use" !^ "%DefGetter",
			/ "function %SetMaxUse" => "%set_max_use",
			DLD ^ "%yassume" ~ "%YAssert",
			/ DLD "minority member renaming"
				// To conform the naming convention.
		),
		/ "function template %YSLib::CacheLookup" -> "%ystdex::cache_lookup"
			$= (/ "thrown exception %LoggedEvent" -> "%std::runtime_error")
	);
	- "macro %YFM_YSLib_Core_Cache" @ %YFramework.YSLib.Core.YModules
	)
),

b520
(
	/ %YFramework $=
	(
		/ %'YCLib_(MinGW32)' $=
		(
			+ %Consoles
				$= (+ "class %WConsole"),
			- DLD "unused redundant internal function" @ %Win32GUI,
			* DLD "missing specifying return type" @ "lambda-expression with \
				multiple return statements" @ "constructor %Win32Exception"
				@MinGW32 $since b435,
			+ "macro %YFM_MinGW32_YCLib_Consoles" @ %YModules
		)
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ DLDI "simplified checkbox background drawing" @ %Selector,
					// Removed unnecessary calculation.
				- DLD "unused redundant internal constant object" @ %TextList
			),
			/ %Core.YEvent $=
			(
				/ "member function %operator==" @ "class template %GHEvent"
					-> "friend function",
				+ "2 function template %operator(==, !=) for %GHEvent with \
					%std::nullptr_t",
				+ "function template %operator!= for %GHEvent"
			),
			* "wrong return type" @ "member function %TextFile::GetBOMSize"
				@ %Service.TextFile $orig (@ %Core.YFile_(Text)) $since b138
				$= (/ "return type" -> "%size_t" ~ "%u8")
				// The member type had been already changed ago but the getter \
					wasn't be synchronized.
		),
		/ %YCLib $=
		(
			+ "(struct %HandleDeleter; alias-declaration %UniqueHandle; \
				function %MakePipe)" @ %Host,
			/ $dev "distinguished Win64 from 32-bit Windows platforms"
				@ %Platform $=
			(
				+ "platform %Win64 with macro %YF_Platform_Win64 capable with \
					%(YCL_Win32, YCL_MinGW, YF_Hosted)",
				(
				+ "platform %MinGW64 with macro %YF_Platform_MinGW64 capable \
					with %(YCL_Win64, YCL_Win32, YCL_MinGW, YF_Hosted)";
				+ DD "Doxygen group definition" @ "platform %MinGW64"
				)
			),
			/ "static assertion for screen measurement types" @ %Video $=
			(
				/ $impl ^ "%ystdex::integer_width"
					~ "%std::numeric_limits::max";
				/ $comp $workaround "support for implementation without \
					constexpr member functions of instants \
					%std::numeric_limits",
					// Though constexpr functions are mandated already by ISO \
						C++11, some implementations are still conforming now.
				/ $comp "eliminated signed and unsigned integer comparing"
					// Otherwise it may issue a warning which is hard to \
					overcome.
			)
		),
		* DLB "ill-formed code due to narrow conversion when %std::size_t \
			converted to 'unsigned long'" (@ %'YCLib_(MinGW32)'.MinGW32
			$orig (@ %Helper)) $since b387,
			// It would fail to compile for Win64.
		/ DLDI "simplified member function \
			%InputManager::DispatchInput" @ %Helper.InputManager
			// Also to eliminate Microsoft VC++ warning C4457.
	),
	/ %Tools.SHBuild $=
	(
		/ %Main $=
		(
			(
			/ DLDI "colored printing" ^ "%platform_ex::WConsole" ~ "Windows API"
				$dep_from %'YCLib_(MinGW32)'.Consoles;
			* $comp "color pollution of external console" $since b519
			),
			/ "always set logging handler in spite of number of command line \
				arguments",
				// Because the "catch" clause was also using logging.
			/ "log level output" $=
			(
				/ DLDI ^ "%std::showbase",
				/ "shown uppercase in hexadecimal numbers"
			),
			/ "explicitly allowed multiple occurrence of options"
				@ "usage information",
			+ "option '-xid,'" $dep_to "subdirectory ignorance",
			(
			+ "refactored" ^ "context class with %ystdex::thread_pool"
				$dep_from %YBase.YStandardEx.Concurrency;
			+ "option '-xj,' for multitasking with max number of paralleled \
				jobs" ^ "threading"
			),
			* DLD "inconsistent use of 'u8' prefix for output" $since b519
			- DLD "assertion for arguments number"
		),
		/ $lib @ "%SHBuild-YSLib.sh" $=
		(
			(
			* "wrong options for build static libraries"
				$since b474 $=
			(
				- '-DYB_BUILD_DLL' @ "%YBase build command" $=
				/ @ "%YFramework build command" $=
				(
					- '-DYB_DLL -DYF_BUILD_DLL',
					- '-lYBase'
				)
			),
			+ "synchronized options with Code::Blocks projects setting" $=
			(
				+ "options '-Wcast-align -Winit-self -Wmain \
					-Wmissing-declarations -Wmissing-include-dirs \
					-Wnon-virtual-dtor -Wredundant-decls -ffat-lto-objects' \
					for all 2 build commands",
					// But no '-Wno-literal-suffix -Wno-unused-local-typedefs'.
				+ "option '-pedantic-error'" @ "%YFramework build command"
			);
			/ DLD "extracted common options"
			),
			(
			/ "ignored by options '-xid,alternative -xid,data -xid,include'"
				$dep_from "subdirectory ignorance";
			* $comp "'alternative' directory wronly compiled into library \
				%YFramework" $since b474
			),
			+ DLB "parameter support"
			+ "option echo"
		)
	),
	/ %YBase $=
	(
		/ 'using raw_tag = empty_base<>;' @ %YBase.YDefinition
			-> "empty struct %raw_tag",
			// Otherwise the constructor of %YSLib::Thumb::UI using this type \
				would make GCC 4.9.0 or GCC 4.9.1 crash (segmentation fault).
		/ %YStandardEx $=
		(
			* "wrongly ignored predictor %comp" @ "function template \
				%begins_with" @ %YStandardEx.String $since b519,
				// Though default behavior is not affected.
			+ %Concurrency
				$= (+ "class %thread_pool");
				// Currently only hosted implementation of G++ and libstdc++ \
					is supported.
		),
		/ DLD %YTest $=
		(
			* "missing UTF-8 BOM" @ "header %test.h" $since b519,
				// Since there is "©" which is non representable by ANSI \
					codepage, Visual Studio would issue a warning.
			* "missing UTF-8 BOM" @ "header %timing.h" $since b319,
			/ DD "Doxygen group definition" @ %Timing >> %Test
		)
	),
	/ $dev $build "toolchain and library using" @ "platform %MinGW32"
		$dep_from %YBase.YDefinition $=
	(
		// Libraries have to be rebuilt, otherwise the LTO version would be \
			incompatible, as: "lto1.exe: fatal error: bytecode stream \
			generated with LTO version 2.2 instead of the expected 3.0".
		^ $dev $build $re_ex(b453) "MinGW[gcc version 4.9.1 (Rev1, Built by \
			MSYS2 project)] mingw32/mingw-w64-i686-gcc-4.9.1-1"
			~ "MinGW[gcc version 4.8.2 (Rev7, Built by MSYS2 \
			project)] mingw32/mingw-w64-i686-gcc-4.8.2-7" @ "platform %MinGW32",
			// Unchanged: Target=i686-w64-mingw32, Thread model: posix, \
				Exceptions implementation: Dwarf2.
		/ "recompiled library %FreeType",
		/ "recompiled library %FreeImage" $=
		(
			/ "updated base library 3.16.0" ~ "3.15.4";
			/ "merged old modification",
			* "wrong location of file %GetType.cpp" $since b431
				// Thus ignored by build script since it used precise list of \
					files.
				$= ("%Source/GetType.cpp" >> "%Source/FreeImage"),
			/ "updated file %Makefile.mingw as base version 3.16.0" $=
			(
				/ 'LIBRARIES = -lwsock32 -lws2_32' -> 'LIBRARIES = -lws2_32',
				+ '-DDISABLE_PERF_MEASUREMENT' @ "%CFLAGS"
			),
			/ 'VER_MINOR = 15.4' -> 'VER_MINOR = 16.0' @ "file %Makefile.srcs",
			^ "libpng 1.6.12 with old libpng 1.6.3 standard configuration \
				header file %Source/LibPNG/pnglibconf.h" ~ "libpng 1.6.10",
			^ "libjpeg-turbo 1.3.1 with old configuration headers"
				~ "libjpeg-9a"
		),
		/ @ "Code::Blocks projects" $=
		(
			+ '-ffat-lto-objects' @ "release configurations",
				// See $2014-07 @ %Documentation::Workflow::Annual2014.
			/ "made '-flto=jobserver' only effective in release configurations"
		)
	),
	/ "updated %Readme.zh-CN.txt with information test project and %SHBuild",
	/ @ "made sure 'inline' is not omitted for all \
		extension-namespace-definition of inline namespaces" $effective
		%platform_ex::Windows @ %'YCLib_(MinGW32)',
		// See %Documentation::CommonRules @5.5.8.3. Clang++ still complains \
			about it.
	/ DLB "workaround possible ambiguity" $effective @ %YFramework.YSLib $=
	(
		// Clang++ complains about them.
		/ $effective @ %Service.YPixel $=
		(
			/ "explicitly specified functional notation of conversion to \
				'_tAlpha'" @ "function templates %CompositeComponentOver"
				@ "class templates and specializations %(GPixelCompositor,
				GPixelCompositor<1, _vSrcAlphaBits>, GPixelCompositor<1, 1>, \
				GPixelCompositor<_vDstAlphaBits, 1>)",
			/ "explicitly specified functional notation of conversion to \
				'_tSrcAlpha'" @ "function templates %CompositeComponentOver"
				@ "class templates and specializations %(GPixelCompositor, \
				GPixelCompositor<_vDstAlphaBits, 1>)"
		),
		/ "explicitly specified functional notation of conversion to 'HSL'"
			$effective @ "functions %(HSLToColor, RollColor)" @ %UI.YStyle
	),
	/ DLD %YReader $=
	(
		* "wrong use of 'yconstexpr' on closure object"
			@ "constructor %SettingPanel" @ %ReaderSettingUI $since b390,
		/ %ShlExplorer $=
		(
			* "missing explicit conversion on enumerator of scoped enumeration"
				$since b410,
			- "unused redundant internal constant object"
		)
	),
	* $dev $build "wrong format string used in call of function '*printf'"
		@ "strict ISO C++ code conformance" $=
	(
		* @ ("function %InitializeSystemFontCache" @ %Helper.Initialization
			$since $before b132, ("member function %MemoryList::Print"
			@ %YSLib.Adaptor.YNew $since b173) $effective @ %YFramework
			// The %std::allocator uses %std::size_t as %size_type, which is \
				%size_t in ISO C standard library and fit for '%zu' for
				%fprintf.
			$= (/ "format" ^ '%zu' ~ '%u'),
		* @ "function %OnExit_DebugMemory_print" @ %Main $since
			$orig (@ "function %OnExit_DebugMemory" @ %platform.DS.Main) b300
			$= (/ "format" ^ '%zu' ~ '%i'),
		/ $effective %YReader $=
		(
			* @ "member function %HexViewArea::Refresh" @ %HexBrowser $since
				b253
				$= (/ "format" ^ '%tX' ~ '%X'),
			* @ "member function %ReaderBox::UpdateData" @ %ShlReader $since
				b271 $=
			(
				/ "format" ^ '%2zu' ~ '%2u',
				/ "argument" ^ "explicitly cast to %std::size_t"
			)
		)
	),
	* DLB "wrong implementation due to ill-formed code when %std::size_t is \
		not alias of 'unsigned' causing no suitable %min found"
		@ (%YFramework.YSLib.Service.TextFile $since b290,
		%YReader.Shells $since b183)
	// It would fail to compile for Win64.
	/ "macro %YCL_MinGW32" => "%YCL_MinGW"
		// See $2014-07 @ %Documentation::Workflow::Annual2014.
),

b519
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ DLD "simplified input boundary calculation" @ "DS host window"
				@ "platform %Win32";
			- "member function %Host::Window::GetInputBounds" @ %HostWindow
		),
		/ %YSLib $=
		(
			/ DLDI @ "constructor %Typeface" @ %Adaptor.Font
				!^ "%platform::yprintf",
				// Error code is now embedded to the description string in \
					exception object.
			/ DLD @ "functions %(PlotHLineSeg, PlotVLineSeg)" @ %Service.YDraw
				$=
			(
				/ "implementation of screen metrics" ^ "%SPos" ~ 'auto',
					// All arguments of %RestrictInInterval should be the same \
						type.
				/ $revert(b517) !^ "cast to 'SDst' for comparison"
					// To eliminate [-Wsign-compare].
			),
			/ %UI $=
			(
				/ DLD "implemented function %DrawTrackBackground" @ %Scroll
					^ "cast to 'SPos'",
				/ @ "member function %TextList::LocateViewPosition" @ %TextList
					$=
				(
					* "wrong value restricted when view height is less than or \
						equal to the height" $since b261;
					* $comp "wrong value restricted when view height is zero"
						$orig (@ %UI.YMenu $since b203)
				)
			),
			/ @ "function template %RestrictInInterval" @ %Core.YCoreUtilities
				$dep_from %(Service, UI) $=
			(
				/ "all 2 parameters 'int'" -> 'const _type&';
				* $comp "possible undesired implementation-defined truncation \
					of value when '_type' being instantiated as unsigned type"
					$since b263
					// To eliminate [-Wsign-compare].
			)
		),
		/ "implemented debug screen directly only for platform %DS"
			^ "%YConsoleInit" ~ "call of %(YDebugSetStatus, YDebugBegin) on \
			without platform restriction" @ ("function %HandleFatalError"
			@ %Helper.Initialization, "main function" @ %Main
			"function %ShowFatalError" @ %DSMain) $dep_from %YReader.Shells,
			$dep_to "removal of DS debug call"
			// Actually only on DS is valid.
		/ %YCLib.Debug $=
		(
			(
			// Log class is preferred.
			- "function %yprintf" $dep_from %YSLib.Adaptor.Font,
			- "all 2 functions %YDebug",
			- "function %YDebugGetStatus",
			- "functions %(YDebugSetStatus, YDebugBegin)"
				$dep_from "removal of DS debug call"
			),
			/ "member function %Logger::SetWriter" => "%SetSender"
		),
		* DLD "missing specifying return type" @ "lambda-expression with \
			multiple return statements" @ "member function \
			%GUIApplication::DealMessage" @ Helper.GUIApplication $since b481
	),
	- 'using platform::YDebugSetStatus;' @ %YReader.Shells,
	/ DLD "all 'return false' out of marco definition with no 'auto' deduction"
		-> 'return {}',
		// Return type of these functions are already specified.
	(
	/ %Documentation $=
	(
		+ %Dependencies;
		/ "dependencies descriptions" %Designation >> %Dependencies
	);
	/ $doc "updated build notice" @ "%Readme.zh-CN.txt"
		$= (+ "runtime dependency description")
	),
	/ %YBase $=
	(
		/ %YStandardEx $=
		(
			* "strict ISO C++ code conformance" $since b352
				$= (* "missing including <new>" @ %Any),
				// The program temporarily is not ill-formed for libstdc++'s \
					<memory> including <new>.
			/ @ %String $=
			(
				+ "3 function templates %(string_begin, string_end)",
				(
				/ "all 2 function templates %start_width" => "%begins_with";
				* "spelling error" @ %String $since b450
				),
				/ @ "function templates %string_length" $=
				(
					/ DLD "dispatched with class templates to be able to \
						distinguish array lvalues from pointer type arguments";
					+ "overloading for array types"
						// Now it is based on the length of array but not \
							compared like NTCTSs.
				);
				/ "all function templates implementation" ^ ("%string_begin"
					~ "%begin", "%string_end" ~ "%end"),
					// The behavior of prefix comparing algorithm is now \
						adjust to the same as %boost::starts_with for array \
						types.
				/ DLD "prefix comparing" ^ "%std::equal" %String;
					// See $2014-07 @ %Documentation::Workflow::Annual2014.
			),
			* DLD "wrong specifier order" @ "function templates %get"
				@ "class templates %variadic_param" @ %Functional $since b412,
				// See %Documentation::CommonRules @5.5.10.
			* "comparing for signed 'wchar_t'" @ "function %iswprint"
				@ %CWideCharacterType $since b513
				// To eliminate [-Wsign-compare].
		)
		+ %Test @ %YTest $=
		(
			+ "function template %expect",
			+ "class %group_guard"
		),
	),
	+ %Test $=
	(
		+ %YBase $dep_from %YStandardEx.YTest $=
		(
			+ "2 test cases for %ystdex::transform_n",
			+ "11 test cases for %ystdex::(string_length, begins_with, \
				ends_with)" $dep_from %YBase.YStandardEx.String
		);
		+ "test script %test.sh"
	),
	/ %Tools.SHBuild.Main $=
	(
		/ "implemented printing" ^ "%YSLib::Logger"
			~ "global character streams",
		+ "option '-xlogfl,'",
		+ "colored output"
	)
),

b518
(
	/ DLD "updated header search paths" @ "Microsoft VC++ projects" $=
	(
		/ "missing %Android inline module and %YBase paths"
			@ "project %YFramework_Android" $since b492,
		/ "missing %DS inline module path" @ "project %YFramework_DS" $since
			b431,
		/ "missing %Android inline module path" @ "project %YFramework_MinGW32"
			$since b492,
		/ "simplified and reordered paths",
		- "all '$(NMakeIncludeSearchPath)'"
			// NMake was already useless since Visual Studio 2010.
	),
	/ %YFramework $=
	(
		/ %'YCLib_(MinGW32)'.Win32GUI $=
		(
			+ "member function %WindowReference::GetCursorLocation",
			/ @ "class %HostWindow" $=
			(
				+ 'using WindowReference::GetCursorLocation'
					$dep_from "%WindowReference::GetCursorLocation",
				+ "virtual function %MapPoint",
				- $revert(b427) "data member %BoundsLimited" $dep_from
					"removal of bounds limit"
			),
			* "missing 'YF_API'" @ "function %BindDefaultWindowProc" $since b518
		),
		/ %Helper $=
		(
			/ DLDI "simplified member function %Environment::MapCursor"
				@ "platform %Win32" @ %Host $dep_from
				%'YCLib_(MinGW32)'.Win32GUI,
			- "simplified DS window input boundary implementation"
				@ "platform %Win32" $dep_from "%HostWindow::MapPoint"
				@ %'YCLib_(MinGW32)'.Win32GUI $dep_to "removal of bounds limit",
			/ "class %Host::Window" @ %HostWindow $=
			(
				/ @ "member function %GetInputBounds" $=
				(
					/ "return type" -> "%YSLib::Drawing::Rect"
						~ "%pair<YSLib::Drawing::Point, YSLib::Drawing::Point>",
					- 'ynothrow'
				),
				/ @ "platform %Win32" $=
				(
					* "missing transforming coordinate for client area"
						@ "member function \
						%UpdateCandidateWindowLocationUnlocked" $since b512,
					+ "virtual function %UpdateTextInputFocus",
					/ "member function %UpdateCandidateWindowLocation kept \
						away input boundary transformation"
				)
			),
			/ @ "platform %Win32" $=
			(
				/ @ "class %InputManager" @ %InputManager $=
				(
					* "missing transforming coordinate for top level widget"
						"function %DispatchInput" @ %Helper.InputManager
						$since b512,
					/ DLDI @ "class %InputManager" ^ "'UI::IWidget*' as text \
						input focus cached pointer" ~ 'void*',
					/ DLD "simplified text input focus update"
				),
				+ DLD "DS window of text input focus transformation"
					$dep_from "%Host::Window::UpdateTextInputFocus"
			);
		),
		* "wrong blue value initialized" @ "constructor %ARGB" @ %YCLib.Video
			$since b507,
		/ "member function %TextBox::ExportCaretPosition" @ %TextBox @ %YSLib.UI
			=> "%ExportCaretLocation"
	)
	- "name pollution list" @ %Documentation::Definitions,
	/ $doc "updated build notice" @ "%Readme.zh-CN.txt",
	/ $dev $build "updated makefile" @ "platform %Android" $=
	(
		/ "updated %ANDROID_SDKVER value" -> "20.0.0" ~ "19.0.3",
			// This is the Android SDK Build-tools version.
		/ "updated zipalign path" @ "target $(OUTPUT_FINAL)"
			// The new SDK moved zipalign to the Build-tools.
	)
),

b517
(
	(
	/ DLD "template parameter %_tIter" @ "constructor template \
		%transformed_iterator" => "%_tIterOrig" @ %YBase.YStandardEx.Iterator;
	/ DLD "all template parameters %_tIterator" => "%_tIter" $effective
		@ %YBase.YStandardEx.(Iterator, AnyIterator);
	),
	/ %YBase.YStandardEx $=
	(
		/ %Algorithm $=
		(
			+ "function template %transform_n",
			* "missing header for %is_pod" $since b254
		),
		+ "function template %exchange" @ %Utilities
	),
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				/ %TextBox $=
				(
					/ @ "class %TextPlaceholder" $=
					(
						+ "captured control pointer check"
							@ "function %BindByFocus",
						+ "function %GetCapturedPtr"
					),
					* $lib "platform neutrality" @ "types %(SPos, SDst)"
						@ "member function %TextBox::GetCaretPosition" $since
						b484 $dep_to "screen measurement platform neutrality"
						// The calculation of width accidentally depended on \
							result of signed integers, which would turned to \
							be unsigned when the rank of %SDst is the greatest \
							value in the expression, e.g. 32-bit unsigned int \
							for platform %Win32.
				),
				* $lib "platform neutrality" @ "types %(SPos, SDst)"
					@ "member function %TextList::DrawItems" @ %TextList
					$since b346 $dep_to "screen measurement platform neutrality"
			),
			* $lib "platform neutrality" @ "types %(SPos, SDst)" @ %YSLib $since
				$before b132 $dep_to "screen measurement platform neutrality" $=
			(
				// To eliminate [-Wsign-compare].
				* $design "signed and unsigned integer comparison"
					@ (("function %PutCharBase" @ %CharRenderer $since b372,
					"function %BlitBounds" @ %YBlit $since b438, "class \
					%TextRegion" $since $before b132, "functions %(PlotHLineSeg,
					PlotVLineSeg)" @ %YDraw $orig (@ %Core.YGDI $since b135))
					@ %Service, "member function %TextList::InvalidateSelected"
					@ %UI.TextList $since b268),
				* "missing explicit template parameter" @ "member function \
					%TextBox::GetCaretPosition" @ %UI.TextBox $since b484;
			),
			/ "checked screen position value for Win32 API"
				^ "%YSLib::CheckPositiveScalar<SPos>"
				@ %'Helper_MinGW32'.Win32GUI,
		),
		/ %YCLib.Video $=
		(
			+ $dev "static assertions for screen measurement types",
				// Now integer types are explicitly required.
			/ "alias-declarations of %(SDst, SPos)" ^ "%(long, unsigned long)"
				~ "%(std::int16_t, std::uint16_t) respectively"
				@ "%platform Win32" $dep_from "screen measurement platform \
				neutrality" $dep_to "32-bit screen measurement types"
		),
		/ DLD "simplified implementation by omitting explicit template argument"
			@ "member function %Environment::MapCursor" @ "%platform Win32"
			@ %Helper.Host $dep_from "32-bit screen measurement types"
	)
	/ %YReader $=
	(
		* "no effect when check box unchecked" @ %ShlExplorer $since b516,
		* "platform neutrality" @ "types %(SPos, SDst)" @ "member function \
			%HexViewArea::Refresh" @ %HexBrowser $since b253
	),
	* DLD "missing updating header search paths"
		@ "Microsoft VC++ project %YFramework_MinGW32" $since b493,
),

b516
(
	/ %YFramework.YSLib $=
	(
		/ %UI.TextBox $=
		(
			/ @ "class %TextBox" $=
			(
				- "collapsing" @ "handling event %LostFocus",
				* "wrong collapsing behavior when text selected" $since b514,
					// It wrongly used the direction determined by selection \
						rather than by cursor position. And now it is clear \
						that no %CollapseCaret should be called.
				(
				+ "data member 'ucs4_t MaskChar = ucs4_t();'";
				/ "displayed with text determined by %GenerateDisplayedResult \
					if nonnull" @ "functions %(Refresh, GetCaretLocation, \
					GetCaretPosition)" $dep_from %Core.YString
				),
				(
				+ "data member 'size_t MaxLength{-1};";
				/ "restricted %Text length with %MaxLength"
					@ "function %ReplaceSelection"
				)
			),
			+ "class %TextPlaceholder"
		),
		/ %Core $=
		(
			/ @ "class template %GHEvent" @ %YEvent $=
			(
				/ "supported null equality comparing" @ "comparer";
				+ "null pointer as default argument for 1 parameter \
					constructor as fit for %DefaultConstructible requirement",
				+ "using-declarations %BaseType::operator bool"
			),
			+ "binary %operator* for %String" @ %Core.YString
		),
		- $revert(b419) DLB "special member functions as workaround for G++ \
			4.7.1" @ "class %Font" @ %Adaptor.Font;
	),
	/ @ "class %ShlExplorer" @ %YReader.ShlExplorer
		$dep_from %YFramework.YSLib.UI.TextBox $=
	(
		+ "protected 'TextPlaceholder tpDefault{};'";
		+ "mask character, max length and text placeholder tests for text box"
	)
),

b515
(
	/ @ %Tools $=
	(
		/ @ %SHBuild $=
		(
			/ @ "(build.sh, self-host.sh)" $=
			(
				/ DLD "separated flags",
				/ $build "removed dependencies on installed files" $=
					// For convenient implementation of bootstrap in future.
				(
					^ DLB "header files in repository" ~ "installed headers",
					^ DLB "source files in repository" ~ "installed libraries"
				),
				^ $build "static linked builds",
				+ DLB '-Wl,--gc-sections' @ "linker flags"
			),
			/ "include directories" -> "project directories"
				~ "installed directories" @ "SHBuild-YSLib.sh",
			+ "%IntException handling" @ %Main $since b477
				// The concrete value is only for internal use.
		),
		+ "install-headers.sh",
			// Testing script to copy/update headers in default location \
				(/usr/include) using rsync. Currently it would overwrite 3rd \
				party headers.
	),
	/ %YFramework $=
	(
		* $build "run 'SHBuild-YSLib' failed" $since b492
			$= (* "wrong '#error' directive" @ "!YCL_Android"
				@ (%'Helper_(Android)' $since b502, %'YCLib_(Android)'
				$since b492)),
		/ %YSLib $=
		(
			/ %Service $=
			(
				/%YDraw $=
				(
					* $revert(b514) "wrong assertion"
						@ "non-inline function %FillRect",
					- "redundant assertion for context"
						@ "functions %(DrawHLineSeg, DrawVLineSeg, DrawLineSeg)"
						// This assertion should be hold by underlying pointer \
							nonnull assertion properly.
				),
				+ "parameter 'const Padding& = DefaultMargin'"
					@ "all 2 constructors" @ "class %TextState" @ %TextBase
			),
			/ %UI $=
			(
				* "assertion failure" @ "filling widget background across \
					top-level boundary" $since b514 $dep_from
					"function %FillRect" @ %Service.YDraw,
					// The function templates %FillRectRaw should be \
						boundary-safe because of %Blit.
				(
				* "missing ensuring clip area be subset of target boundary"
					@ "function %BufferedRenderer::Validate" @ %YRenderer $since
					b488;
					// Since %Documentation::YSLib @5.2.1.3 guarantees the \
						clip area can be directly use, it should be ensured.
				* $comp "assertion failure" @ "drawing widget background \
					across top-level boundary" $since b452
					// The function templates %DrawRect and other %'Draw*' \
						might cause the failure.
				),
				/ "default value of %ActiveBorder color" -> '{86, 157, 229}'
					~ 'ColorSpace::Aqua' @ "constructor %Palette" @ %YStyle,
				/ @ "class %MLabel" $=
				(
					(
					+ "functions %GetAlignedPenOffset";
					/ DLD "simplified function %DrawText"
					),
					/ "parameter list" @ "virtual function %DrawClippedText"
						-> '(const Graphics&, const Rect&, Drawing::TextState&)'
						~ '(const PaintContext&, Drawing::TextState&)'
				),
				/ @ "class %TextBox" @ %TextBox $=
				(
					(
					/ "function %TextBox::DrawClippedText",
					+ "protected data member 'Point ptPenOffset'";
					* "missing cursor position adjust with text alignment"
						$since b485
					),
					/ DLD "reduced invalidation area"
						@ "%InvalidateDefaultCaret"
				)
			),
			(
			/ DLD "parameter %bounds" @ "function %DrawClippedText"
				@ %Service.TextRenderer => "%r";
			/ DLD "parameter %mask" @ "functions" => "%bounds" $effective
				@ %(Service.TextRenderer, UI.(Label, TextList, Menu, TextBox))
				// "%mask" is for any complex area being blending or not \
					clipping.
			)
		)
	)
),

b514
(
	/ %YBase.YStandardEx.CCharacterType $=
	(
		(
		+ "functions %iswspace";
		/ "implemented functions %iswspace" ^ "%ystdex::iswspace"
			~ "%std::iswspace"
		),
		* DLD "wrong guard macro" $since b513,
		+ "%yconstfn function %isdigit"
	),
	* $comp "several characters still unprinted" @ "platform %Android" $since
		b492 $dep_from "%ystdex::iswspace" @ %YBase.YStandardEx.CCharacterType,
		// Because of broken Unicode support on Android NDK r9, some \
			characters like “稍”(U+7A0D) and “选”(U+9009) still missed by \
			wrongly returning '8' from 'iswspace' calls.
	/ $doc "extended file name pattern of README DOCUMENTS" @ "%LICENSE.TXT",
	/ %YFramework $=
	(
		/ @ "namespace %Windows" @ %'YCLib_(MinGW32)'.Win32GUI $=
		(
			+ 'using MessageMap = std::map<unsigned, \
				YSLib::GEvent<void(::WPARAM, ::LPARAM)>>;'
			/ DLD "simplified data member declaration %HostWindow::MessageMap"
		),
		/ @ "member function %Host::Window::BindDefaultWindowProc" @ %HostWindow
			-> "function %BindDefaultWindowProc" @ %'YCLib_(MinGW32)'.Win32GUI
			$dep_from %'YCLib_(MinGW32)',
		/ @ "enum %Categtory" @ %YCLib.Keys $=
		(
			* $revert_ex(b490) "underlying type" $since b489
				$= (/ 'KeyIndex' -> 'std::uint_least32_t'),
			* "key category wrongly overlapped for value greater than enumerator
				%Lock" $since b489
				// Though they should not be determinately mutually exlusive,
					it is only safe to seperate them in different kinds for \
					bitand operation.
		),
		/ %YSLib $=
		(
			* "missing updating key state when external input focus is not null"
				@ "member function %GUIState::UpdateChar" @ %YGUI $since b511,
			/ @ "class %TextBox" @ %TextBox $=
			(
				* $comp "no effect for Shift with navigation key"
					@ "class %TextBox" $since b489 $dep_from %YCLib.Keys,
					// Though the effect is not quite right, see below.
				(
				* $comp "potentionally wrong behavior with modifier key held"
					$since b511 $dep_from %YGUI;
					// Wrong key held state updated so the initial delay would \
						be ignored. Note if the bug of key category exists, \
						there would actually be no effect.
				+ "functions %RestoreCaretTimer;
				/ "restored caret timer on modifying caret position or \
					collapsing caret"
				),
				/ "function %UpdateCaret" => "%ExportCaretPosition",
				/ "function %CollapsedAndUpdateCaret" => "%CollapseCaret"
			),
			+ "boundary check assertion" @ "non-inline function %FillRect"
				@ %Service.YDraw
		)
	)
),

b513
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ "traces" @ "member function %StyleMap::Switch" @ %YStyle $=
			(
				+ "quote marks around style name",
				* "missing space when default style found" @ "2nd trace"
			),
			* "missing some characters to print" @ %Service.TextRenderer
				@ ("%platform %MinGW32" $since b296,
				"platform %Android" $since b492) $=
				// For example, “←”(U+2190) and “⑨”(U+2468) on Windows, and \
					some more characters missing on Android 2.3.1.
			/ $design $impl ^ "%ystdex::iswgraph" ~ "%std::iswgraph"
				$dep_from %(YCommon, YBase.YStandardEx.CWideCharacterType)
		),
		* $design "spelling error" @ "trace string" @ "constructor %NativeHost"
			@ %'Helper_(Android)'.AndroidHost $since b504
			$= (/ 'Wating' -> 'Waiting'),
		/ %Helper $=
		(
			* "missing key state indirection" @ "platform %Android" @ %Input
				$since b492,
				// So key state tracked would be wrong in \
					%Helper::InputManager after touching down.
			* "wrong desktop pointer selected to response"
				@ "member function %ShlDS::OnGotMessage" $since b502,
				// Though displaying was normal, the input had not been sent \
					to the right place.
			* "missing calculating with hosted window input bounds"
				@ "platform %Android"
				@ "member function %Environment::MapCursor" @ %Host $since b509
		),
		* "function %IsPrint" @ %YCommon $since b512
			$= (/ $design $impl ^ "%ystdex::iswprint" $dep_from
				%YBase.YStandardEx.CWideCharacterType)
	),
	/ "example command line" @ %Tools.CreationTimeManager.Readme,
		// Hidden files should not be ignored generally. So added '/A' for \
			'DIR'.
	/ %YBase.YStandardEx $=
	(
		+ %CCharacterType $=
		(
			+ "%yconstfn functions %((iscntrl_C0; iscntrl_ASCII, \
				(iscntrl_ISO8859_11; iscntrl_ISO8859_1; isprint)), iscntrl_C1)",
			+ "%yconstfn functions %(isprint_ASCII, isprint_ISO8859_1, isprint)"
		),
		+ %CWideCharacterType
			$= (+ "functions %(iswprint, iswgraph)")
	),
	* $comp "missing rendering left and right arrows on buttons"
		@ %YReader.ShlTextReader $since b299 $dep_from %YFramework.YSLib.Service
),

b512
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				(
					/ @ "class %GUIState" @ %YGUI $=
					(
						+ "data member %CaretLocation"
						/ "clear caret location state" @ "function %Reset",
					);
					/ @ "class %TextBox" @ %TextBox $=
					(
						(
						+ "function %GetCaretLocation";
						/ DLDI
							"simplified static function %InvalidateDefaultCaret"
						),
						+ "functions %(UpdateCaret; CollapsedAndUpdateCaret)";
						/ "updated caret location to GUI state after caret \
							position changes"
					)
				),
				+ "trace" @ "function %InitExStyles" @ %ExStyle,
				+ "trace" @ "member function %StyleMap::Switch" @ %YStyle
			),
			/ %Adaptors $dep_from %YCLib.YCommon $=
			(
				+ 'using platform::IsPrint;' @ "namespace %YSLib::Text"
					@ %YTextBase,
				- $revert($since $before b132) "special process for '\t'"
					@ "member function %Font::GetAdvance" @ %Font
					// The width of tab character should be determinated in \
						concrete contexts.
			),
			^ "%IsPrintf" ~ "%std::iswprint" $dep_from %Adaptor.YTextBase
				$dep_to "print character check"
		),
		/ %Helper $=
		(
			/ @ "platform %Win32" @ "class %InputManager" @ %InputManager $=
			(
				+ DLD "text input focus pointer cache";
				* $comp "missing clearing coposite string after switch text \
					input focus" $since b511,
				/ @ "function %DispatchInput" $=
				(
					/ "supported hosted IME following text input focus"
						$dep_from "hosted caret",
					/ DLDI "put host input process at the end"
				),
				+ "caret location caching; %UpdateCandadateWindowLocation",
				* $comp "'\t' wrongly handled for text input" $since b511
					$dep_from "print character check"
					// Now correctly as no-op. Press tab key in text box is \
						with no action.
			),
			/ @ "class %Host::Window" @ %HostWindow $=
			(
				(
				+ DLD "fake caret to support IME candidate window locating";
				+ "function %UpdateCandidateWindowLocation";
				+ "window caret location caching";
				+ "support of caret update by moving hosted window",
					// Currently it works on Windows 7 but not on Windows 2012 \
						R2.
				+ "support of caret update on composing the input string";
					// Ditto.
				) $dep_to "hosted caret",
				+ "function %BindDefaultWindowProc";
				/ DLDI "simplified constructor" ^ "function %BindDefaultWindowProc"
			),
			^ DLD "macro %YFM_DS_Helper_Shell_DS" @ %Shells
		),
		/ DLDI "simplified all 5 inline functions" @ "%CHRLib.CharacterMapping"
			^ "%(PDefH, ImplRet),
		+ "(2 function, 1 template) %IsPrint" @ %YCLib.YCommon
	),
	/ DLD "all '::UINT'" -> 'unsigned',
	+ DLB "dynamic library dependency %imm32" @ "DLL configurations"
		@ "Code::Blocks project %YFramework_MinGW32",
	+ DLB "static library dependency %imm32" @ "non-DLL configurations"
		@ "Code::Blocks project %YSTest_MinGW32",
	/ %YReader $=
	(
		^ "%IsPrintf" ~ "%std::iswprint" @ %DSReader $dep_from
			%YFramework.YAdaptor.YTextBase,
		+ "function %FetchDefaultShellDirectory;
		/ "default argument" @ "class %ShlExplorer"
			-> 'FetchDefaultShellDirectory()'
			~ 'IO::FetchCurrentWorkingDirectory()'
			// For Android it is the data directory, since access the working \
				directory is possibly to be rejected. For other platforms it
				is unchanged.
		+ "debug trace" @ "constructor %ShlExplorer" @ %ShlExplorer;
	)
),

b511
(
	/ %YFramework $=
	(
		/ @ "platform %Win32" @ %Helper $=
		(
			/ "data member %RawMouseButton" @ "class %Environment"
				@ %Host >> ("class %Host::Window" @ %HostWindow),
			/ DLD "%WM_INPUT handling" @ "window procedure" >> ("constructor"
				@ "class %Host::Window" @ %HostWindow),
			/ @ "class %Host::Window" @ %HostWindow $=
			(
				+ DLD "private input state";
				+ "%WM_CHAR handling which save the Unicode character to \
					private state",
				+ "function template %AccessInputString"
			),
			/ "supported cross-thread text input" @ "platform %Win32"
				@ "member function %InputManager::DispatchInput" @ %InputManager
				$dep_from %YSLib.UI.YGUI
		),
		/ %YSLib.UI $=
		(
			/ @ %YGUI $=
			(
				+ "2 functions %CallInputEvent",
				/ @ "class %GUIState" $=
				(
					+ "data member %ExteralTextInputFocusPtr";
					/ "clear character input states"
						@ "functions %(Reset, CleanupReferences)",
					/ "function %SendInput" $=
					(
						+ "various overloaded functions",
						/ "alternated behavior when external text input focus \
							is set"
							// Call %TextInput event directly without calling \
								%UpdateChar. Note the old behavior is also \
								dropped. Call %CallInputEvent instead to get \
								the old behavior.
					),
					/ "directly return without performing any operation when \
						external text input focus is set"
						@ "function %UpdateChar"
				)
			),
			/ %TextBox $=
			(
				/ "set and clear text input focus with caret animation"
					@ "class %Caret" ^ "%GUIState::ExteralTextInputFocusPtr",
				/ @ "constructor %TextBox" $=
				(
					/ DLD "%SendInput call",
					/ "handled space character only when external text input \
						focus is not set",
					+ "invalidation after replacing text" @ "handler"
						@ "event %TextInput",
					/ "explicitly performed no-op for HT"
						// To avoid width problem of horizontal tab.
				)
			)
		)
	)
),

b510
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %UI $=
			(
				* "missing resetting view" @ "constructor" @ "listbox" $since
					b193 $dep_to "missing resetting listbox view",
					// This would cased abnormal state immediately after \
						initialization of an object of %ListBox or derived \
						types.
				(
				+ "member function %GUIState::SendInput" @ %YGUI;
				/ DLD "simplified constructor %TextBox"
					^ "%GUIState::SendInputChar"
				)
			),
			/ %Core $=
			(
				+ "constructor template %String with initializer list parameter"
					@ %YString,
				+ "unexpected exception logging" @ "!defined %NDEBUG"
					@ "member function %Application::OnGotMessage"
					@ %YApplication $dep_from %Adaptor
			),
			+ "using %platform::(Logger, FetchCommonLogger)"
				@ %Adaptor.YAdaptor
		),
		/ %Helper.ShellHelper
		(
			/ "debug trace" @ "class %DebugTimer"
				^ "%YTraceDe, %Debug" ~ "%std::fprintf";
				// Not display by default for %Debug priority.
			* "possible interleaved multithreaded timer output"
				@ "platform %MinGW32" $since b378
		),
		/ "class %Logger" @ "hosted platforms" @ %YCLib.Debug $=
		(
			* "missing explicitly %std::flush call at end"
				@ "function %DefaultSendLogger" $since b498
				// Though nothing to do with default %stderr stream, once the \
					buffer is set, it might go wrong.
			* "possible interleaved logging for exception" $since b498
		)
	),
	* $comp "invalid invisible or wrongly rendered vertical scrollbar state"
		@ %YReader.BookmarkUI $since b392 $"missing resetting listbox view" =
	(
		* "assertion failed after scrolling in empty list"
			@ "debug configurations" $=
		(
			* "scrolling by dragging",
			* "scrolling by event %CursorWheel" $since b443
		),
		* "wrong state after scrolling" @ "release configurations",
	),
	/ DLDI "simplified" ^ "braced-init-list"
		~ "explicit %ucs2string construction" $effective @ ("friend function \
		%to_string for %Path", "member function %Path::Parse"
		@ %YFramework.YSLib.Service.FileSystem $dep_from
		%YFramework.YSLib.Core.YString,
	/ DLD "all 'char()' which can be distinguished to actual type" -> '{}'
		$effective %(YCLib.Keys, NPL.Lexical)
),

b509
(
	/ $impl "macro %YB_NORETURN" @ %YBase.YDefinition ^ '[[noreturn]]'
		@ 'YB_IMPL_GNUCPP >= 40800',
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ DLD %YGDIBase $=
				(
					- "explicit 'yconstfn'" @ "explicitly defaulted default \
						constructor" @ "class %Rect",
					/ @ "class template %GBinaryGroup" $=
					(
						/ DLD "implemented functions %operator(-, +=, -=)"
							^ "macros %(PDefHOp, ImplRet)",
						/ DLD "implemented all 2 functions %GetRef"
							^ "macros %(PDefH, ImplRet)"
					)
				),
				/ DLD @ "class template %GEvent" @ %YEvent $=
				(
					/ "implemented all non-overloaded operator functions \
						with explicitly declared 'inline'"
						^ "macros %(PDefH, ImplRet)",
					/ "implemented all overloaded operator functions with \
						explicitly declared 'inline'"
						^ "macros %(PDefHOp, ImplRet)"
				)
			),
			* "wrong implementation" @ "all 2 member functions \
				%MIMEBiMapping::operator-=" @ Service.ContentType $since b450,
				// These member functions wrongly performed insertion instead \
					of deletion.
			/ %UI $=
			(
				/ $revert(b494) "functions %(SetLocationOf, SetSizeOf; $comp \
					SetBoundsOf) would trigger events even if the parameter \
					value is equal to the old value" @ %YWidget
				* $comp "missing listbox scrollbars sometimes" $since b494
					// For example, switching file list back to make scrollbar \
						be shown.
			)
		),
		* "no effect on offset argument"
			@ "member function %ScreenRegionBuffer::UpdateTo" @ %Android
			@ %'Helper_(Android)'.Android $since b499
			// All offset values were treated as 'Point()'.
		/ %Helper $=
		(
			* "spelling error" @ %Initialization $since b303
				$= (/ "%InitializeEnviornment" => "%InitializeEnvironment"),
			(
			+ "function %MapCursor" @ "class %Environment" @ %Host;
			/ DLDI "simplified member function
				%InputManager::Update" @ 'defined(YF_Hosted)' @ %InputManager
			)
		)
	),
	/ DLD "implementation as possible when no return type are deduced"
		^ "braced-init-list" ~ "%make_pair" $=
	(
		@ "function template %search_map" @ %YBase.YStandardEx.Container,
		/ %YFramework.YSLib $=
		(
			@ "member function %Palette::GetPair" @ %UI.YStyle,
			@ "function %AddMIMEItems" @ % Service.ContentType
		),
		@ "constructor %ShlExplorer" @ %YReader.ShlExplorer
	),
	/ DLD "implementation when appropriate" ^ "container emplacing"
		~ "insertion" $=
	(
		// Since G++ 4.8.2 has supported all of them.
		^"member function %map::emplace" ~ "%(make_pair, map::insert)"
			@ "member functions" $effective @ %YFramework,
		^ "member function %multimap::emplace"
			~ "%(make_pair, multimap::insert)" @ "member functions"
			$effective @ %YFramework.YSLib,
		^ "member function %vector::emplace_back"
			~ "%(make_pair, vector::push_back)" @ "functions" $effective
			@ %YFramework.YSLib,
		(
		$effective @ %YFramework.YSLib;
		^ "member function %set::emplace_hint" ~ "%set::insert"
			@ "member function %ValueNode::operator[]" @ %Core.ValueNode,
		^ "member function %map::emplace_hint" ~ "%map::insert"
			@ "function %GetEvent" @ %UI.YWidgetEvent
		)
	),
	/ DLD "simplified some %YSLib::Drawing::Size argument passing"
		^ "brace-init-list" ~ "explicit use of postfix-expression",
	+ 'android:theme="@android:style/Theme.NoTitleBar.Fullscreen"'
		@ "application configuration" @ "%AndroidManifest.xml"
),

b508
(
	/ %YFramework $=
	(
		/ %NPL $=
		(
			/ %NPLA1 $=
			(
				/ "overrode recursive %TransformNPLA1 call for children nodes"
					@ "function %TransformNPLA1",
					// Now the input of the mapper function is AST instead of \
						semantics tree. This allows the AST transformation \
						being overridden. Order of AST terms can be directly \
						reserved.
				+ "function %ParseNPLANodeString"
			),
			/ %Lexical $=
			(
				/ "function %MakeEscape" -> "function %Unescape" $=
				(
					/ DLDI "reserved space of %string object at first",
					* "missing unescaping quotes characters" $since b335,
					* "missing unescaping characters with prefix backslash"
						$since b335,
						// The result would be wrongly escaped when containing \
							unexpected escape sequences.
					/ "avoided adding trailing backslash when unescapable"
						// It is useful for literal only. See %UnescapeLiteral.
				),
				+ "function %UnescapeLiteral"
					// It would add backslash when necessary.
			),
			/ $revert(b343) "unescaped node name" @ "%operator<<"
				@ %Configuration
		),
		* "missing several '\n'" @ "tracing" @ %Helper.Initialization
			$since b506
	),
	/ %YReader $=
	(
		/ "avoided literal conversion for unescaping names" @ "member \
			functions %ShlReader::(LoadBookmarks, SaveBookmarks)" @ %ShlReader,
			// Now only escaped names would be stored by NPLA1 configuration, \
				so explicit unescaping in user code is usually redundant. \
				However, quotes would not be automatically added.
		* $comp "saved escaped file path for bookmark entry" @ %YReader.Bookmark
			$since b392 $dep_from ("function %Unescape"
			@ %YFramework.NPL.Lexical, %YFramework.NPL.Configuration)
			// Loading bookmark would fail when the path containing NPL \
				escapable sequence.
	)
),

b507
(
	/ %YBase.YStandardEx $=
	(
		(
		+ %BitSegment;
		/ "class template %bitseg_iterator" @ %Iterator >> %BitSegment
		),
		+ "meta operation templates %((sequence_split_n; sequence_split_n_t),
			(sequence_fold; vseq_fold))" @%Variadic,
		+ "meta operation specializations %sequence_split_n" @ %Tuple
			$dep_from (%ystdex::sequence_split_n @ %Variadic),
		+ "meta operation specializations %sequence_fold" @ %Tuple
			$dep_from (%ystdex::sequence_fold @ %Variadic),
		+ "binary functors %(plus, multiply)" @ %Functional
			// Only added associative built-in operations.
	),
	/ %YFramework $=
	(
		/ @ %YCLib.Video $=
		(
			/ @ "struct %XYZATrait" @ %YCLib.Video $=
			(
				- "static data member %(GAligned, RAligned)",
				(
				/ "alias-declaration %IntegerType" ^ "%BitsN" ~ "%UIntBitsN",
				- "static data member %Width";
				- "static data member %UIntBitsN"
				)
			),
			(
			+ "class templates %XYZAMaskTrait;
			/ @ "class templates %(BGRA, RGBA)" $=
			(
				+ "alias-declaration %MaskTrait"
				/ "colors mask values" ^ "%MaskTrait" ~ "%Trait";
			);
			- "data members %(AMask, XMask, YMask, ZMask)"
				@ "class template %XYZATrait"
			),
			+ "class templates %(AXYZMaskTrait; ARGB)",
			* "pixel RGB component wrongly reversed" @ "platform %Android"
				@ %Video $since b492
			(
				/ "macro definition %YCL_PIXEL_FORMAT_XYZ888 with value"
					-> '0xAABBCCDD' ~ '0xAADDCCBB',
				/ "alias-declaration %PixelType" -> "%RGBA<8, 8, 8, 8>"
					~ "%BGRA<8, 8, 8, 8>",
				/ "implementation of functions %FetchOpaque"
			)
		)
	)
),

b506
(
	/ %YFramework $=
	(
		/ %Helper $=
		(
			/ %Initialization $=
			(
				/ @ "function %LoadNPLA1File" $=
				(
					+ "debug trace after configuration creation",
					+ "error description" @ "exception thrown when failed \
						writing file"
				),
				+ "trace" @ "function %ReadConfiguration",
				+ "default configuration" @ "platform %Android",
				/ "working root path located at runtime",
				/ @ "function %HandleFatalError" $=
				(
					/ "log level" -> 'Emergent' ~ 'Notice',
					- "separator lines" @ "error message" @ "platforms !%DS"
				),
				+ "trace for character mapping file path"
					@ "function %LoadComponents"
			),
			+ "support for platform %Android" @ "constructor %DSApplication"
				@ %DSMain
		),
		/ %YSLib $=
		(
			* "missing null pointer check" @ "encoding detection"
				@ "class %TextFile" @ %TextFile $since b290,
			+ "32-bit ABGR pixel conversion support" @ "class %HBitmap"
				@ %Adaptor.Image
		)
		+ "function %Android::FetchDefaultWindow"
			@ %'Helper_(Android)'.AndroidHost
	)
),

b505
(
	/ %YFramework $=
	(
		* "wrong condition for defining macro %YAssert" @ %YCLib.Debug $since b499
			$= ('ifdef YAssert' -> 'ifdef YB_Use_YAssert'),
			// This caused unintended assertions for release configurations.
		/ %Helper $=
		(
			+ "debug trace" @ "constructor %Environment" ^ 'YCL_Trace' @ %Host,
			+ "debug trace" @ "function %Devices::InitDSScreen" ^ 'YTraceDe'
				@ %DSScreen,
			/ @ %Initialization $=
			(
				/ "trace output" @ ^ "%YTraceDe"
					~ "directly use of standard function"
					// For platform %Android the level is "%Notice" in normal \
						cases and "%Err" in catch blocks. For other platforms, \
						the level is ignored and there should be no behavior \
						changed.
				+ "trace output" @ "function %Uninitialize",
				+ "debug trace output" @ "functions %(LoadNPLA1File, \
					WriteConfiguration)" ^ "%YTraceDe"
			)
		),
		/ %Service $=
		(
			/ @ "class %File" @ %File $=
			(
				* "missing clean file pointer" @ "function %Close" $since
					$before b132,
				+ "trace" @ "functions %(Open, Close), destructor" ^ "%YTraceDe"
			),
			* "missing check file pointer before writing BOM"
				@ "constructor %TextFile" @ %TextFile $since b341
				// Assertion failure.
		)
	)
	/ "assertion string" @ "%YAssertNonnull" -> "Null reference found."
		~ "Null pointer found." @ %YBase.YStandardEx.CAssert,
	/ "all nonnull handle, shell handle, array pointer, buffer pointer, text \
		buffer pointer or updater assertions" ^ "%YAssertNonnull" ~ "YAssert",
	/ %YReader.Main $=
	(
		(
		- "explicit 'return 0;'" @ "main function";
			// So both function 'int main()' with implicit 'return 0;' and \
				entry point function with void return type can be simply \
				coexisted without modifying return-statement. Note that now \
				the program is still not fully supported so it would crash \
				intentionally.
		/ $dev "merged entry point function %::y_android_main with function \
			%::main" ^ "conditional inclusion"
		),
		+ "debug trace" @ "main function" ^ 'YTraceDe'
	),
	* DLB "missing dependency for target %OUTPUTSO on .a files" @ "makefile"
		@ "platform %Android" $since b497
),

b504
(
	/ %YFramework $=
	(
		/ "simplified semantics tree mapping" @ %NPL.NPLA1 $=
		(
			/ $lib "accepted null mapper" @ "function %TransformNPLA1";
				// No-op.
			/ "default mapper argument" -> '{}' ~ 'MapNPLA1Node' @ "functions \
				%(TransformNPLA1, LoadNPLA1), function template %LoadNPLA1";
				// Default behavior changed. Now no children are dropped on \
					default.
			- "function %MapNPLA1Node"
		),
		/ %'Helper_(Android)' $=
		(
			/ %AndroidHost $=
			(
				/ "window creating now on native window resizing"
					~ "on native window creating",
				* "invalid native window access on termination" $since b502
					$= (+ "waiting for screen object release"
					@ "native window destroying"),
				* "hard-coded screen size initialized" @ "class %NativeHost"
					@ %AndroidHost $since b502 $dep_from
					"class %Devices::AndroidScreen"
			),
			/ %AndroidScreen $=
			(
				+ "constructor 'AndroidScreen(::ANativeWindow&);'"
					@ "class %Devices::AndroidScreen"
				- "function %Android::FetchScreenSize
			)
		)
	),
	/ "logging" ^ 'YTraceDe' @ "functions %(LoadBookmarks, \
		LoadGlobalConfiguration, SaveBookmarks, SaveGlobalConfiguration)"
		@ "class %ShlReader" @ %YReader $dep_from %YFramework.NPL.NPLA1
),

b503
(
	/ %Main_ARM9 => %Main,
	/ %YFramework $=
	(
		/ %Helper_(DS) $=
		(
			* DLD "missing parameter" @ "submodule names" $since b431,
			+ DLD '\ingroup DS' @ "private submodlues"
		),
		+ "2 function %SetChildren" @ "class %ValueNode"
			@ %YSLib.Core.ValueNode,
		* "implemented function %WriteConfiguration" @ %Helper.Initialization
			$since b502 $dep_to "saving empty configuration",
		/ %Helper_(Android) $=
		(
			/ %AndroidScreen $=
			(
				/ @ "constructor %AndroidScreen" $=
				(
					* "hard-coded screen buffer size" @ $since b502,
					+ "debug trace for size",
					- "hard-coded default argument"
					// It is worse that the default argument of the window \
						size was not the same as the previously hard-coded \
						screen buffer size. The width and height were \
						occasionally swapped.
				),
				+ "function %FetchScreenSize"
					// Not implemented by returning still hard-coded value \
						'{480, 800}'.
			),
			/ @ "class %NativeHost" @ %AndroidHost $=
			(
				+ "function %GetActivityRef",
				/ DLD "member initializer" @ "%p_desktop"
					-> ("initialization" @ "constructor")
					// To avoid invalid use of incomplete type.
			)
		)
	),
	/ %YReader.ShlReader $=
	(
		/ @ "class %ShlReader" $=
		(
			/ "simplified implementation" @ "function %SaveBookmarks",
			* "wrongly cleared all content on saving"
				@ "static function %SaveGlobalConfiguration" $since b502;
		),
		* $comp "saving empty configuration exiting reader shell"
			$dep_from ("saving empty configuration",
			"%ShlReader::SaveGlobalConfiguration")
	),
	/ %YBase.YStandardEx $=
	(
		* "missing workaround for Microsoft VC++ 2013" @ "move constructor"
			@ "class template %transformed_iterator" @ %Iterator $since b415,
		/ @ "workaround for Microsoft VC++ 2013" %Utilities $=
		(
			- DLD "redundant ';' after move constructor definition",
			* "missing defaulted default and copy constructors" $since b483
		),
		/ @ "explicit speclization" @ "class template %sequence_project" $=
		(
			/ DLDI ^ "alias-declaration",
				// It might improve some performance.
			* $revert_ex(b477) "missing workaround for Microsoft VC++ 2013"
				$since b477
		),
		/ %Any $=
		(
			+ "binary type traits %is_aligned_storable",
			/ @ "class template %value_handler" $=
			(
				/ DLD "implemented function %get_pointer"
					^ "template specialization" ~ "conditional expression"
					$dep_to "eliminated storage access overrun evaluation",
				/ $dev "simplified default template argument"
					@ "class template %value_handler" ^ "%is_aligned_storable"
					$dep_from "%is_aligned_storable"
			),
			/ @ "class template %pod_storage" @ %Any $=
			(
				* "cv-qualifier not removed for access"
					@ "copy constructor, %operator=" $since b352
					$= (/ $impl ^ "%decay_t"
						~ "%remove_reference_t"),
				+ DLD 'inline' @ "all user-defined function templates",
				(
				+ "function template %assign";
				/ "implemented function template %operator=" ^ "%assign";
				* $comp "workaround of Microsoft VC++ 2013 warning C4717"
				),
				+ $dev "static assertion for size and alignment constraints"
					@ "2 function templates %access" $dep_from
					"eliminated storage access overrun evaluation";
					// Otherwise static assertion would fail.
				+ "explicitly defaulted (copy constructor, copy %operator=)"
			)
		)
	)
),

b502
(
	/ %YFramework $=
	(
		/ %YSLib $=
		(
			/ %Core $=
			(
				/ %ValueNode $=
				(
					/ @ "class %ValueNode" $=
					(
						/ "inline function %GetContainer"
							-> "non-inline function %GetContainerRef",
						(
						+ "children container data member";
						/ DLD "constructor implementation for children node",
						/ DLD "children node access implementation"
							@ "functions %(at, begin, end)",
						/ DLDI @ "operator(bool, !)",
							// For backward compatibility, only treated as \
								empty node when both value and container are \
								empty.
						/ "copy constructor implementation" ^ "non-inline \
							function" ~ "explicitly defaulted function",
						/ "2 operator=" -> "unifying operator=",
						+ "constructor 'ValueNode(unique_ptr<Container>)'",
						+ "constructor 'ValueNode(Container)'",
						+ "2 constructor templates specifying all data members \
							being initialized"
						) $dep_to "split value node children container",
						/ DLDI @ "function template %PackNodes"
							$dep_from "split value node children container"
					)
				),
				+ "function templates %(CheckScalar; CheckNonnegativeScalar,
					CheckPositiveScalar)" @ %YSLib.Core.YCoreUtilities
			),
			/ %UI $=
			(
				/ DLDI @ "member function \
					%WidgetLoader::TransformUILayout" @ %Loader
					$dep_from "split value node children container",
				* DD "wrong Doxygen command '\build'" ~ '\brief'
					@ "class %InvalidationUpdater" @ %Animation $=
				(
					* @ "data member %Invalidate" $since b457,
					* @ "static function %DefaultInvalidate" $since b462,
					* @ "data member %Invalidate" $since b482
				),
				* DD "wrong Doxygen command '\build'" ~ '\since'
					@ "data member %TextBox::CaretBrush" @ %TextBox $since b484
			)
		),
		/ DLDI @ "function %TransformNPLA1" @ %NPLA1
			$dep_from "split value node children container",
		/ %'YCLib_(Android)'.Android $=
		(
			* "missing tracking cursor position for motion event"
				@ "function %SaveInput" @ "platform %Android" $since b501,
			+ "class %platform_ex::InputQueue"
			- "entry function definition ::ANativeActivity_onCreate"
				>> %'Helper_(Android)'.AndroidHost
		),
		/ %Helper $=
		(
			/ @ "platform %Android" @ %InputManager $=
			(
				/ "implemented cursor position forwarding"
					@ "member function %InputManager::Update",
				/ "implemented default widget pointer returning"
					@ "member function %InputManager::Update"
					$dep_from "Android host declarations",
					// So %GUIShell is now are usable.
				/ DLDI "simplified" ^ "%CheckPositiveScalar"
					$dep_from %YSLib.Core.CoreUtilities
			),
			/ %Host $=
			(
				/ "class %Host" @ "namespace %YSLib::Host"
					>> "namespace %YSLib",
				* "missing 'YF_API'" @ "class %Environment" @ %Host
					$since b431;
				/ @ "platform %Android" $dep_to "Android host declarations" $=
				(
					+ "class name declaration %AndroidScreen"
						@ "namespace %Devices",
					+ "class name declaration %NativeHost"
						@ "namespace %Android"
				)
			),
			+ "macro %YFM_Android_Helper_AndroidHost" @ %YModules
		),
		+ %'Helper_(Android)' $=
		(
			+ "screen implementation unit",
			+ %AndroidHost $=
			(
				+ "struct ConfigurationDeleter; class %NativeHost";
				+ "native host implementation",
				+ "functions %(FetchNativeHost, FetchDefaultDesktop)"
			)
		),
	),
	+ "entry point function definition %::y_android_main" @ "platform %Android"
		@ %Main_ARM9
		// Still not fully supported.
),

b501
(
	/ DD "Doxygen comments" @ %YFramework $=
	(
		* "wrong directive '\def' used" ~ '\brief'
			@ "macro %YCL_KEYSTATE_DIRECT" @ %YCLib.Input $since b321,
		* "wrong directive '\param' used" ~ '\note' @ "function \
			%FetchNativeLooper" @ %'YCLib_(Android)'.Android $since b499,
		* "wrong directive '\param' used" ~ '\note'
			@ "member function %TextBox::GetCaretPosition"
			@ %YSLib.UI.TextBox $since b484
	),
	* "crash on setting saving" @ %YReader.ReaderSettingUI $since b500 $=
		(* $dev "wrong widget path accessed" $since b500),
		// This might corrupt the configuration file, which cause big trouble \
			on DS.
	/ %YFramework $=
	(
		/ %NPL.NPLA1 $=
		(
			+ 'using NodeMapper = ValueNode(const ValueNode&);';
			+ "function %MapNPLA1Node;
			+ "parameter with default argument 'std::function<NodeMapper> \
				= MapNPLA1Node' @ %(TransformNPLA1Node, LoadNPLA1), function \
				template %LoadNPLA1)"
		)
		/ %YSLib.Core.ValueNode $=
		(
			/ @ "class %ValueNode" $=
			(
				+ "function %swap",
				/ $dev "member %Vaule" ^ "member initializer '{}'",
				/ DLD "functions operator%=" -> "non-inline functions"
			),
			+ "function %swap for %ValueNode" $dep_from
				"member function %ValueNode:swap",
			/ $impl "inline functions %(AccessNode, AccessNodePtr)"
				^ "macros %(PDefH, ImplRet)"
		),
		/ "implemented key tapping up and down for motion events"
			@ "platform %Android" @ %YCLib.Input
	),
	+ $dev $repo "tags ('PreAlpha', 'V0.5') to revision 372",
	/ "all 'return nullptr'" -> 'return {}'
),

b500
(
	/ %YFramework,
	(
		/ %YSLib.UI $=
		(
			* "missing clip area intersection for arrow rendering"
				@ "member function" ("%DropDownList::Refresh" @ %ComboList,
				"%Menu::DrawItem" @ %Menu) $since b452;
				// An obvious example is in the reader setting UI @ YReader, \
					moving over or dragging the scroll time setting drop down \
					list, the arrow of behind drop down button would be \
					wrongly rendered visible, rather than hiding hehind.
			(
			/ "implemented arrow rendering" ^ "function %Drawing::DrawArrow"
				~ "function %UI::DrawArrow" @ "member function \
				%AScrollBar::InitializeArrowPainters" @ %Scroll;
			* $comp "wrong arrow might be rendered" $since b452,
				// Ditto.
			- "function %UI::DrawArrow" @ %YWidget
			),
			/ DLDI "simplified function %RectDrawArrow" @ %YStyle
		),
		/ "default configuration" @ "platform %Win32" @ %Helper.Initialization
			$=
		(
			/ "default root directory macro %ROOTW" -> "." ~ "H:\\NDS\\EFSRoot",
			/ "default font path macro %DEF_FONT_PATH"
				-> "C:\\Windows\\Fonts\\SimSun.ttc"
				~ 'ROOTW "\\Font\\FZYTK.TTF"',
			/ "default font directory macro %DEF_FONT_DIRECTORY"
				-> 'ROOTW "\\Font\\"' ~ 'ROOTW "\\"',
			/ "default data directory macro %DEF_DATA_DIRECTORY"
				-> 'ROOTW "\\Data\\"' ~ 'ROOTW "\\"'
		)
	),
	/ %YReader $=
	(
		/ %ShlExplorer $=
		(
			/ "test widget location"
			/ @ "class %ShlExplorer" $=
			(
				+ "default text" @ "test label",
				/ "avoided potentional leak for %unique_ptr setting"
					^ "%make_unique"~ "member function %unique_ptr::reset"
					@ "%yunseq segments",
				/ @ "animation test" $=
				(
					* "animated wrongly by irrevalent invalidation" $since b451,
					/ "refined test animation in test tab page"
						~ "in setting panel"
				)
			)
		),
		+ "function %AddButtonTabBar" @ %Shells,
		+ "rearranged setting UI in 3 tab pages" @ %ReaderSettingUI
	),
	/ $doc "updated Doxygen file" $=
	(
		^ "Doxygen 1.8.7" ~ "Doxygen 1.8.2",
		/ 'YFramework/include/freetype YFramework/include/ft2build.h'
			@ "%EXCLUDE" -> '.git Data Tools',
		/ "set %SHORT_NAMES" -> 'YES' ~ 'NO'
			// Workaround of error: 'could not open file for writing' with a \
				name containing a tab.
	)
);

////

