The glibc manual describes each feature test macro (FTM) including _DEFAULT_SOURCE:
If you define this macro, most features are included apart from
  X/Open, LFS and GNU extensions: the effect is to enable features from
  the 2008 edition of POSIX, as well as certain BSD and SVID features
  without a separate feature test macro to control them. Defining this
  macro, on its own and without using compiler options such as -ansi or
  -std=c99, has the same effect as not defining any feature test macros; defining it together with other feature test macros, or when options
  such as -ansi are used, enables those features even when the other
  options would otherwise cause them to be disabled.
This LWN.net article  about FTMs provides us with a rationale (among other perhaps interesting info):
The original intent seems to have been that, within each of the glibc
  header files that employs FTMs, only one of the __USE_* internal
  macros should govern the exposure of any particular definition.
  Additionally, the macros should not be used in nested #ifdef
  directives. An inspection of the glibc header files quickly shows that
  the reality is far from the intent, a situation that led Roland
  McGrath to suggest that it was time for a major cleanup to bring
  things back to the intended situation. Roland thought that task could
  be simplified by eliminating the _BSD_SOURCE and _SVID_SOURCE FTMs,
  which, although they had a purpose historically, have ceased to be
  useful these days. Anymore, he said, the only macros that are needed
  for modern source code are those that relate to formal standards plus
  _GNU_SOURCE.
Joseph Myers duly obliged with a series of patches to implement the
  first steps in this work. The conservative approach encouraged by
  Roland meant that the deprecation of the _BSD_SOURCE and
  _SVID_SOURCE FTMs is taking place across two glibc versions. Version
  2.19 of glibc added a new FTM, _DEFAULT_SOURCE. Defining this macro causes the default definitions to be exposed even when the explicit
  definition of other macros would cause that not to happen. The effect
  of defining this macro is equivalent to the effect of explicitly
  defining three macros in earlier glibc versions:
cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809C
So if you need to define _BSD_SOURCE or _SVID_SOURCE, simply define _DEFAULT_SOURCE too. glibc versions <= 2.18 don't care about it and versions >= 2.19 don't warn if both or all three are defined.