On Friday, 23 October 2015 at 15:07:05 UTC, Alex Parrill wrote:
Use template mixins: http://dlang.org/template-mixin.html
On Friday, 23 October 2015 at 15:08:30 UTC, Adam D. Ruppe wrote:
Use a mixin template together with your interface.
Awesome, thanks!
No way, though, to unite
On Thursday, 22 October 2015 at 18:28:50 UTC, Ali Çehreli wrote:
If you already have a piece of memory, it is trivial to convert
it to a slice in D:
auto slice = existing_pointer[0 .. number_of_elements];
http://ddili.org/ders/d.en/pointers.html#ix_pointers.slice%20from%20pointer
The
Answered my own question: Turns out File.getFP() does exactly
what I needed
I'd like to use fread and fwrite in place of File.rawRead and
File.rawWrite which force the creation of an array where I'd
rather specify a buffer location and length. I'd like to do this
using a File object but the handle for the C stream is a private
member and I can't find any way to access
On Thursday, 22 October 2015 at 13:58:56 UTC, Adam D. Ruppe wrote:
D's templates are easy (you actually used one in there, the
Generator is one!)
Try this:
import std.concurrency;
Generator!T sequence(T)(T i){
return new Generator!T({
yield(i);
while(i > 1){
On Wednesday, 28 October 2015 at 11:40:14 UTC, tcak wrote:
The "writebuffer" is defined to take an array as parameter.
Yet, you are passing a pointer and a length to it. Instead,
pass the parameter "str" to it directly. Also, you do not have
to put "!char" to there. Compiler will solve it out
On Wednesday, 28 October 2015 at 12:06:14 UTC, Kagamin wrote:
On Wednesday, 28 October 2015 at 11:48:27 UTC, pineapple wrote:
There's also a writebuffer method in the interface with this
signature, though:
streamint writebuffer(T)(in T* buffer, in streamint count);
Interface can't have
When I attempt to compile my code I get the same linker error
with both dmd and ldc2. I know where the problematic code is, as
I don't get the error when I comment out lines 102 through 107,
but I don't understand why it's bad. I must have some
misconceptions about how templates work? Is there
Is it possible to have default method implementations in
interfaces à la Java in D? Or some equivalent that allows
multiple inheritance without a bunch of identical copypasted
method bodies?
I'm just starting to hammer D's very pleasant syntax into my
head. After "Hello world", the first thing I do when learning any
language is to write a simple program which generates and outputs
the Collatz sequence for an arbitrary number. (I also like to
golf it.) This is what I wrote in D:
On Thursday, 22 October 2015 at 14:36:52 UTC, John Colvin wrote:
Using ranges instead of threads or fibers, slightly
over-engineered to show off features:
What does if(isIntegral!T) do? It looks like it would verify that
the template type is a discrete number? If I were to create my
own
On Saturday, 4 June 2016 at 15:43:01 UTC, Mihail K wrote:
As far as I recall, foreach_reverse is deprecated in favour of
range operations.
ie.
import std.algorithm, std.range;
static if(forward)
{
items.each!(item => doStuff());
}
else
{
items.retro.each!(item =>
It would be fantastic if I could write this -
static if(forward){
foreach(item; items) dostuff();
}else{
foreach_reverse(item; items) dostuff();
}
as something like this -
foreach!forward(item; items) dostuff();
Is there any way to accomplish this?
On Tuesday, 14 June 2016 at 07:35:36 UTC, Andrea Fontana wrote:
Simply:
method2();
Also, typeof(this).method2();
On Monday, 13 June 2016 at 22:54:13 UTC, Ali Çehreli wrote:
Tree!T tree(TL, T, TR)(TL left, T node, TR right) {
return new Tree!T(left, node, right);
}
There's also this:
Tree!T tree(TL, T, TR)(TL left, T node, TR right) if(
(is(TL == Tree!T) || is(TL == typeof(null))) &&
On Saturday, 28 May 2016 at 16:25:02 UTC, Seb wrote:
If you are interested how it works under the hood - it's pretty
simple & elegant:
I checked up on the phobos implementation and found that arrays
are mutated when iterated over as ranges, which didn't rest well
with me. Nor did the idea of
I found another post on this subject and the advice there was
"don't put const members in your structs" -
http://forum.dlang.org/thread/m87ln2$idv$1...@digitalmars.com
This doesn't work out so well when the templated struct is
referring to what happens to be a const array.
I thought I could
On Sunday, 29 May 2016 at 18:52:36 UTC, pineapple wrote:
What's the best way to handle something like this?
Well I did get something to work but it's ugly and I refuse to
believe there isn't a better way to handle this.
Where `Range` is an alias to a struct with an immutable member,
and
Here's one more vote for extending UFCS to operator overloading.
Elie wrote that it's "a restriction that seems pointless and
arbitrary"... which summarizes my own thoughts rather well, too.
There are certainly concerning scenarios that can arise from
making this change, but the correct way
On Monday, 30 May 2016 at 16:22:26 UTC, Max Samukha wrote:
From the spec (https://dlang.org/spec/function.html#nested):
"Nested functions cannot be overloaded."
Anybody knows what's the rationale?
I'm guessing it's related to -
Unlike module level declarations, declarations within function
I'd like to find the overload of some function with the most
parameters and (in this specific case) to get their identifiers
using e.g. ParameterIdentifierTuple. There have also been cases
where I'd have liked to iterate over the result of
Parameters!func for each overload of that function.
On Tuesday, 31 May 2016 at 20:46:37 UTC, Basile B. wrote:
Yes this can be done, you must use the getOverload trait:
https://dlang.org/spec/traits.html#getOverloads
The result of this trait is the function itself so it's not
hard to use, e.g the result can be passed directly to
'Parameters',
I'm writing my own map function modeled after the one in phobos.
(because I feel like it, that's why. good learning experience.)
I've encountered one remarkable difference: The phobos function
accepts arrays and mine does not. I understand why - I'm calling
methods that arrays don't have - but
How this could possibly be happening is confounding me and I have
no idea if it's something I missed or some contrived compiler bug.
This is the package.d that previously I've compiled with unittest
every so often as a way of doing regression testing -
On Sunday, 29 May 2016 at 19:52:37 UTC, Basile B. wrote:
Do yo have a simple, concise runnable example to show ?
This is the example I was using to test solutions, it's similar
to where I encountered the problem in the first place
import core.stdc.stdlib : malloc, free;
import
Here's a simple code example to illustrate what I expected to
work and didn't - is this a mistake in my syntax or a limitation
of the language?
template SomeTemplate(alias func){
auto templatefunc(T)(int x){
return func!T(x);
}
}
// Valid
auto
There are suffixes for numbers like 0L, 0u, 0f, 0d, etc. What
about suffixes representing size_t and ptrdiff_t? Do they exist?
If not, why?
Oh pardon the constructor I was playing with as a learning
experience and forgot to get rid of.
It feels like there should be an out-of-the box way to do this
but I haven't been able to find it? Help?
This is the thing that I want to do:
struct example{
const string str;
//this(string str){ this.str = str; }
string toString(){
return this.str;
}
}
public void
On Thursday, 11 February 2016 at 12:53:20 UTC, Edwin van Leeuwen
wrote:
I'd do it like this:
import std.algorithm : map;
pars.map!((part) => part.toString) // Turn them to strings
.join(" ").writeln; // Join them.
Thanks! Does the map function iterate without constructing an
extra list
With this bit of code, the first method seems to work fine -
things go as expected. But I get a compile error with the second
method, and I'm not sure how else to write this.
override bool opEquals(Object value) const{
return this.equals(cast(typeof(this)) value);
}
It also occurred to me to do something like this, but it isn't
accepted either.
override bool opEquals(T)(T value){
return this.equals(value);
}
I have a super simple D file that looks like this:
unittest{
import std.stdio;
writeln("hello");
}
On OSX Mavericks I run "rdmd --main -unittest test.d" and I get a
nice "hello" and everything is well.
On Win7 64-bit I run "> rdmd --main -unittest test.d" and rdmd
seems to hang. It
On Friday, 29 January 2016 at 15:13:45 UTC, Mike Parker wrote:
The first implementation is fine because you're overriding the
implementation in the base class (Object). However, the second
one fails because it's a template. Templates are non-virtual
and cannot override anything. Even if you
I experimented with using the character 'ħ' in a variable name,
and wasn't terribly surprised when the compiler didn't like it.
What did surprise me is that I still got a compile error even
when the character was in a comment. Is there any way to make dmd
not get fussy about unicode?
On Thursday, 28 January 2016 at 13:18:55 UTC, pineapple wrote:
I experimented with using the character 'ħ' in a variable name,
and wasn't terribly surprised when the compiler didn't like it.
What did surprise me is that I still got a compile error even
when the character was in a comment. Is
I'm getting several of these since I'm trying to do the same
thing in a few places. Here's a complete error:
path\to\file.d(55): Error: variable
units.unitvalue.opmethod!("sum(in unitvalue value)",
"add(value)").methodtemplate cannot use template to add field to
aggregate 'unitvalue'
Thanks so much for the help! I'm still getting used to D's
compile-time code.
Here's a simple programming showing where I'm tripping up -
void test(T)(in T value){
import std.traits;
static if(is(T == char)){
writeln("char");
}else static if(is(isNumeric!(T))){
writeln("number");
}
writeln("hi");
}
public void main(){
test('g');
On Wednesday, 27 January 2016 at 00:17:18 UTC, Ali Çehreli wrote:
Remove the extra is: :)
Huh, I swear I tried that. Thanks!
I'd like to make a constructor which takes a variable list of
arguments, of a short list of possible types, with different
handling depending on the type. I haven't been able to find any
documentation or examples that did quite what I'm trying to. Help?
A fun pseudocode example of what I'm
On Wednesday, 20 January 2016 at 12:56:51 UTC, Ali Çehreli wrote:
And there is another example here:
http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.tuple%20template%20parameter
Ali
Thank you!
What's the purpose of "is" in the type checks?
Also, how would I utilize
On Tuesday, 5 April 2016 at 13:17:38 UTC, Anonymouse wrote:
You can't get rid of the signature completely as the functions
still need a parameter list with x declared. You will get
"Error: undefined identifier 'x'" otherwise. You can largely
omit the *type* of x if it can be inferred from the
On Tuesday, 5 April 2016 at 18:54:39 UTC, stunaep wrote:
I had no error on the examples I posted, only when using
@Override previously. It just says to use override attribute
instead of @Override
Unlike in Java, D's override indicator doesn't look like an
annotation, it's just a keyword
I'm mainly coming from languages that haven't got structs, let
alone the kind of differentiation D offers between
mutable/immutable/const/etc variables, so I'm still trying to
work out just when to use each - What's different between these
two examples, practically speaking? When would you use
On Sunday, 10 April 2016 at 00:48:23 UTC, pineapple wrote:
How can I fix this, and get something human-readable?
Oh, answered my own question. Appending the -g flag to dmd
options makes the stack trace much prettier.
I'm getting a RangeError and the stack trace is being
spectacularly unhelpful in debugging the problem, because it
looks like this:
core.exception.RangeError@E:\Dropbox\Projects\d\lib\wip_ansi_2.d(78): Range
violation
0x0040A240
0x00402E37
0x00402B5E
0x00402985
0x00402F29
Is there any way in D to define static methods or members within
an enum's scope, as one might do in Java? It can sometimes help
with code organization. For example, this is something that
coming from Java I'd have expected to be valid but isn't:
enum SomeEnum{
NORTH, SOUTH, EAST, WEST;
If I have a common function signature I'm using throughout my
code, and I feel like there should be a way to condense it using
a macro. The intuitive method isn't working, but this seems like
something D would be able to do. What've I got wrong in this
example?
alias somelongsignature =
Ah, aside from the mismatched "examplefunc" numbers - please
disregard
Can't post example code without stupid typos for the life of me
On Thursday, 14 April 2016 at 10:50:00 UTC, ag0aep6g wrote:
Invoked like that, dmd doesn't run the program at all. It just
makes an .exe file of it. To run the program simply type its
name into the command prompt. So if your source file is foo.d,
`dmd foo.d -main -unittest` creates foo.exe,
I wrote a pair of methods that looked like this:
void clean(in void delegate(in T value) func){
this.clean((in T values[]) => {
foreach(value; values) func(value);
});
}
void clean(in void delegate(in T values[]) func){
...
}
I was getting a
On Tuesday, 10 May 2016 at 09:57:11 UTC, pineapple wrote:
On Monday, 9 May 2016 at 18:56:15 UTC, Peter Häggman wrote:
No problem here (tested with everything in a single module). I
can't help more.
Front end version ?
Well, this is the full struct that has those malfeasant
overrides:
I'm working on an SDL wrapper based on the derelict sdl2 and
opengl3 bindings and so I've got a method like this I wrote:
@property Vector2!int minsize(){
int x, y;
SDL_GetWindowMinimumSize(this.window, , );
return Vector2!int(x, y);
}
I've got several almost identical methods for
On Sunday, 1 May 2016 at 13:46:14 UTC, ag0aep6g wrote:
On 01.05.2016 15:32, pineapple wrote:
static string vectorpropertymixin(string name, string
SDL_getter, string
SDL_setter){
[...]
mixin(vectorpropertymixin(
"minsize", "SDL_GetWindowMinimumSize",
"SDL_GetWindowMinimumSize"
));
Strangely, though I'm getting this error when wrapping
SDL_GetWindowMinimumSize and SDL_GetWindowMaximumSize, I don't
get any compilation errors wrapping the identically-signatured
SDL_GetWindowSize and SDL_GetWindowPosition using the same mixin.
On Thursday, 5 May 2016 at 07:49:46 UTC, aki wrote:
Hello,
When I need to call C function, often need to
have char* pointer from string.
This might help:
import std.traits : isSomeString;
import std.string : toStringz;
extern (C) int strcmp(char* string1, char* string2);
int strcmpD0(S)(in
On Monday, 9 May 2016 at 18:56:15 UTC, Peter Häggman wrote:
No problem here (tested with everything in a single module). I
can't help more.
Front end version ?
Well, this is the full struct that has those malfeasant
overrides: http://pastebin.com/9h2s028J
I've written a very handy assertf method whose signature looks
like this:
void assertf(Args...)(lazy bool condition, in string message,
Args args)
But I'd also like to access the caller's file and line to use
them in constructing a thrown AssertError, and I'm stumbling on
how I can get
On Friday, 15 April 2016 at 20:52:42 UTC, WebFreak001 wrote:
void assertf(string file = __FILE__, size_t line = __LINE__,
Args...)(lazy bool condition, in string message, Args args) {
Aha, you are the best. Thanks!
In my struct I have some methods with these signatures:
void opIndexAssign(T)(in GLColor!T color, in int x, in int y)
void opIndexAssign(T1, T2)(in GLColor!T1 color, in Vector2!T2
vector)
void opIndexAssign(in uint value, in int x, in int y)
And when I try to do this:
On Monday, 9 May 2016 at 00:27:17 UTC, Peter Häggman wrote:
Can you show your GLColor struct ? Maybe it contains an alias
this or something else that mess the overload resolution.
My GLColor struct: http://pastebin.com/mUcA6G85
I would've expected this to work, but instead I get a compile
error. Is my syntax wrong? Is this just not a case that map can
handle, and I should be doing something else?
import std.algorithm : map;
import std.conv : to;
import std.stdio : writeln;
import std.string : join;
On Tuesday, 24 May 2016 at 20:18:34 UTC, Steven Schveighoffer
wrote:
Slice assignment from range to array is not supported.
In your example, I'm curious why the efforts to specify the
type? I think it would work with just saying auto itemstrings =
...
-Steve
I still get an error if I use
On Thursday, 28 July 2016 at 21:49:00 UTC, pineapple wrote:
On Thursday, 28 July 2016 at 20:28:39 UTC, jdfgjdf wrote:
"Parameters!dgref.init" does not yield a reference. The real
error is not displayed. In a normal context it would be "stuff
is not callable with"
What would be a better
On Thursday, 28 July 2016 at 20:28:39 UTC, jdfgjdf wrote:
"Parameters!dgref.init" does not yield a reference. The real
error is not displayed. In a normal context it would be "stuff
is not callable with"
What would be a better way to check whether some callable can be
called using a
On Friday, 29 July 2016 at 12:22:54 UTC, Andre Pany wrote:
It is more or less syntax sugar. In the main function instead
of writing "mixin(generateCode(s));" I want to write "foo(s);".
So, the mixin statement is hidden while the functionality of
mixin stays.
Kind regards
André
As far as I
On Friday, 29 July 2016 at 06:38:17 UTC, Andre Pany wrote:
Hi,
is there a way to alias a string mixin?
Neither foo nor foo2 compiles.
import std.meta : Alias;
alias foo = (s) => Alias!(mixin(generateCode(s)));
alias foo2(string s) = Alias!(mixin(generateCode(s)));
string generateCode(string
This failure seems curious and I haven't been able to understand
why it occurs, or whether it might be intentional. For all other
callable types, including functions and delegates and types
implementing opCall, the assertion passes.
import std.traits : FunctionTypeOf;
void function()
On Saturday, 30 July 2016 at 12:54:32 UTC, Basile B. wrote:
func is a pointer to a function but FunctionTypeOf extracts the
target type.
So the correct assertion is
static assert(is(FunctionTypeOf!func* == typeof(func)));
I can't believe that it worked for delegates because the same
On Sunday, 31 July 2016 at 18:57:50 UTC, Jack Stouffer wrote:
Next question: what's the fastest hashing implementation that
will provide the least collisions? Is there a hash
implementation that's perfered for AAs?
There's no hashing function that would be specifically better for
associative
On Wednesday, 10 August 2016 at 23:32:54 UTC, WhatMeWorry wrote:
Afterall, isn't that the definition of a string? So what's up
with the two groupings of single quotes?
http://www.howtogeek.com/howto/29980/whats-the-difference-between-single-and-double-quotes-in-the-bash-shell/
I was surprised when this didn't work. What's the rationale? Is
there any better workaround than renaming methods?
interface A{
void foo();
final void foo(int x){}
}
class B: A{
void foo(){}
}
void main(){
auto b = new B();
b.foo();
On Wednesday, 20 July 2016 at 18:32:15 UTC, Jesse Phillips wrote:
I think you mean that your range library treats them as arrays
of code units, meaning your library will break (some) unicode
strings.
Right - I disagree with the assessment that all (or even most)
char[] types are intended to
On Saturday, 16 July 2016 at 22:05:49 UTC, ketmar wrote:
actually, `foreach (v; rng)` looks like `foreach` is *reusing*
*existing* *variable*. most of the time you can put `immutable`
or something like that there to note that it is not reusing
(purely cosmetical thing), but sometimes you
On Sunday, 17 July 2016 at 01:57:21 UTC, pineapple wrote:
On Saturday, 16 July 2016 at 22:05:49 UTC, ketmar wrote:
actually, `foreach (v; rng)` looks like `foreach` is *reusing*
*existing* *variable*. most of the time you can put
`immutable` or something like that there to note that it is
not
On Wednesday, 20 July 2016 at 08:02:07 UTC, Mike Parker wrote:
You can then go to the documentation for
std.range.primitives.isRandomAccessRange [2], where you'll find
the following:
"Although char[] and wchar[] (as well as their qualified
versions including string and wstring) are arrays,
On Wednesday, 20 July 2016 at 13:33:34 UTC, Mike Parker wrote:
There is no auto-decoding going on here, as char[] and wchar[]
are rejected outright since they are not considered random
access ranges.
They are considered random access ranges by my ranges library,
because they are treated as
On Wednesday, 20 July 2016 at 16:03:27 UTC, pineapple wrote:
On Wednesday, 20 July 2016 at 13:33:34 UTC, Mike Parker wrote:
There is no auto-decoding going on here, as char[] and wchar[]
are rejected outright since they are not considered random
access ranges.
They are considered random
On Wednesday, 20 July 2016 at 16:04:50 UTC, pineapple wrote:
On Wednesday, 20 July 2016 at 16:03:27 UTC, pineapple wrote:
On Wednesday, 20 July 2016 at 13:33:34 UTC, Mike Parker wrote:
There is no auto-decoding going on here, as char[] and
wchar[] are rejected outright since they are not
On Thursday, 7 July 2016 at 03:52:40 UTC, Jonathan M Davis wrote:
However, it looks like you can combine those two types of
variadic functions to get more or less what you want (albeit
more verbosely). e.g.
template isInt(T) { enum isInt = is(std.traits.Unqual!T ==
int); }
void
I'd like to do something like this but it doesn't seem to be
legal -
void test(int[] ints...) if(ints.length){
// stuff
}
Not being able to specify this interferes with how I'd like to
define my method overloads. What's the best way to achieve what
I'm looking for?
This is essentially what I'm trying to accomplish. The intuitive
solution, of course, does not work. In theory I could write a
separate method for every anticipated return type, but that would
be horrible and in that case I'd probably just write the damn
thing in a dynamically-typed language
On Sunday, 10 July 2016 at 21:20:34 UTC, Basile B. wrote:
The problem you encounter here is that templatized functions
cannot be virtual. If you remove "abstract" and put an empty
body than it works, but you lose the whole OOP thing, i.e you
cannot call the most derived override from the base.
Why doesn't this code do what I'd expect it to, and how can I fix
it?
unittest{
import std.traits : Parameters;
// Works as expected
alias dg = int delegate(int value);
enum bool dgcallable =
is(typeof((){dg(Parameters!dg.init);}));
pragma(msg,
On Thursday, 18 August 2016 at 11:43:03 UTC, Lodovico Giaretta
wrote:
On Thursday, 18 August 2016 at 11:11:10 UTC, mogu wrote:
On Thursday, 18 August 2016 at 10:45:14 UTC, Lodovico Giaretta
wrote:
Which kind of error? An error message by the compiler? One by
the linker? The compiler crashes?
On Monday, 5 September 2016 at 15:43:52 UTC, Lodovico Giaretta
wrote:
On Monday, 5 September 2016 at 15:20:10 UTC, pineapple wrote:
I'd like to be able to write something like this, but I
haven't been able to find anything in the docs
class Base{}
class Sub: Base{}
static
On Monday, 5 September 2016 at 17:33:17 UTC, pineapple wrote:
Am I missing something or is this an obnoxious bug with the GC?
Oh, I've been trying to figure this out on and off for days and
of course five minutes after I post I fix the problem. I'm not
really sure why, but it did fix it.
I'd like to be able to write something like this, but I haven't
been able to find anything in the docs
class Base{}
class Sub: Base{}
static assert(is(SuperClassOf!Sub == Base));
This program does not compile.
Error: cannot implicitly convert expression (cast(int)x -
cast(int)x) of type int to ubyte
void main(){
ubyte x;
x = x - x;
}
I don't even know what to say. Who thought this behavior was a
good idea?
On Wednesday, 7 September 2016 at 20:29:42 UTC, jmh530 wrote:
Thanks for the reply. It looks like an interesting idea. You
might consider adding this (or a modified version) to a read me
in the range subfolder.
Fuck it, I took an hour to document the most significant modules.
On Wednesday, 31 August 2016 at 07:40:39 UTC, Dorian Haglund
wrote:
Hello,
I have an array of objects of class C which contain a id member.
I want to figure out if all the id members are unique using
functional primitives.
For example, if I have:
class C
{
int id;
}
and an array of C
On Wednesday, 31 August 2016 at 14:03:20 UTC, Yuxuan Shui wrote:
I want to make a hash table that uses std.experiment.allocator.
The bucket is allocated from an allocator, and freed in
~this(). I don't want to copy the whole bucket in this(this).
Maybe I should use a reference counter or
On Friday, 9 September 2016 at 11:54:42 UTC, Steven Schveighoffer
wrote:
Can you demonstrate the issue? I have never heard of this.
imports should work when done inside a function.
-Steve
Tried and failed to reproduce with a simple example, but any time
I've tried doing it in the code I'm
I've got a struct and it would be very convenient if I could
specify what happens when I write `if(value)` - is this possible?
On Saturday, 10 September 2016 at 14:24:23 UTC, ag0aep6g wrote:
On 09/10/2016 04:10 PM, pineapple wrote:
I've got a struct and it would be very convenient if I could
specify
what happens when I write `if(value)` - is this possible?
`if (value)` implies a cast to bool. Define opCast!bool and
On Friday, 9 September 2016 at 09:43:15 UTC, O-N-S wrote:
On Friday, 9 September 2016 at 09:31:54 UTC, pineapple wrote:
On Friday, 9 September 2016 at 08:25:40 UTC, rikki cattermole
wrote:
TLDR: no you cannot do what you were thinking.
Seems like something one ought to be able to do, though.
On Friday, 9 September 2016 at 08:25:40 UTC, rikki cattermole
wrote:
TLDR: no you cannot do what you were thinking.
Seems like something one ought to be able to do, though. DIP time?
On Thursday, 8 September 2016 at 22:13:26 UTC, Steven
Schveighoffer wrote:
I posted an article on this:
http://www.schveiguy.com/blog/2016/03/import-changes-in-d-2-071/
-Steve
Regarding that article:
Another import-related bug fix is to prevent unintentional
hijacking of symbols inside a
On Wednesday, 5 October 2016 at 19:30:01 UTC, Jonathan M Davis
wrote:
Would just like to point out that this is design weirdness on
Phobos' part - the library I've been writing does not have
this problem.
It doesn't even make conceptual sense for a static array to be
a range, because you
1 - 100 of 146 matches
Mail list logo