Thread overview
How to test for type without refs?
Mar 17, 2015
Charles Hixson
Mar 17, 2015
anonymous
Mar 17, 2015
Charles Hixson
March 17, 2015
I thought that in:
    T* user(T)()
    {    static assert (T.sizeof < bfHdr.user_.length);
          static assert (__traits(isPOD, T) );
          return    cast(T*) bfHdr.user_.ptr;
    }
the line:
static assert (__traits(isPOD, T) );

would test for there not being any embedded refs, pointers, etc., but
unittest
{
...
    struct    thead2    {    string    test;    }
    auto    userTest2    =    bf.user!(thead2)();
}
executes without complaint.  Is there a better way?
March 17, 2015
On Tuesday, 17 March 2015 at 14:06:19 UTC, Charles Hixson wrote:
> I thought that in:
>     T* user(T)()
>     {    static assert (T.sizeof < bfHdr.user_.length);
>           static assert (__traits(isPOD, T) );
>           return    cast(T*) bfHdr.user_.ptr;
>     }
> the line:
> static assert (__traits(isPOD, T) );
>
> would test for there not being any embedded refs, pointers, etc., but
> unittest
> {
> ...
>     struct    thead2    {    string    test;    }
>     auto    userTest2    =    bf.user!(thead2)();
> }
> executes without complaint.  Is there a better way?

There's std.traits.hasIndirections <http://dlang.org/phobos/std_traits.html#hasIndirections>.
March 17, 2015
On 03/17/2015 07:27 AM, anonymous via Digitalmars-d-learn wrote:
> On Tuesday, 17 March 2015 at 14:06:19 UTC, Charles Hixson wrote:
>> I thought that in:
>>     T* user(T)()
>>     {    static assert (T.sizeof < bfHdr.user_.length);
>>           static assert (__traits(isPOD, T) );
>>           return    cast(T*) bfHdr.user_.ptr;
>>     }
>> the line:
>> static assert (__traits(isPOD, T) );
>>
>> would test for there not being any embedded refs, pointers, etc., but
>> unittest
>> {
>> ...
>>     struct    thead2    {    string    test;    }
>>     auto    userTest2    =    bf.user!(thead2)();
>> }
>> executes without complaint.  Is there a better way?
>
> There's std.traits.hasIndirections <http://dlang.org/phobos/std_traits.html#hasIndirections>.
>
Thanks.  That did the job.  (I was looking at ...dmd-doc/html/d/traits.html instead.)