blob: f33149ea94d7e7fbfc945763cc079ece5068582e [file] [log] [blame]
// https://issues.dlang.org/show_bug.cgi?id=17955
/*
TEST_OUTPUT:
---
fail_compilation/fail17955.d(81): Error: cannot create instance of abstract class `SimpleTimeZone`
fail_compilation/fail17955.d(81): function `bool hasDST()` is not implemented
fail_compilation/fail17955.d(93): Error: template instance `fail17955.SimpleTimeZone.fromISOExtString!dstring` error instantiating
fail_compilation/fail17955.d(25): instantiated from here: `fromISOExtString!string`
fail_compilation/fail17955.d(56): instantiated from here: `isISOExtStringSerializable!(SysTime)`
fail_compilation/fail17955.d(49): instantiated from here: `toRedis!(SysTime)`
fail_compilation/fail17955.d(40): ... (2 instantiations, -v to show) ...
fail_compilation/fail17955.d(32): instantiated from here: `indicesOf!(isRedisType, resetCodeExpireTime)`
fail_compilation/fail17955.d(67): instantiated from here: `RedisStripped!(User, true)`
fail_compilation/fail17955.d(93): Error: need `this` for `fromISOExtString` of type `pure nothrow @nogc @safe immutable(SimpleTimeZone)(dstring _param_0)`
fail_compilation/fail17955.d(95): Error: undefined identifier `DateTimeException`
fail_compilation/fail17955.d(25): Error: variable `fail17955.isISOExtStringSerializable!(SysTime).isISOExtStringSerializable` type `void` is inferred from initializer `fromISOExtString("")`, and variables cannot be of type `void`
fail_compilation/fail17955.d(54): Error: function `fail17955.toRedis!(SysTime).toRedis` has no `return` statement, but is expected to return a value of type `string`
---
*/
alias Alias(alias a) = a;
template isISOExtStringSerializable(T)
{
enum isISOExtStringSerializable = T.fromISOExtString("");
}
template RedisObjectCollection(){}
struct RedisStripped(T, bool strip_id = true)
{
alias unstrippedMemberIndices = indicesOf!(Select!(strip_id,
isRedisTypeAndNotID, isRedisType), T.tupleof);
}
template indicesOf(alias PRED, T...)
{
template impl(size_t i)
{
static if (PRED!T)
impl TypeTuple;
}
alias indicesOf = impl!0;
}
template isRedisType(alias F)
{
enum isRedisType = toRedis!(typeof(F));
}
template isRedisTypeAndNotID(){}
string toRedis(T)()
{
static if (isISOExtStringSerializable!T)
return;
}
struct User
{
SysTime resetCodeExpireTime;
}
class RedisUserManController
{
RedisObjectCollection!(RedisStripped!User) m_users;
}
class TimeZone
{
abstract bool hasDST();
}
class SimpleTimeZone : TimeZone
{
unittest {}
immutable(SimpleTimeZone) fromISOExtString(S)(S)
{
new SimpleTimeZone;
}
}
struct SysTime
{
static fromISOExtString(S)(S)
{
dstring zoneStr;
try
SimpleTimeZone.fromISOExtString(zoneStr);
catch (DateTimeException e) {}
}
}
template Select(bool condition, T...)
{
alias Select = Alias!(T[condition]);
}