Thread overview
Strange exception, with EXTREMELY SIMPLE toString() in a struct
Dec 07, 2015
Enjoys Math
Dec 07, 2015
Marc Schütz
Dec 07, 2015
Radu
Dec 07, 2015
rumbu
December 07, 2015
Exception Message:
First-chance exception: std.format.FormatException Unterminated format specifier: "%" at C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(828)

[CODE]
module set;
import std.conv;

struct Set(T) {
	string toString() const {
		auto str = "{";
		return str;
	}
}

unittest {
	import std.stdio;
	auto A = Set!int();
	writeln(A);
}
[/CODE]
December 07, 2015
On Monday, 7 December 2015 at 08:17:27 UTC, Enjoys Math wrote:
> Exception Message:
> First-chance exception: std.format.FormatException Unterminated format specifier: "%" at C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(828)
>
> [CODE]
> module set;
> import std.conv;
>
> struct Set(T) {
> 	string toString() const {
> 		auto str = "{";
> 		return str;
> 	}
> }
>
> unittest {
> 	import std.stdio;
> 	auto A = Set!int();
> 	writeln(A);
> }
> [/CODE]

Works fine for me (Linux x86_64, DMD 2.069). Which version are you using exactly? Also, are you sure you're not accidentally running an outdated executable, or your executable doesn't actually match the code you posted? It doesn't invoke format at all.
December 07, 2015
On Monday, 7 December 2015 at 08:17:27 UTC, Enjoys Math wrote:
> Exception Message:
> First-chance exception: std.format.FormatException Unterminated format specifier: "%" at C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(828)
>
> [CODE]
> module set;
> import std.conv;
>
> struct Set(T) {
> 	string toString() const {
> 		auto str = "{";
> 		return str;
> 	}
> }
>
> unittest {
> 	import std.stdio;
> 	auto A = Set!int();
> 	writeln(A);
> }
> [/CODE]

Are you running this in VisualD plugin? This is the only place I get that exception. Running it from the command line works as expected on 2.069.1 win32
December 07, 2015
On Monday, 7 December 2015 at 08:17:27 UTC, Enjoys Math wrote:
> Exception Message:
> First-chance exception: std.format.FormatException Unterminated format specifier: "%" at C:\D\dmd2\windows\bin\..\..\src\phobos\std\format.d(828)
>
> [CODE]
> module set;
> import std.conv;
>
> struct Set(T) {
> 	string toString() const {
> 		auto str = "{";
> 		return str;
> 	}
> }
>
> unittest {
> 	import std.stdio;
> 	auto A = Set!int();
> 	writeln(A);
> }
> [/CODE]

This is caused in fact by a correct unittest assertion in format.d:

f = FormatSpec("a%%b%%c%");
w.clear();
assertThrown!FormatException(f.writeUpToNextSpec(w)); <-- here
assert(w.data == "a%b%c" && f.trailing == "%");

You can add std.Format.FormatException to the Exception Settings (Debug -> Exceptions) and  untick the Thrown checkbox.