A48(M)

The A48(M) is a little spur from junction 29 of the M4 to let traffic flow more smoothly between Cardiff and the Severn Bridges. Once upon a time, for about three years, the M4 ended here, but this little bit of road was only ever going to be a spur and its life as part of a major motorway was always meant to be short-lived. The road was laid out from the outset to allow construction of the M4 Cardiff Bypass - it was built complete with the overbridge for junction 29 in place.

One of the mysteries of this road, much discussed at Pathetic Motorways, is the A48(M)'s ghost carriageway. About half this motorway's brief mileage is spent with the two carriageways separated as it approaches the merge with the M4. But alongside the westbound carriageway, there appears to be another roadway running parallel - exactly where the eastbound side would be if it wasn't busy flying over the M4. This appeared to be evidence that the A48(M) had been originally built without provision for this junction, as it looked like an old abandoned version of the eastbound side. But that's not the case.

The official, somewhat incredible story is that this was a temporary carriageway built while the westbound side was being reconstructed. Quite why the highway authorities went to such lengths to rebuild one half of a short spur motorway, or why they would need to when the road must have been less than 20 years old at the time, isn't very clear.

The A48(M) now has an uncertain future, with plans for the new M4 alignment at Newport threatening to relegate this to a non-motorway route as part of the widespread changes the new motorway will bring.

Start
Castleton
End
St Mellons
Passes
None
Connects to
Length
2 miles
Open Junctions Section
Oct 1977 Entire motorway

Exit list

Drupal\Core\Render\Markup(1)
  • contents
  • Available methods (4)
  • protected string -> string(233) " <!-- THEME DEBUG --> <!-- THEME HOOK: 'views_view_field' --> <!-- BEGIN OUTPUT …"
    
    <!-- THEME DEBUG -->
    <!-- THEME HOOK: 'views_view_field' -->
    <!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
    
    <!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
    
    
  • public static create($string) -> string|\Drupal\Component\Render\MarkupInterface
    Creates a Markup object if necessary.
    
    If $string is equal to a blank string then it is not necessary to create a
    Markup object. If $string is an object that implements MarkupInterface it
    is returned unchanged.
    
    @param mixed $string
    The string to mark as safe. This value will be cast to a string.
    
    @return string|\Drupal\Component\Render\MarkupInterface
    A safe string.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:32
    public __toString() -> string
    Returns the string version of the Markup object.
    
    @return string
    The safe string content.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:51
    public count() -> int
    Returns the string length.
    
    @return int
    The length of the string.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:61
    public jsonSerialize() -> string
    Returns a representation of the object for use in JSON serialization.
    
    @return string
    The safe string content.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:71
Drupal\Core\Render\Markup(1)
  • contents
  • Available methods (4)
  • protected string -> string(233) " <!-- THEME DEBUG --> <!-- THEME HOOK: 'views_view_field' --> <!-- BEGIN OUTPUT …"
    
    <!-- THEME DEBUG -->
    <!-- THEME HOOK: 'views_view_field' -->
    <!-- BEGIN OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
    
    <!-- END OUTPUT from 'core/modules/views/templates/views-view-field.html.twig' -->
    
    
  • public static create($string) -> string|\Drupal\Component\Render\MarkupInterface
    Creates a Markup object if necessary.
    
    If $string is equal to a blank string then it is not necessary to create a
    Markup object. If $string is an object that implements MarkupInterface it
    is returned unchanged.
    
    @param mixed $string
    The string to mark as safe. This value will be cast to a string.
    
    @return string|\Drupal\Component\Render\MarkupInterface
    A safe string.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:32
    public __toString() -> string
    Returns the string version of the Markup object.
    
    @return string
    The safe string content.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:51
    public count() -> int
    Returns the string length.
    
    @return int
    The length of the string.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:61
    public jsonSerialize() -> string
    Returns a representation of the object for use in JSON serialization.
    
    @return string
    The safe string content.
    
    Defined in .../core/lib/Drupal/Component/Render/MarkupTrait.php:71
Junction   Eastbound               Westbound  
M4 J29
Casnewydd
Newport
M4 Link

M4

M4
N/A
LanesLanesLanesLanesLanesLanesLanes LanesLanesLanesLanes
0 miles, 2 lanes 0 miles, 2 lanes

Llaneirwg
St Mellons
A48
A48



Caerdydd
Cardiff
A48
LanesLanesLanesLanes Signs LanesLanesLanesLanes Signs
0 miles, lanes 0 miles, lanes
Routes

Picture credits

With thanks to Maurice Frank for information in this section.